mysql主从同步错误Last_SQL_Errno: 1032处理分析
发表于:2025-11-06 作者:千家信息网编辑
千家信息网最后更新 2025年11月06日,在MySQL DBA 日常运维工作中,主从同步失败一定是会遇到的,最常见建是1032错误。 1032错误的主要原因是主库更新或者是删除的记录在从库上不存在引起的。 处理此种错误一般有两种思路: 1、直
千家信息网最后更新 2025年11月06日mysql主从同步错误Last_SQL_Errno: 1032处理分析在MySQL DBA 日常运维工作中,主从同步失败一定是会遇到的,最常见建是1032错误。 1032错误的主要原因是主库更新或者是删除的记录在从库上不存在引起的。 处理此种错误一般有两种思路: 1、直接跳过错误执行语句 2、找到错误执行语句,修复从库数据 第一种解决方案会有造成主从不一致的隐患(delete语句可以跳过),第二种是从根本上解决问题比较推荐
语句跳过操作方法如下: --传统模式 mysql> stop slave; #表示跳过一步错误,后面的数字可变 mysql> set global sql_slave_skip_counter =1; mysql> start slave;
之后再用mysql> show slave status\G 查看:
Slave_IO_Running: Yes Slave_SQL_Running: Yes
--GTID模式 mysql> stop slave;
通过show slave status\G;找到Retrieved_Gtid_Set:7800a22c-95ae-11e4-983d-080027de205a:10
mysql> set GTID_NEXT='7800a22c-95ae-11e4-983d-080027de205a:10 '
mysql> begin;commit;
mysql> set GTID_NEXT='AUTOMATIC';
mysql> start slave;
修复从库数据方法如下:
实验处理update错误步骤 主库: mysql> select * from t1; Empty set (0.00 sec) mysql> set sql_log_bin=0; Query OK, 0 rows affected (0.01 sec) mysql> insert into t1 values (1,'aa'); Query OK, 1 row affected (0.01 sec) mysql> insert into t1 values (2,'bb'); Query OK, 1 row affected (0.00 sec) mysql> insert into t1 values (4,'dd'); Query OK, 1 row affected (0.02 sec) mysql> insert into t1 values (5,'ee'); Query OK, 1 row affected (0.02 sec) mysql> set sql_log_bin=1; Query OK, 0 rows affected (0.00 sec) mysql> insert into t1 values (3,'cc'); Query OK, 1 row affected (0.02 sec) mysql> select * from t1; +----+------+ | id | name | +----+------+ | 1 | aaaa | | 2 | bb | | 3 | cc | | 4 | dd | | 5 | ee | +----+------+ 5 rows in set (0.00 sec)
从库: mysql> select * from t1; +----+------+ | id | name | +----+------+ | 3 | cc | +----+------+ 1 row in set (0.00 sec)
模拟故障: 主库: mysql> update t1 set name = 'aaaa' where id=1; Query OK, 1 row affected (0.11 sec) Rows matched: 1 Changed: 1 Warnings: 0 从库: mysql> show slave status\G; Slave_IO_Running: Yes Slave_SQL_Running: No Last_Errno: 1032 Last_Error: Could not execute Update_rows event on table reptest.t1; Can't find record in 't1', Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND; the event's master log mysql-bin.000009, end_log_pos 42303
单条故障处理: 根据Last_Error中提示的master log和end_log_pos的位置查找这条从库上缺失的数据 主库: shell># mysqlbinlog -v --base64-output=decode-rows --stop-position=42303 /data/mysql/mysql3306/logs/mysql-bin.000009 | tail -20 SET TIMESTAMP=1496988091/*!*/; BEGIN /*!*/; # at 42198 #170609 14:01:31 server id 1003306 end_log_pos 42249 CRC32 0xfff09796 Table_map: `reptest`.`t1` mapped to number 240 # at 42249 #170609 14:01:31 server id 1003306 end_log_pos 42303 CRC32 0x67a63dd5 Update_rows: table id 240 flags: STMT_END_F ### UPDATE `reptest`.`t1` ### WHERE ### @1=1 ### @2='aa' ### SET ### @1=1 ### @2='aaaa' ROLLBACK /* added by mysqlbinlog */ /*!*/; SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/; DELIMITER ; # End of log file /*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/; /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
找到之后,手动转变为insert into `reptest`.`t1` values (1,'aa'); 从库: mysql> insert into `reptest`.`t1` values (1,'aa'); Query OK, 1 row affected (0.01 sec) mysql> start slave; Query OK, 0 rows affected (0.03 sec) mysql> show slave status\G; Slave_IO_Running: Yes Slave_SQL_Running: Yes
此时故障已恢复,主从同步恢复正常。
可是如果有很多条不一致的,甚至涉及到多张表,如此处理就很费精力了,可以通过编写脚本来处理,数据库如果不大也可以重做。 出现1032错误之后,如果不是通过重做解决的,最好使用pt-table-checksum检查、pt-table-sync修复,pt工具都是需要在主从双yes的情况下才能使用。
语句跳过操作方法如下: --传统模式 mysql> stop slave; #表示跳过一步错误,后面的数字可变 mysql> set global sql_slave_skip_counter =1; mysql> start slave;
之后再用mysql> show slave status\G 查看:
Slave_IO_Running: Yes Slave_SQL_Running: Yes
--GTID模式 mysql> stop slave;
通过show slave status\G;找到Retrieved_Gtid_Set:7800a22c-95ae-11e4-983d-080027de205a:10
mysql> set GTID_NEXT='7800a22c-95ae-11e4-983d-080027de205a:10 '
mysql> begin;commit;
mysql> set GTID_NEXT='AUTOMATIC';
mysql> start slave;
修复从库数据方法如下:
实验处理update错误步骤 主库: mysql> select * from t1; Empty set (0.00 sec) mysql> set sql_log_bin=0; Query OK, 0 rows affected (0.01 sec) mysql> insert into t1 values (1,'aa'); Query OK, 1 row affected (0.01 sec) mysql> insert into t1 values (2,'bb'); Query OK, 1 row affected (0.00 sec) mysql> insert into t1 values (4,'dd'); Query OK, 1 row affected (0.02 sec) mysql> insert into t1 values (5,'ee'); Query OK, 1 row affected (0.02 sec) mysql> set sql_log_bin=1; Query OK, 0 rows affected (0.00 sec) mysql> insert into t1 values (3,'cc'); Query OK, 1 row affected (0.02 sec) mysql> select * from t1; +----+------+ | id | name | +----+------+ | 1 | aaaa | | 2 | bb | | 3 | cc | | 4 | dd | | 5 | ee | +----+------+ 5 rows in set (0.00 sec)
从库: mysql> select * from t1; +----+------+ | id | name | +----+------+ | 3 | cc | +----+------+ 1 row in set (0.00 sec)
模拟故障: 主库: mysql> update t1 set name = 'aaaa' where id=1; Query OK, 1 row affected (0.11 sec) Rows matched: 1 Changed: 1 Warnings: 0 从库: mysql> show slave status\G; Slave_IO_Running: Yes Slave_SQL_Running: No Last_Errno: 1032 Last_Error: Could not execute Update_rows event on table reptest.t1; Can't find record in 't1', Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND; the event's master log mysql-bin.000009, end_log_pos 42303
单条故障处理: 根据Last_Error中提示的master log和end_log_pos的位置查找这条从库上缺失的数据 主库: shell># mysqlbinlog -v --base64-output=decode-rows --stop-position=42303 /data/mysql/mysql3306/logs/mysql-bin.000009 | tail -20 SET TIMESTAMP=1496988091/*!*/; BEGIN /*!*/; # at 42198 #170609 14:01:31 server id 1003306 end_log_pos 42249 CRC32 0xfff09796 Table_map: `reptest`.`t1` mapped to number 240 # at 42249 #170609 14:01:31 server id 1003306 end_log_pos 42303 CRC32 0x67a63dd5 Update_rows: table id 240 flags: STMT_END_F ### UPDATE `reptest`.`t1` ### WHERE ### @1=1 ### @2='aa' ### SET ### @1=1 ### @2='aaaa' ROLLBACK /* added by mysqlbinlog */ /*!*/; SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/; DELIMITER ; # End of log file /*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/; /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
找到之后,手动转变为insert into `reptest`.`t1` values (1,'aa'); 从库: mysql> insert into `reptest`.`t1` values (1,'aa'); Query OK, 1 row affected (0.01 sec) mysql> start slave; Query OK, 0 rows affected (0.03 sec) mysql> show slave status\G; Slave_IO_Running: Yes Slave_SQL_Running: Yes
此时故障已恢复,主从同步恢复正常。
可是如果有很多条不一致的,甚至涉及到多张表,如此处理就很费精力了,可以通过编写脚本来处理,数据库如果不大也可以重做。 出现1032错误之后,如果不是通过重做解决的,最好使用pt-table-checksum检查、pt-table-sync修复,pt工具都是需要在主从双yes的情况下才能使用。
错误
处理
数据
语句
主从
故障
同步
一致
方法
模式
不大
从不
传统
位置
原因
可以通过
多张
工具
常见
思路
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
广州磊友网络技术有限公司
内蒙古互联网软件开发创新服务
我的世界微电影服务器战争
数据库怎么创建字段说明
林 协定 网络安全
ibm7947服务器
软件开发kpi怎么填
网络技术对青少年的影响作文
怎么使用数据库的索引
服务器密码怎么设置安全模式
实况足球手游服务器访问限制
智能触摸屏软件开发
软件开发乙方跳槽银行甲方
永州电子仓库软件开发
软件开发计划意思
数据库kdb
广联达激活服务器地址
丹东市软件开发
趣步类软件开发
服务器是如何储存数据的
人民银行在网络安全会上的发言
office服务器管理器
私服服务器认证失败
五大道派出所开展网络安全宣传
广东电力卫星授时服务器云主机
东莞通讯软件开发报价行情
智能网络技术培训
良好的数据库设计应是怎样的
重庆移动设备管理软件开发
2008服务器激活工具