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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:

日志错误:

大多数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日志并进行多维度分析。
相关文章
|
1天前
|
算法 测试技术 C++
【数据结构】模式匹配之KMP算法与Bug日志—C/C++实现
【数据结构】模式匹配之KMP算法与Bug日志—C/C++实现
42 0
|
1天前
|
SQL 消息中间件 缓存
Flink SQL中使用DEBUG模式来输出详细的日志信息,
Flink SQL中使用DEBUG模式来输出详细的日志信息,
144 0
|
8月前
|
弹性计算 监控 应用服务中间件
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
248 0
|
8月前
|
存储 监控
日志服务SLS全新发布按写入数据量计费模式节省计划
按写入数据量计费模式节省计划是一种“比按量计费更划算,比包年包月更灵活”的全新计费模式。支持0预付、全预付,您可以通过承诺在一定期限内消费一定的金额,获取比按量计费低至 50% 的价格。
219 0
|
8月前
|
存储 SQL 运维
阿里云日志服务SLS全面升级:秒级处理数千亿行日志、新计费模式可省32%
数据更安全、计费更灵活  阿里云日志服务SLS内核全面升级
816 0
阿里云日志服务SLS全面升级:秒级处理数千亿行日志、新计费模式可省32%
|
10月前
|
存储 监控 数据可视化
日志服务 SLS 全新发布按写入数据量计费模式
日志服务 SLS 全新推出的按写入数据量计费模式让 SLS 更普惠、更易用!仅收取原始数据(非压缩)写入费用、存储费用以及外网数据流量费用,帮助用户购买更简单、费用可预期、轻松拓展更丰富场景。
1886 0
|
监控 架构师 小程序
网站流量日志分析—数仓设计--维度建模三种模式|学习笔记
快速学习网站流量日志分析—数仓设计--维度建模三种模式
277 0
网站流量日志分析—数仓设计--维度建模三种模式|学习笔记
|
分布式计算 资源调度 Hadoop
Hadoop运行模式(四)、配置历史服务器、配置日志的聚集、删除HDFS上已经存在的文件、集群启动/停止方式总结、配置mapred-site.xml、配置yarn-site.xml
Hadoop运行模式(四)、配置历史服务器、配置日志的聚集、删除HDFS上已经存在的文件、集群启动/停止方式总结、配置mapred-site.xml、配置yarn-site.xml
Hadoop运行模式(四)、配置历史服务器、配置日志的聚集、删除HDFS上已经存在的文件、集群启动/停止方式总结、配置mapred-site.xml、配置yarn-site.xml
|
SQL 安全 Java
SQLite切换日志模式优化
SQLite是一款轻型的数据库,SQLite 是一款轻量级数据库,是一个 关系型数据库管理系统,它包含在一个相对小的 C 库中,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。它能够支持 Windows/Linux/Unix/Android/iOS 等等主流的操作系统,占用资源非常的低,因此在移动端也SQLIte有多种日志模式(具体见背景知识),在项目的开发迭代中,会遇见原本就版本app使用的SQLite日志模式是旧版默认的rpllback journal,当用户设备存在待恢复的.journal文件,新版本app的SQLite又需要将日志模式切换至wal时有很广泛的应用。
545 0
|
消息中间件 数据采集 Kubernetes
iLogtail社区版使用入门 - 使用DaemonSet模式采集K8s容器日志
本文介绍K8s的日志架构,并通过利用K8s提供的基础能力完成数据驱动应用架构的第一步,使用iLogtail将日志统一采集写入Kafka。 iLogtail已经完整开源,期望同众多开发者一起将iLogtail打造成世界一流的可观测数据采集器。
982 0

热门文章

最新文章