MySQL导入dump文件踩的两个小坑

背景

1、线上使用的是阿里云的RDS for MySQL,导入其数据库至线下,因为数据量不大,所以采用的是逻辑备份的方式。
2、在控制台进行手动备份,然后下载下来,上传至本地服务器,准备导入数据
3、本地环境是一组两备的mysql集群,主备状态正常

GTID限制

在导入的时候数据的时候发现报错

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

此报错是是因为在逻辑备份时有GTID的备份限制,一般有两个解决方案:
1、–set-gtid-purged=off
在dump导出时,添加–set-gtid-purged=off参数,避免将gtid信息导出

mysqldump -uroot -p --set-gtid-purged=off -d test>test.sql

因为我这个是从RDS控制台进行的备份,无法指定参数,所以
2、reset master
这个操作可以将当前库的GTID_EXECUTED值置空。此时sql文件中的set就可以执行
功能说明:删除所有的binglog日志文件,并将日志索引文件清空,重新开始所有新的日志文件。用于第一次进行搭建主从库时,进行主库binlog初始化工作;

这里的话,我线下已经是一主两备,不能做这样操作

解决办法:
手动将sql文件中关于GTID的内容删除

GTID state at the beginning of the backup
SET @@GLOBAL.GTID_PURGED='2d5a7b17-bcb3-11e9-b156-ec0d9ac5d408:1-2490085,
2d98295e-bcb3-11e9-b156-506b4bfdc6e4:1-649802,
73f4fc2b-aeb5-11ea-9b70-98039b1b4bd8:123-2384';

备库没有同步

解决GTID的错误以后,在主库执行sql文件成功,登录到主库去查看相关表和数据都正常。
在登录在备库去查看数据时发现备库的表和数据没有同步

检查主备复制状态,master和slave的状态均正常。线程启动也是正常
手动在主库上建表插入数据,备库均能成功同步。日志中也均为明显报错

最后就是还怀疑到sql文件上,发现文件上还有一个关于binlog的会话参数设置

SET @MYSQLDUMP_TEMP_LOG_BIN = @@SESSION.SQL_LOG_BIN;
SET @@SESSION.SQL_LOG_BIN= 0;
.......
SET @@SESSION.SQL_LOG_BIN = @MYSQLDUMP_TEMP_LOG_BIN;

该参数控制了禁止将语句记录进binlog日志中,而mysql主备是由binlog日志进行同步,没有日志,也就无法同步数据,应该是RDS为了避免在导入迁移数据过程中会产生大量的binlog,造成服务器的不稳定

将sql文件的相关参数删除即可

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值