mysql主从复制故障分析


1.主从复制故障分析:

1.1监控方法

show slave status \G 

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

Last_IO_Errno: 0

 Last_IO_Error: 

Last_SQL_Errno: 0

Last_SQL_Error: 

1.2 IO线程

1.2.1正常状态:

Slave_IO_Running: Yes

1.2.2非正常状态:

Slave_IO_Running: 

NO/Connecting 

1.2.3故障原因:

连接主库:

(1)网络,防火墙,端口

(2)用户 密码 权限

               replication slave 

(3)主库连接数上限

    mysql> select @@max_connections;

                 | @@max_connections |

                 |              151 |

请求日志,接收日志 

(4)版本不统一  5.7 native  8.0 sha2 

故障模拟:

主从中的线程管理:

start slave;

stop slave;

单独开启线程:

start  slave sql_thread;#单独启动sql线程

start  slave io_thread;#单独启动io线程

start  stop sql_thread;#单独关闭sql线程

start  stop io_thread;#单独关闭io线程

解除从库身份:

reset slave all;

故障模拟:change master  密码写错误

io线程连接connectioning状态

故障处理: 手工连接

直接用repl 用户进行登陆 看是否报错。

1.密码错误 

2.连接数超过上限  too many connection 

5)请求日志,接收日志

故障原因:

(1)主库二进制日志不完整,损坏,不连续

  (2)从库请求的起点问题

(3)主从的server_id(server_uuid)相同

(4)relaylog 问题

模拟故障:

主库 reset master;清除了binlog.

生产中如果要 reset  master ;

如果业务繁忙期间做,有可能会导致数据hang。

如果要恢复主从,需要重新搭建主从。

++++++++++++正确的姿势+++++++++++++++

1.找业务不繁忙期间,停业务5分钟。

2.等待从库重放完所有的主库日志

3.主库reset  master;

4.从库重新同步主库日志

1)stop slave;

2)reset slave all;

3)change master to 

......

......

4)start slave;

第三方工具 pt 


1.3 SQL线程故障

1.3.1 主要做什么工作?

回放relay-log中的日志。可以理解为执行relay-log SQL:

1.3.2SQL线程故障本质?

为什么SQL线程执行不了SQL语句。

1.3.3原因整理。

创建的对象已经存在。

需要操作的对象不存在。

约束冲突。

SQL_MODE

参数,版本

以上问题:大几率出现在从库写入或者双主

结构中容易出现。

参数,版本

1.3.4 故障模拟

(1)从库创建oldguo数据库。

 (2)主库创建oldguo数据库。

(3)检查从库slave状态

Slave_SQL_Running:No

从库报错,停止复制。


1.3.5 处理故障

(1)思路1:一切以主库为准

     将从库进行反操作一下,重启线程。 

      从库:drop databases oldguo;

       从库: start slave ;

    (2)思路2:以从库为准,跳过此次复制错误

      方法一:

     stop slave;

     set global sql_slave_skip_counter = 1;

     start slave;

    仅限于比较简易的操作环境。

     第三方工具(后面实操):帮助我们检查主从是否一致,并修复数据一致。

    方法二:暴力方法,遇到自动跳过

     /etc/my.cnf 

    slave-skip-errors=1032,1062,1007  

   常见错误代码:

  1007:对象已存在

  1032:无法执行DML

  1062:主键冲突,或约束冲突

(3)思路3:

重新搭建主从,备份恢复+重新构建。

问题:

1.主库出了问题怎么办?

#物理

   1.看主库是否能ssh上。

   2.检查binlog是否完整。

   3.手工追加日志到最新位置。

   4.从库替代主库工作。

#逻辑 drop 

 只能通过备份去恢复

2.双主情况下,一个宕机,另一个也有问题。

只能备份+binlog恢复。

从库怎么当主库?

1.恢复最新状态

2.取消从库身份

3.清空binlog日志信息

扩展:

     1.从库只读

         select @@read_only;  #普通用户只读

         select @@super_read_only; #普通管理员只读

     2.中间件(读写分离)


你可能感兴趣的:(mysql主从复制故障分析)