GTID模式下的replication,跳过错误日志的解决方法

简介:

日志错误:

大多数replication错误都是因为日志错误引起的。

主日志和中继日志都可能出错。

评判日志错误的辨别方法:

1
mysqlbinlog  master_binlog_file > /dev/ null

屏幕有输出则表示这个binlog有错误,如果没有则表示binlog正常、

1
mysqlbinlog  slave_binlog_file  >/dev/ null



跳过日志错误1:

可以使用手动跳过日志错误,可能会造成数据不一致

如果主日志出错,可以再slave上执行(如果有多个错误可能需要多次操作)

1
2
3
mysql>stop slave;
mysql> set  global  sql_slave_skip_counter=1;
mysql>start slave;


这个方法不适用于DTID模式的replication,GTIDs模式不允许sql_slave_skip_counter


跳过错误日志2:  不支持GTID

如果是中举日志出错,可以再slave上查看replication状态,根据日志信息跳过出错的日志:

1
2
3
4
5
mysql>stop slave;
mysql>change master  to 
master_log_file= 'relay_master_log_file' ;
master_log_pos=<exec_master_log_pos>;
mysql>start slave;

跳过错误日志3 : GDIT的好处是,计算机自行处理,无需像以前的那样繁琐。

如果master上的binlog除了问题,导致slave无法继续,

如果replication工作在GTID模式下,则需要以下操作:

1
2
3
4
5
6
7
8
mysql>stop slave;
mysql> set  GTID_NEXT= 'uuid.next_id' ;  
mysql> begin ;
mysql> commit ;
mysql> set  GTID_NEXT= 'AUTOCOMMIT' ;
mysql>start slave;
uuid:nextid 例如:8a1f84c4-9d67-11e4-8a9a-3085a9eb338b:12
into


模拟故障:基于DTID模式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
in  master:
mysql>use viewdb
  
mysql>  select  from  t1;
+ ------+
| id   |
+ ------+
|  112 |
|  113 |
|  114 |
|  115 |
|  116 |
|  117 |
|  118 |
|  119 |
|  120 |
| 1000 |
|  110 |
|  109 |
mysql>show vaiiables  like  "%bin%"  找到 sql_bin_log
1
sql_log_bin  |  ON        全局参数,当前所发生的操作会记录到二进制日中、
1
mysql>  set  sql_log_bin= OFF ;

表示不记录当前的操作到二进制日志中。接下来的操作会不会同步到slave,这样就会错误

1
2
3
4
5
6
7
8
9
10
mysql>  insert  into  t1  values  (200);
Query OK, 1 row affected (0.00 sec)
mysql>  select  from  t1;
+ ------+
| id   |
+ ------+
| |
|  200 |
+ ------+
13  rows  in  set  (0.00 sec

    

1
2
mysql>  set  sql_log_bin= ON ; 再次打开,
Query OK, 0  rows  affected (0.00 sec)
1
2
3
mysql>  insert  into  t1  values  (201); 这是201会被同步到salve,200确不会同步到slave
Query OK, 1 row affected (0.03 sec)
in    master
1
2
3
4
5
6
7
8
mysql>  select  from  t1;
+ ------+
| id   |
+ ------+
|  |
    200 
|  201 |
in  SLAVE
1
2
3
4
5
6
mysql>  select  from  t1;
+ ------+
| id   |
+ ------+
|  |
|  201 |

 切回到master

1
mysql>delect  from  t1  where  id=200;

此步骤完了后,此操作记录到binlog,而且会同步到slave,此时slave报错,并指出master的那个binlog  end_log_pos出错。

 

IN slave;

1
2
mysql>show salve status\G;
Last_SQL_Error: Could  not  execute  Delete_rows event  on  table  viewdb.t1; Can 't find record in ' t1', Error_code: 1032;


handler error HA_ERR_END_OF_FILE; the event's master log localhost-bin.000006, end_log_pos 1360

并且:

 Retrieved_Gtid_Set: 61816754-9d68-11e4-8a9f-000c29c1d1ea:1-18

 Executed_Gtid_Set: 61816754-9d68-11e4-8a9f-000c29c1d1ea:1-17

不一致


切回到master

1
mysql> insert  into  t1 valuses(202);

in slave

这时由于slave故障,所以slave不再会有任何新的数据同步过来。

Retrieved_Gtid_Set: 61816754-9d68-11e4-8a9f-000c29c1d1ea:1-19

Executed_Gtid_Set: 61816754-9d68-11e4-8a9f-000c29c1d1ea:1-17

这是我们跳过这个error,

1
2
3
4
5
6
7
8
9
mysql> stop slave;
Query OK, 0  rows  affected (0.01 sec)
mysql>  set  gtid_next= '61816754-9d68-11e4-8a9f-000c29c1d1ea:18' ;
mysql>  begin ;
mysql>  commit ;
mysql>  set  gtid_next= 'automatic' ;
mysql> start slave;
mysql>show slave status\G;
mysql> select  from  t1;  发现数据已经保持一致。

  

gtid的好处是,如果有两台slave,只修复一台slave。另一台会自动更新到正常状态。




      本文转自crazy_charles 51CTO博客,原文链接:http://blog.51cto.com/douya/1606480,如需转载请自行联系原作者



相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
存储 运维 开发工具
警惕日志采集失败的 6 大经典雷区:从本地管理反模式到 LoongCollector 标准实践
本文探讨了日志管理中的常见反模式及其潜在问题,强调科学的日志管理策略对系统可观测性的重要性。文中分析了6种反模式:copy truncate轮转导致的日志丢失或重复、NAS/OSS存储引发的采集不一致、多进程写入造成的日志混乱、创建文件空洞释放空间的风险、频繁覆盖写带来的数据完整性问题,以及使用vim编辑日志文件导致的重复采集。针对这些问题,文章提供了最佳实践建议,如使用create模式轮转日志、本地磁盘存储、单线程追加写入等方法,以降低日志采集风险,提升系统可靠性。最后总结指出,遵循这些实践可显著提高故障排查效率和系统性能。
2551 23
|
存储 运维 开发工具
警惕日志采集失败的 6 大经典雷区:从本地管理反模式到 LoongCollector 标准实践
本文总结了日志管理中的六大反模式及优化建议,涵盖日志轮转、存储选择、并发写入等常见问题,帮助提升日志采集的完整性与系统可观测性,适用于运维及开发人员优化日志管理策略。
446 5
|
SQL 存储 JSON
更快更强,SLS 推出高性能 SPL 日志查询模式
从海量的日志数据中,按照各种灵活的条件进行即时查询搜索,是可观测场景下的基本需求。本文介绍了 SLS 新推出的高性能 SPL 日志查询模式,支持 Unix 风格级联管道式语法,以及各种丰富的 SQL 处理函数。同时通过计算下推、向量化计算等优化,使得 SPL 查询可以在数秒内处理亿级数据,并支持 SPL 过滤结果分布图、随机翻页等特性。
13904 240
|
数据库
【YashanDB数据库】YAS-02079 archive log mode must be enabled when database is in replication mode
YAS-02079 archive log mode must be enabled when database is in replication mode
编辑QZone日志却显示空白的解决方法
编辑QZone日志却显示空白的解决方法
|
SQL 关系型数据库 MySQL
|
关系型数据库 数据库
|
Oracle 关系型数据库 MySQL
实时计算 Flink版产品使用问题之在online模式下增量抓取Oracle数据时,在archive_log切换时,出现数据丢失的情况,是什么原因
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
算法 测试技术 C++
【数据结构】模式匹配之KMP算法与Bug日志—C/C++实现
【数据结构】模式匹配之KMP算法与Bug日志—C/C++实现
336 0
|
存储 SQL 运维
阿里云日志服务SLS全面升级:秒级处理数千亿行日志、新计费模式可省32%
数据更安全、计费更灵活  阿里云日志服务SLS内核全面升级
1450 0
阿里云日志服务SLS全面升级:秒级处理数千亿行日志、新计费模式可省32%