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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介:

日志错误:

大多数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,如需转载请自行联系原作者



相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
3月前
|
SQL 存储 JSON
更快更强,SLS 推出高性能 SPL 日志查询模式
从海量的日志数据中,按照各种灵活的条件进行即时查询搜索,是可观测场景下的基本需求。本文介绍了 SLS 新推出的高性能 SPL 日志查询模式,支持 Unix 风格级联管道式语法,以及各种丰富的 SQL 处理函数。同时通过计算下推、向量化计算等优化,使得 SPL 查询可以在数秒内处理亿级数据,并支持 SPL 过滤结果分布图、随机翻页等特性。
11948 106
编辑QZone日志却显示空白的解决方法
编辑QZone日志却显示空白的解决方法
|
4月前
|
Oracle 关系型数据库 MySQL
实时计算 Flink版产品使用问题之在online模式下增量抓取Oracle数据时,在archive_log切换时,出现数据丢失的情况,是什么原因
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
5月前
|
关系型数据库 数据库
|
5月前
|
SQL 关系型数据库 MySQL
|
6月前
|
算法 测试技术 C++
【数据结构】模式匹配之KMP算法与Bug日志—C/C++实现
【数据结构】模式匹配之KMP算法与Bug日志—C/C++实现
70 0
|
6月前
|
SQL 消息中间件 缓存
Flink SQL中使用DEBUG模式来输出详细的日志信息,
Flink SQL中使用DEBUG模式来输出详细的日志信息,
301 0
|
存储 SQL 运维
阿里云日志服务SLS全面升级:秒级处理数千亿行日志、新计费模式可省32%
数据更安全、计费更灵活  阿里云日志服务SLS内核全面升级
926 0
阿里云日志服务SLS全面升级:秒级处理数千亿行日志、新计费模式可省32%
|
弹性计算 监控 应用服务中间件
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
|
存储 监控
日志服务SLS全新发布按写入数据量计费模式节省计划
按写入数据量计费模式节省计划是一种“比按量计费更划算,比包年包月更灵活”的全新计费模式。支持0预付、全预付,您可以通过承诺在一定期限内消费一定的金额,获取比按量计费低至 50% 的价格。
301 0