复制中常见1062和1032错误处理方法

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: 复制中错误处理传统复制错误跳过:stop slave sql_thread ;set global slq_slave_skip_counter=1;start slave sql_thread ;GTID复制错误跳过:stop slave sql_thread...

复制中错误处理

传统复制错误跳过:

stop slave sql_thread ;

set global slq_slave_skip_counter=1;

start slave sql_thread ;


GTID复制错误跳过:

stop slave sql_thread ;

set gtid_next='uuid:N';

begin;commit;

set gtid_next='automatic';

start slave sql_thread ;

注意:

若是binlog+pos复制,使用:

set global sql_salve_skip_counter=1;

代替下面步骤:

root@localhost [testdb]>set gtid_next='f0e27aec-b275-11e6-9c17-000c29565380:13';

root@localhost [testdb]>begin;commit;

root@localhost [testdb]>set gtid_next='automatic';


主从复制错误分类及处理方式

(1)主库create table ,从库已经存在,以主库为准处理方法:

slave:

set sql_log_bin=0;

drop table t1;

set sql_log_bin=1;

start slave sql_thread ;

例:
slave:
root@localhost [testdb]>create table t2(c1 int,c2 varchar(20));
master:
root@localhost [testdb]>create table t2(c1 int,c2 varchar(20));
root@localhost [testdb]>show slave status\G
......
 Last_Error: Error 'Table 't2' already exists' on query. Default database: 'testdb'. Query: 'create table t2(c1 int,c2 varchar(20))'
.......
解决方法:
slave:
#drop操作不记录从库的binlog,这一步的作用是防止在以后主从切换的时候,把主库的t2表干掉
root@localhost [testdb]>set sql_log_bin=0;  
root@localhost [testdb]>drop table t2;
root@localhost [testdb]>set sql_log_bin=1;
root@localhost [testdb]>start slave sql_thread;


(2)insert主键冲突的错误error1062

解决方法:直接删除从库冲突主键

例:
slave:
root@localhost [testdb]>set sql_log_bin=0;
root@localhost [testdb]>insert into t1 values(2,'bbb');
root@localhost [testdb]>set sql_log_bin=1;
master:
root@localhost [testdb]>insert into t1 values(2,'bbbbbb');
slave :
root@localhost [testdb]>show slave status\G
Last_Errno: 1062
                   Last_Error: Could not execute Write_rows event on table testdb.t1; Duplicate entry '2' for key 'PRIMARY', Error_code: 1062; handler error HA_ERR_FOUND_DUPP_KEY; the event's master log mysql-bin.000029, end_log_pos 2796
slave :
root@localhost [testdb]>set sql_log_bin=0;
root@localhost [testdb]>delete from t1 where c1=2;
root@localhost [testdb]>set sql_log_bin=1;
root@localhost [testdb]>start slave sql_thread;


(3)update找不到记录error1032

唯一的方法:伪造符合条件的数据

例:
master:
root@localhost [testdb]>set sql_log_bin=0;
root@localhost [testdb]>insert into t1 values(1,'aaa');
root@localhost [testdb]>set sql_log_bin=1;
root@localhost [testdb]>update t1 set c2='aaaaaa' where c1=1;
slave:
root@localhost [testdb]>show slave status\G
......
 Last_Error: Could not execute Update_rows event on table testdb.t1; Can't find record in 't1', Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND; the event's master log mysql-bin.000029, end_log_pos 2529
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 2283
master:
[root@Darren1 logs]# mysqlbinlog --base64-output=decode-rows --verbose --start-position=2283 --stop-position=2529 mysql-bin.000029
......
### UPDATE `testdb`.`t1`
### WHERE
###   @1=1
###   @2='aaa'
### SET
###   @1=1
###   @2='aaaaaa'
slave:
root@localhost [testdb]>set sql_log_bin=0;
root@localhost [testdb]>insert into t1 values(1,'aaa');
root@localhost [testdb]>set sql_log_bin=1;
root@localhost [testdb]>start slave sql_thread;


(4)delete找不到错误 error1032

方法一:伪造符合条件的数据

例:
master:
root@localhost [testdb]>set sql_log_bin=0;
root@localhost [testdb]>insert into t1 values(1,'aaa');
root@localhost [testdb]>set sql_log_bin=1;
root@localhost [testdb]>delete from t1 where c1=1;
slave:
root@localhost [testdb]>show slave status\G
......
            Slave_IO_Running: Yes
            Slave_SQL_Running: No
          Exec_Master_Log_Pos: 905   --从库已经成功执行主库到的postion点
Last_SQL_Error: Could not execute Delete_rows event on table testdb.t1; Can't find record in 't1', Error_code: 1032; handler error HA_ERR_END_OF_FILE; the event's master log mysql-bin.000029, end_log_pos 1138 --从库执行结束点
maser:
[root@Darren1 logs]# mysqlbinlog --base64-output=decode-rows --verbose --start-position=905 --stop-position=1138 mysql-bin.000029
......
### DELETE FROM `testdb`.`t1`
### WHERE
###   @1=1
###   @2='aaa'
slave:
root@localhost [testdb]>set sql_log_bin=0;
root@localhost [testdb]>insert into t1  values(1,'aaa');
root@localhost [testdb]>set sql_log_bin=1;
root@localhost [testdb]>start slave sql_thread;
方法二:从库跳过没有成功删除掉的行记录对应的GTID
master:
root@localhost [testdb]>set sql_log_bin=0;
root@localhost [testdb]>insert into t1 values(1,'aaa');
root@localhost [testdb]>insert into t1 values(2,'bbb');
root@localhost [testdb]>set sql_log_bin=1;
root@localhost [testdb]>delete from t1 where c1 =1;
root@localhost [testdb]>delete from t1 where c1 =2;
root@localhost [testdb]>insert into t1 values(3,'ccc');
slave:
root@localhost [testdb]>show slave status\G
......
Last_SQL_Error: Could not execute Delete_rows event on table testdb.t1; Can't find record in 't1', Error_code: 1032; handler error HA_ERR_END_OF_FILE; the event's master log mysql-bin.000029, end_log_pos 1402
           Retrieved_Gtid_Set: f0e27aec-b275-11e6-9c17-000c29565380:1-14   --从库结束的GTID点
            Executed_Gtid_Set: ab6320bc-d158-11e6-88f8-000c29c1b8a9:1,
            f0e27aec-b275-11e6-9c17-000c29565380:10-11  --从库成功执行过的GTID
slave:
root@localhost [testdb]>stop slave;
root@localhost [testdb]>set gtid_next='f0e27aec-b275-11e6-9c17-000c29565380:12';
root@localhost [testdb]>begin;commit;
root@localhost [testdb]>set gtid_next='f0e27aec-b275-11e6-9c17-000c29565380:13';
root@localhost [testdb]>begin;commit;
root@localhost [testdb]>set gtid_next='automatic';
root@localhost [testdb]>start slave;
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
SQL 关系型数据库 MySQL
解决MySQL主从慢同步问题的常见的解决方案:
解决MySQL主从慢同步问题的方法有很多,以下是一些常见的解决方案: 1. 检查网络连接:确保主从服务器之间的网络连接稳定,避免网络延迟或丢包导致数据同步缓慢。 2. 优化数据库配置:调整MySQL的配置参数,如增大binlog文件大小、调整innodb_flush_log_at_trx_commit等参数,以提高主从同步性能。 3. 检查IO线程和SQL线程状态:通过SHOW SLAVE STATUS命令检查IO线程和SQL线程的状态,确保它们正常运行并没有出现错误。 4. 检查主从日志位置:确认主从服务器的binlog文件和位置是否正确,避免由于错误的日志位置导致同步延迟。 5.
1674 1
|
JSON easyexcel Java
EasyExcel的简单使用
EasyExcel的简单使用,以及如何通过postman进行导入导出功能的调试
1552 1
DHCP "No subnet declaration for xxx (no IPv4 addresses)" 报错
DHCP "No subnet declaration for xxx (no IPv4 addresses)" 报错
|
10月前
|
SQL 存储 Java
Apache Doris 2.1.7 版本正式发布
亲爱的社区小伙伴们,**Apache Doris 2.1.7 版本已于 2024 年 11 月 10 日正式发布。**2.1.7 版本持续升级改进,同时在湖仓一体、异步物化视图、半结构化数据管理、查询优化器、执行引擎、存储管理、以及权限管理等方面完成了若干修复。欢迎大家下载使用。
234 3
|
JavaScript API 调度
Pinia进阶:优雅的setup(函数式)写法+封装
相信在座各位假如使用Vue生态开发项目情况下,对Pinia状态管理库应该有所听闻或正在使用,假如还没接触到Pinia,这篇文章可以帮你快速入门,并如何在企业项目中更优雅封装使用。
321 57
|
11月前
|
人工智能 算法 安全
人工智能伦理与监管:构建负责任的AI未来
【10月更文挑战第3天】随着人工智能(AI)技术的快速发展,其在社会各领域的应用日益广泛。然而,AI的广泛应用也带来了一系列伦理和监管挑战。本文旨在探讨AI的伦理问题,分析现有的监管框架,并提出构建负责任AI未来的建议。同时,本文将提供代码示例,展示如何在实践中应用这些原则。
1675 1
|
11月前
|
存储 安全 大数据
CDGA|数据流通新策略:高效利用,解锁数字经济新动能
在数字化时代,数据成为推动经济社会发展的关键要素。然而,数据孤岛、安全隐私及标准化不足等问题制约了其高效利用。本文探讨数据流通的新策略,包括强化数据治理、技术创新、安全保护及标准化建设,旨在构建高效利用体系,赋能数字经济高质量发展,激发数据要素潜能,推动产业升级与经济转型。
|
SQL 关系型数据库 MySQL
关系型数据库mysql跨平台兼容性
【6月更文挑战第13天】
699 4
|
调度 Python
Python任务调度神器:APScheduler使用详解
Python任务调度神器:APScheduler使用详解
2438 3
|
NoSQL Java MongoDB
Java一分钟之-Spring Data MongoDB:MongoDB集成
【6月更文挑战第11天】Spring Data MongoDB简化Java应用与MongoDB集成,提供模板和Repository模型。本文介绍其基本用法、常见问题及解决策略。包括时间字段的UTC转换、异常处理和索引创建。通过添加相关依赖、配置MongoDB连接、定义Repository接口及使用示例,帮助开发者高效集成MongoDB到Spring Boot应用。注意避免时间差、异常处理不充分和忽视索引的问题。
334 0