mysql - SQL 从属线程未应用更改

mysql - SQL 从属线程未应用更改

我有 5 个从服务器和 1 个主服务器的主/从复制。主服务器是 mysql 5.1.37,从服务器是 5.5.8。

两天前,其中一个从服务器停止工作。在“显示从服务器状态”中,我看到 IO 线程和 SQL 线程都在运行。IO 线程正在生成中继日志文件,但 SQL 线程未应用更改...“落后主服务器的秒数”显示为“0”,尽管我知道它落后很多(使用 mysqlbinlog 检查 binlog)。

其余所有从属设备均工作正常。

不知道要寻找什么(mysql 日志文件中没有错误,系统日志中也没有错误...)

有什么建议吗?请参见下面的从属状态输出

mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: master-db
                  Master_User: replication
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.020839
          Read_Master_Log_Pos: 56173153
               Relay_Log_File: research-relay-bin.000002
                Relay_Log_Pos: 252
        Relay_Master_Log_File: mysql-bin.020828
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: db1,db2,db3,db4
          Replicate_Ignore_DB: db5,db6
           Replicate_Do_Table:
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 975734937
              Relay_Log_Space: 10714389571
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File:
           Master_SSL_CA_Path:
              Master_SSL_Cert:
            Master_SSL_Cipher:
               Master_SSL_Key:
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 0
               Last_SQL_Error:
  Replicate_Ignore_Server_Ids:
             Master_Server_Id: 300

答案1

MySQL 复制中有一些需要注意的地方

1)同时使用 replicate-do-db 和 replicate-ignore-db

页面上有流程图显示处理顺序。就我个人而言,我不会同时使用 replicate-do-db 和 replicate-ignore-db。我只会使用其中一个。如果其他从属服务器没有同样的问题,则排除此可能性。

2)执行 LOAD DATA INFILE

MySQL 复制处理它的方式令人震惊。每当在主服务器上执行 LOAD DATA INFILE 时,整个输入文件都会存放在主服务器的二进制日志中。从服务器在其中继日志中收集输入文件。从服务器在 /tmp 文件夹中重新实现数据文件,然后在从服务器上执行 LOAD DATA INFILE。在此过程中,这不算作复制滞后。作为 MySQL DBA,我知道这可行,但这太俗气了!!!

3)从站 IO 线程通信中断

有时,由于防火墙更改、网络路由或其他网络异常,从属 IO 线程可能会停止获取条目来填充其中继日志。您可能还想检查从属 IO 线程是否在主服务器的进程列表中可见。要确保您的从属 IO 线程处于活动状态,只需在所有从属服务器上执行以下操作:

SHOW SLAVE STATUS\G

注意 Relay_Log_Space。它应该在增长。如果它停止增长,MySQL 可能会因为另一个疯狂的原因而冻结而不出现错误,这导致了建议 #4。

4)从服务器磁盘空间不足

我写了一篇关于 MySQL 在执行 MyISAM 操作时如何冻结的文章MySQL 使用 MyISAM 表作为临时表。检查您的默认临时表目录(MySQL 中的 tmpdir 变量)

我希望这些建议有帮助!

相关内容