【修复MySQL 主从Last_Errno:1051报错的几种解决方案】
当MySQL主从集群遇到Last_Errno:1051报错后不要着急,主要有三种解决方案:
方案1:
使用GTID场景:
mysql> STOP SLAVE;
(2)设置事务号,事务号从Retrieved_Gtid_Set获取
在session里设置gtid_next,即跳过这个GTID
mysql> SET @@SESSION.GTID_NEXT= '8f9e146f-0a18-11e7-810a-0050568832c3:5'
(3)设置空事物
mysql> BEGIN; COMMIT;
(4)恢复事物号
mysql> SET SESSION GTID_NEXT = AUTOMATIC;
(5)启动slave进程
mysql> START SLAVE;
未使用GTID场景:
msyql> stop slave;
msyqI> set GLOBAL SQL_SLAVE_SKIP COUNTER=1;
msyql> start slave,
方案2:
mysql> STOP SLAVE;
mysql> RESET MASTER;
mysql> SET @@GLOBAL.GTID_PURGED ='8f9e146f-0a18-11e7-810a-0150568833c8:1-5'
mysql> START SLAVE;
方案3:使用pt-slave-repair工具
pt-slave-repair是对原有pt-slave-restart工具的补充,它提供自动修复MySQL主从同步复制的报错数据,以及恢复中断的sql thread复制线程。
二进制文件下载地址:
https://github.com/hcymysql/pt-slave-repair/releases/tag/pt-slave-repair_v1.0.9
shell> chmod 755 pt-slave-repair
连接到同步报错的slave从库上执行(请用MySQL复制的账号,例如repl,并赋予工具运行的权限)
mysql> show grants for repl@'%';+------------------------------------------------------------------------+| Grants for repl@% |+------------------------------------------------------------------------+| GRANT SUPER, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO `repl`@`%`|| GRANT SELECT, INSERT, UPDATE, DELETE ON `yourDB`.* TO `repl`@`%` || GRANT SELECT ON `performance_schema`.* TO `repl`@`%` |+------------------------------------------------------------------------+3 rows in set (0.00 sec)shell> ./pt-slave-repair -H 192.168.198.239 -P 3346 -u repl -p hechunyang -d test