腾讯CVM自建基于GTID复制的mysql作为CDB的从库

ADMIN 腾讯云 , cvm , mysql , cdb , 主从 2020-04-11 16:47:06 50 次浏览 0条评论

云数据库CDB本身已经是主从架构,不过很多用户还是希望通过自建mysql实现和云数据库cdb实现主从同步,这时候用户就可以自己在云服务器CVM上部署从库,下面是部署步骤 :

【备注:本文是基于mysql 5.7实现的】

1、首先用户通过在控制台创建一个用于复制的账户wjqrepl;

1.png

2、给wjqrepl用户赋予相应的权限

2.png

3、导出云数据库中的业务库数据

3.png

导出出现警告原因:

mysql提示: 当前数据库实例中开启了 GTID 功能, 在开启有 GTID 功能的数据库实例中, 导出其中任何一个库, 如果没有显示地指定--set-gtid-purged参数, 都会提示这一行信息. 意思是默认情况下, 导出的库中含有 GTID 信息, 如果不想导出包含有 GTID 信息的数据库, 需要显示地添加--set-gtid-purged=OFF参数.。

【备注:该步骤也可以通过控制台手动执行备份,然后通过控制台下载备份文件】

4、确认自建从库是否开启GTID

4.png

如果没有开启,修改my.cnf的配置文件,在[mysqld]中增加如下内容:

5.png

然后重新自建mysql数据库服务。


5、将上述导出的备份文件导入到自建的mysql数据库中;

6.png

ERROR 1840 (HY000) at line 24: @@GLOBAL.GTID_PURGED can only be set when @@GLOBAL.GTID_EXECUTED is empty.

报错说明:

带有 GTID 信息的备份 文件, 要求目标数据库实例必须开启 GTID 功能, 且当前数据库中无其他 GTID 信息. 如果目标数据库中已经记录了一条或一条以上的 GTID 信息, 那么在导入数据库时会上面类似的错误;

检查一下从库的GTID信息:

7.png

解决方法:

1、重新 dump 数据库, 使用--set-gtid-purged=OFF的参数禁止;

2、在目标数据库中执行 reset slave all;和 reset master;清空所有 GTID 信息之后就可以导入了;

8.png

之后,重新执行导入操作,成功;


6、在CVM自建mysql数据库配置主从同步关系,并启动slave

9.png

7、查看主从同步关系是否成功

主库(CDB):

10.png

从库:(自建mysql)

11.png


通过执行show slave status\G;发现主从同步成功;下面即可做一些简单的测试,验证主从同步关系!


问题总结:

在自建mysql上配置主从同步关系时,可能会出现配置成功,但是通过show slave status\G;查看同步失败的问题,出现如下的问题:

Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'The slave is connecting using CHANGE MASTER TO MASTER_AUTO_POSITION = 1, but the master has purged binary logs containing GTIDs that the slave requires.'

原因分析:

因为CDB的binlog默认保存5天,这样的前提下,我们又想使slave通过replication从master进行数据复制。此时我们就需要跳过master已经被purge的部分,进行强行同步;

解决方法:

(1)先确认master上已经purge的部分。从下面的命令结果可以知道master上已经缺失56664dae-80af-11e7-afa0-446a2e8b4e3a:1-57955740这一条事务的相关日志;

(2)在slave上,

首先,执行stop slave;然后通过set global  gtid_purged='56664dae-80af-11e7-afa0-446a2e8b4e3a:1-57955740';的方式,跳过已经purge的部分;最后,执行start slave;

(3)然后再次通过show slave status\G;查看主从同步的成功;


评论列表 (0)

发表评论

本网站仅限技术讨论,请不要发表不当言论,本站将会对所有留言审核后方可显示。如需给站长留言,请在下方评论区@admin,谢谢合作!