如何同步两个mysql数据库中所有的表

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何同步两个mysql数据库中所有的表相关的知识,希望对你有一定的参考价值。

用数据库快照就能实现啊.

Oracle快照原理及实现总结

Oracle数据库的快照是一个表,它包含有对一个本地或远程数据库上一个或多个表或视图的查询的结果。对于中大型数据库,业务数据库里所有的数据同步到另外一个处理服务器上最佳的选择还是使用SnapShot方式,即快照的方式。

由于工作需要,今天需要将业务数据库里所有的数据同步到另外一个处理服务器上。在做方案的时候,想了很多方法,当然最快的办法还是使用物理热备的方式。

但是我个人认为如果对于中大型数据库(我们的数据库有300G左右)最佳的选择还是使用SnapShot方式,即快照的方式。

Oracle数据库的快照是一个表,它包含有对一个本地或远程数据库上一个或多个表或视图的查询的结果。也就是说快照根本的原理就是将本地或远程数据库上的一个查询结果保存在一个表中。

以下是我建立的Snapshot,目的是从业务数据库上将数据Copy到处理数据库上,是不同的两个服务器之间对数据copy。

第一步:在处理服务器上的Oracle终端,建立database link,业务数据库服务器SID为TEST

create database link TEST_DBLINK.US.ORACLE.COM
connect to AMICOS identified by AMICOS
using 'test';

第二步:在业务数据库上对应的表建立快照日志
Create snapshot log on A_Table;

第三步:建立Snapshot 快照名称为:Test_SnapShot

Create snapshot Test_SnapShot
REFRESH COMPLETE START WITH SYSDATE NEXT SYSDATE+1/24
as select * from A_Table@TEST_DBLINK

说明:REFRESH是刷新方法

刷新方式有:COMPLETE和FAST两种,而START WITH是说明开始执行的时间。

Next是下次执行的时间

而AS以后是构成快照的查询方法。

相关的方法:

更改快照

ALTER SNAPSHOT Test_SnapShot
REFRESH COMPLETE START WITH SYSDATE NEXT SYSDATE+1/2;

手动刷新快照 在命令界面执行:

EXEC DBMS_SNAPSHOT.REFRESH('Test_SnapShot ','C');

第一个参数是要刷新的快照名

第二个参数是刷新的方式,F----FAST, C---COMPLETE

查看快照最后刷新的日期

SELECT NAME,LAST_REFRESH
FROM ALL_SNAPSHOT_REFRESH_TIMES;

最后非常的方案:

1:为需要做Snapshot的表建立Snapshot日志

create snapshot log on t1 with rowid; 这里使用ROWID建立日记的参数

2:采用Fast的方式建立快照,使用rowid做为参考参数

create snapshot fb_test_b refresh fast with rowid start with sysdate next sysdate+1/1440 as select * from fb_test_b@my_dblink;

最好能按照rowid来建立快照。要不然就必须要为表建立Primary Key。

参考技术A phpMyAdmin有一个同步功能,你参考一下。

如何在mysql中获取所有具有自动增量主键的表?

【中文标题】如何在mysql中获取所有具有自动增量主键的表?【英文标题】:How to get all the tables with auto increment primary key in mysql? 【发布时间】:2020-02-17 11:15:58 【问题描述】:

我的 mysql 数据库中有巨大的表,我想获取所有具有自动递增列和列名的表。谁能教我怎么做?

【问题讨论】:

How to see indexes for a database or table in MySQL?的可能重复 @RaymondNijland 抱歉,我不这么认为。我正在考虑从 information_schema.Columns 获取信息。 【参考方案1】:

我认为您可以从 INFORMATION_SCHEMA 架构中的 COLUMNS 表中获取该信息。

例如

select TABLE_NAME, COLUMN_NAME from COLUMNS where `COLUMN_KEY` = 'PRI' and EXTRA like '%auto_increment%'

【讨论】:

不知道你可以在不定义 AUTO_INCREMENT 的情况下定义 PRIMARY KEY.. -> db-fiddle.com/f/jbADd4roKNmxXca4C2i5QY/0 你测试了吗?在 mysql 8 上进行一些测试后不正确。 那么在该表中,您不会在列 a 上自动递增。尝试在不定义列 a 的情况下进行两次插入。 这是一个“示例”案例的意思。@LazerBass,this 会更有意义.. 使用 EXTRA LIKE '%auto_increment%' 可能会更好一些,因为从手册解释额外的 coiumn 的方式来看,额外可以有多个值..

以上是关于如何同步两个mysql数据库中所有的表的主要内容,如果未能解决你的问题,请参考以下文章

Java代码中,如何监控Mysql的binlog?

mysql如何实现两个数据库数据结构实时同步?

MySQL创建触发器实现统一主机下两个数据库的表同步

[同步脚本]mysql-elasticsearch同步

MySql之自动同步表结构

是否可以从 MySQL 和 MSSQL 同步两个链接服务器中的两个表?