关系数据库MySQL版

MySQL 实例间的双向同步

2025-05-30 09:35:22

前提条件

源库要求

          正向同步(源库同步至目标库)所需权限:

          对MySQL库的查询权限。

          对待迁移库的查询权限。

          部分全局权限:RELOAD、LOCK TABLES、REPLICATION CLIENT、REPLICATION SLAVE、SHOW VIEW、PROCESS。

          如果是整实例迁移,需要对所有数据库的查询权限。

          反向同步(目标库同步至源库)所需权限为以下全局权限:

          ALTER、ALTER ROUTINE、CREATE、CREATE ROUTINE、CREATE TEMPORARY TABLES、CREATE USER、CREATE VIEW、DELETE、DROP、EVENT、EXECUTE、INDEX、INSERT、LOCK TABLES、PROCESS、REFERENCES、RELOAD、SELECT、SHOW DATABASES、SHOW VIEW、TRIGGER、UPDATE。

          其他要求:

          在磁盘空间允许的情况下,建议数据库binlog保存时间越长越好,建议为3天。

          数据库的binlog日志必须打开,且binlog日志格式必须为Row格式。

          数据库expire_logs_days参数值为0,可能会导致同步失败。

          待同步的表需具备主键或唯一约束,且字段具有唯一性,否则可能会导致目标数据库中出现重复数据。

          必须设置MySQL数据库的server-id。如果数据库版本小于或等于MySQL5.6,server-id的取值范围在2-4294967296之间;如果数据库版本大于或等于MySQL5.7,server-id的取值范围在1-4294967296之间。

          数据库GTID状态建议为开启状态,数据库实例没有开启GTID的情况下数据传输服务DTS不支持主备HA切换,因为数据传输服务DTS任务会因为位点不续接而中断导致无法恢复。

          数据库必须有足够的磁盘空间。

          目标库关联RDS数据库的字符集必须与源数据库一致。

          源库和目标库的大版本号需保持一致。

          数据库必须包含双向同步标记库表(用于解决双向同步数据回环的问题),相关SQL请参考如下语句:

CREATE DATABASE IF NOT EXISTS retl; 
 CREATE TABLE retl.`retl_mark` (
   `ID` bigint(20) NOT NULL AUTO_INCREMENT,
   `CHANNEL_ID` int(11) DEFAULT NULL,
   `CHANNEL_INFO` varchar(128) DEFAULT NULL,
   PRIMARY KEY (`ID`)
 ) ENGINE=InnoDB AUTO_INCREMENT=3002 DEFAULT CHARSET=utf8;
目标库要求

与源库要求保持一致。

约束限制

          双向同步是在全量同步完成后才开始进行,全量同步完成之前,目标库只能读不能写,否则会导致源库与目标库数据不一致。待全量同步完成后,目标库可读可写。

          为保障同步数据的一致性,您需要确保同一个主键或唯一键的记录只在双向同步的一个节点进行更新。如果同时更新则会按照您在数据同步作业中配置的主方向进行响应。

²  说明

详细信息请参考数据传输服务DTS文档

操作步骤

1.        登录管理控制台。

2.        单击管理控制台左上角的

            

            ,选择区域和项目。

3.        选择“数据库 > 数据传输服务DTS”,进入数据传输服务DTS控制台。

4.        单击左侧菜单栏“数据同步”。

5.        点击“创建实例”按钮创建数据传输服务DTS同步实例。

6.        在“信息配置”栏,网络接入类型选择“公网EIP”,公网IP任意选择一个可用的公网IP即可。

²  说明

如果在天翼云已有可用的公网IP,则可以直接使用,否则需要先购买一个公网IP用于实现数据传输服务DTS实例的公网访问。

7.        在“信息配置”栏的“目标库实例”中,选择您需要同步的第一个数据库类型与实例。

8.        填写完信息后点击“下一步 > 立即创建”,开始创建数据传输服务DTS实例。

9.        回到数据传输服务DTS控制台,等待数据传输服务DTS实例创建成功后,找到对应实例,点击“实例配置”。

10.     填写源库的IP地址、端口号、数据库账号和密码,填写目标库的数据库账号和密码,点击“检测连通性并下一步”。

11.     在“同步拓扑”处选择“双向同步”。

12.     在“源库对象”处选择需要同步的第二个数据库,点击箭头移动到“已选择对象”。

13.     单击“下一步预检查”,等待预检查完成。

²  说明

如果预检查没有通过,可根据提示进行修改,然后重新执行预检查。

14.     预检查通过后,单击“启动同步”开始进行数据同步。

15.     回到数据传输服务DTS控制台,点击实例可以查看同步状态。


FOAOCGOvsC8U