美文网首页
mysql主从复制故障分析

mysql主从复制故障分析

作者: later02 | 来源:发表于2020-04-05 21:05 被阅读0次


    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主从复制故障分析

          本文链接:https://www.haomeiwen.com/subject/tzhlphtx.html