MySQL主从故障分析及处理

奋斗吧
奋斗吧
擅长邻域:未填写

标签: MySQL主从故障分析及处理 MySQL博客 51CTO博客

2023-07-21 18:24:29 103浏览

MySQL主从故障分析及处理,实施步骤一、如何监控[root@db01data]#mysql-S/tmp/mysql3308.sock-e"showslavestatus\G"showslavestatus命令常见返回参数状态:Slave_IO_Running:Yes#IO线程工作状态:YES、NO、ConnectingSlave_SQL_Running:Yes#SQL线程工作状态:

实施步骤

一、如何监控

[root@db01 data]# mysql -S /tmp/mysql3308.sock -e "show slave status \G"

show slave status 命令常见返回参数状态:

Slave_IO_Running: Yes  # IO线程工作状态: YES、NO、Connecting

Slave_SQL_Running: Yes # SQL线程工作状态:YES、NO

Last_IO_Errno: 0 # IO故障代码:2003,1045,1040,1593,1236...

Last_IO_Error: # IO线程报错详细信息

Last_SQL_Errno: 0 # SQL故障代码:1008,1007,1032,1062..

Last_SQL_Error: # IO线程报错详细信息

二、IO 线程故障

1、连接主库失败分析

1)user、password、IP、Port等连接信息有误

用户密码错误

MySQL主从故障分析及处理_故障分析


2)主库无法连接:网络、宕机、防护墙、最大连接数上限

主库宕机

MySQL主从故障分析及处理_故障分析_02

3)连接数上限

MySQL主从故障分析及处理_主从复制_03


解决方法:修改登录信息、修改主库连接设置参数。

set global max_connections=1000;

2、主从server_id、server_uuid相同

MySQL主从故障分析及处理_主从故障_04

解决方法:修改从库server_id

set global server_id=1051;

3、请求主库日志失败,主库日志损坏、丢失

解决方法:主从重构

mysql> stop slave;
# 将从库复制信息清空
mysql> reset slave all;
mysql> CHANGE MASTER TO MASTER_HOST='10.0.0.52', MASTER_USER='repl', MASTER_PASSWORD='密码', MASTER_PORT=3306, master_auto_position = 1; 
mysql> start slave; show slave status\G;

三、SQL 线程故障

SQL线程主要工作是回放relaylog中的日志事件,SQL线程故障原因分析:

1、realy-log 损坏

解决方法(一)
备份主库数据(mysqldump、xbk、clone plugin),恢复至从库,重构主从关系

解决方法(二)

找到SQL回放的realy log位置点,找到主库相应位置点,基于位置点重构主从关系

MySQL主从故障分析及处理_故障分析_05

mysql> stop slave;

mysql> CHANGE MASTER TO MASTER_HOST='10.0.0.51',MASTER_USER='repl',MASTER_PASSWORD='123',MASTER_PORT=3307,MASTER_LOG_FILE='mysql-bin.000011',MASTER_LOG_POS=193,MASTER_CONNECT_RETRY=10;

mysql> start slave;

2、执行SQL出问题

1)主从节点配置不一样: 平台、版本、参数、SQL_MODE
解决方法:调整成一致

2)修改的对象不存在(库、表、用户)
从库被写入了,导致数据不一致

3)创建的对象已存在(库、表、用户、约束冲突)
从库被写入了,导致数据不一致

针对从库被写入,主从数据不一致的解决方法如下:
解决方法(一):部分场景可以使用,只要保证数据以主库为准即可使用

mysql> stop slave;

#将同步指针向下移动一个,如果多次不同步,可以重复操作
mysql> set global sql_slave_skip_counter = 1;

mysql> start slave;

解决方法(二):配置文件中配置跳过此类型报错,不推荐使用

[root@orch3 ~]#vim /etc/my.cnf
slave-skip-errors = 1032,1062,1007

常见错误代码:
1007:对象已存在
1032:无法执行DML
1062:主键冲突,或约束冲突

解决方法(三): GTID 处理错误方式:

查看监控信息:show slave status\G;报错如下:

MySQL主从故障分析及处理_故障分析_06


MySQL主从故障分析及处理_主从复制_07


MySQL主从故障分析及处理_主从故障_08


从库操作:注入一个空事务

mysql> stop slave;

mysql> set gtid_next='befef0d5-3560-11ec-88ce-000c29f624c7:5';

mysql> begin;commit;

mysql> set gtid_next='AUTOMATIC';

mysql> start slave;

总结: SQL线程故障规避方法
1、从库设置只读(read_only、super_read_only),可配合使用读写分离中间件(mycat、ProxySQL)。
2、不使用双主结构;PXC、MGR替代。
3、可使用pt相关工具校验主从数据,并同步。

好博客就要一起分享哦!分享海报

此处可发布评论

评论(0展开评论

暂无评论,快来写一下吧

展开评论

您可能感兴趣的博客

客服QQ 1913284695