腾讯CVM自建基于GTID复制的mysql作为CDB的从库
QQ反馈群:1065433015
云数据库CDB本身已经是主从架构,不过很多用户还是希望通过自建mysql实现和云数据库cdb实现主从同步,这时候用户就可以自己在云服务器CVM上部署从库,下面是部署步骤 :
【备注:本文是基于mysql 5.7实现的】
1、首先用户通过在控制台创建一个用于复制的账户wjqrepl;
2、给wjqrepl用户赋予相应的权限
3、导出云数据库中的业务库数据
导出出现警告原因:
mysql提示: 当前数据库实例中开启了 GTID 功能, 在开启有 GTID 功能的数据库实例中, 导出其中任何一个库, 如果没有显示地指定--set-gtid-purged参数, 都会提示这一行信息. 意思是默认情况下, 导出的库中含有 GTID 信息, 如果不想导出包含有 GTID 信息的数据库, 需要显示地添加--set-gtid-purged=OFF参数.。
【备注:该步骤也可以通过控制台手动执行备份,然后通过控制台下载备份文件】
4、确认自建从库是否开启GTID
如果没有开启,修改my.cnf的配置文件,在[mysqld]中增加如下内容:
然后重新自建mysql数据库服务。
5、将上述导出的备份文件导入到自建的mysql数据库中;
ERROR 1840 (HY000) at line 24: @@GLOBAL.GTID_PURGED can only be set when @@GLOBAL.GTID_EXECUTED is empty.
报错说明:
带有 GTID 信息的备份 文件, 要求目标数据库实例必须开启 GTID 功能, 且当前数据库中无其他 GTID 信息. 如果目标数据库中已经记录了一条或一条以上的 GTID 信息, 那么在导入数据库时会上面类似的错误;
检查一下从库的GTID信息:
解决方法:
1、重新 dump 数据库, 使用--set-gtid-purged=OFF的参数禁止;
2、在目标数据库中执行 reset slave all;和 reset master;清空所有 GTID 信息之后就可以导入了;
之后,重新执行导入操作,成功;
6、在CVM自建mysql数据库配置主从同步关系,并启动slave
7、查看主从同步关系是否成功
主库(CDB):
从库:(自建mysql)
通过执行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;查看主从同步的成功;