pt-slave-restart工具
在MySQL主从复制环境的搭建中,常常会遇到一种场景,主库和从库都要初始化用户的账号密码,正常的情况下,需要在主库和从库都关闭session级别的binlog,然后再进行用户信息导入。
但是有时候会忽略关闭session级别binlog这个前置动作,例如在基于GTID的复制模式下,主从库都直接导入了用户的账号密码信息,主库和从库都将账号密码的事务记录到了自己的GTID中,此时我们如果利用GTID的方式搭建复制,会出现报错,因为从库已经有账号了,所以主库上同步到从库的用户信息会出现报错现象,提示用户已经存在,这种情况下,我们需要在从库跳过从主库复制过来的创建用户的SQL语句。
在GTID模式下,通过下面的办法可以跳过一个事务:
stop slave;
set gtid_next=xxxxx;
begin;
commit;
set gtid_next=automatic;
start slave;
但是在事务数很多的情况下,我们不能一个一个跳过,需要批量跳过同一个错误,这里有几种方式可以进行处理;
分别是调整slave_skip_errors参数或者slave_exec_mode 参数
今天我们来看另外一种方法,就是利用pt-slave-restart工具来进行事务跳过,命令如下:
./pt-slave-restart -uroot -proot123 --error-numbers=1062
命令很容易理解,写清楚错误编码,直接跳过就行,它会打印出来很多信息,默认情况下打印内容为:时间戳、连接信息、中继日志文件、中继日志位置以及上一个错误号。例如:
2020-09-22T00:59:09 P=3306,h=192.168.7.194,p=...,u=root relay-bin.000005 369 1032
2020-09-22T00:59:09 P=3306,h=192.168.7.194,p=...,u=root relay-bin.000005 726 1032
2020-09-22T00:59:09 P=3306,h=192.168.7.194,p=...,u=root relay-bin.000005 1085 1032
2020-09-22T00:59:09 P=3306,h=192.168.7.194,p=...,u=root relay-bin.000005 1444 1032
2020-09-22T00:59:09 P=3306,h=192.168.7.194,p=...,u=root relay-bin.000005 1800 1032
你可以使用--verbose选项添加更多信息,也可以使用--quiet选项阻止所有输出。
注意事项:
如果需要使用,请暂时关闭多线程复制的workers
关于pt-slave-restart的其他参数,可以使用pt-slave-restart --help的命令查看,也可以参考下面的常见参数列表:
--always :永不停止slave线程,手工停止也不行
--ask-pass :替换-p命令,防止密码输入被身后的开发窥屏
--error-numbers :指定跳过哪些错误,可用,进行分隔
--error-text :根据错误信息进行匹配跳过
--log :输出到文件
--recurse :在主端执行,监控从端
--runtime :工具执行多长时间后退出:默认秒,m=minute,h=hours,d=days
--slave-user --slave-password :从库的账号密码,从主端运行时使用
--skip-count :一次跳过错误的个数,胆大的可以设置大些,不指定默认1个
--master-uuid :级联复制的时候,指定跳过上级或者上上级事务的错误
--until-master :到达指定的master_log_pos,file位置后停止,格式:”file:pos“
--until-relay :和上面一样,但是根据relay_log的位置来停止
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有