mysql slave复制失败

标签 mysql debian replication recovery

我有一种情况,dns 服务器获取其主服务器的记录,并且所有记录都从主服务器复制到从服务器,而从服务器用于解析。 mysql 服务器升级后复制中断。 mysql 服务器停止,日志文件的名称和日志位置发生变化,直到 mysql 恢复。现在我知道如果我更改日志位置和日志文件名,复制将开始,但我会错过很多更新,这是我不想要的。我应该怎么做才能在不丢失主服务器上的任何更新的情况下重新启动主从复制。每一次更新都很重要。以下是从属状态的一些信息。

 Slave_IO_Running: No
 Slave_SQL_Running: Yes

Last_IO_Errno: 1236
Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file name in binary log index file'

谢谢

最佳答案

你可能会有一个惊喜,但这里是:

运行 SHOW SLAVE STATUS\G。举个例子,假设你得到了这个:

             Slave_IO_State: Waiting for master to send event
                Master_Host: 10.64.68.253
                Master_User: replusername
                Master_Port: 3306
              Connect_Retry: 60
            Master_Log_File: mysql-bin.003202
        Read_Master_Log_Pos: 577991837
             Relay_Log_File: relay-bin.010449
              Relay_Log_Pos: 306229695
      Relay_Master_Log_File: mysql-bin.003202
           Slave_IO_Running: Yes
          Slave_SQL_Running: Yes
            Replicate_Do_DB:
        Replicate_Ignore_DB:
         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: 577991837
            Relay_Log_Space: 306229695
            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

您从显示中选择以下内容:

  • Relay_Master_Log_File (mysql-bin.003202)
  • Exec_Master_Log_Pos (577991837)

原因如下:Relay_Master_Log_FileExec_Master_Log_Pos 表示从 Master 发送到 Slave 并成功执行的 binlog 条目。只需从那里取货。

您只需运行此代码:Exec_Master_Log_Pos

STOP SLAVE;
CHANGE MASTER TO
MASTER_LOG_FILE='mysql-bin.003202',
MASTER_LOG_POS=577991837;
START SLAVE;

试一试!!!

警告

如果 Relay_Master_Log_File 不再存在于 Master 上,您可能需要进行一些损害控制。鉴于前面提到的 SHOW SLAVE STATUS\G,您可能必须跳到 Master 上的下一个二进制日志,如下所示:

STOP SLAVE;
CHANGE MASTER TO
MASTER_LOG_FILE='mysql-bin.003203',
MASTER_LOG_POS=4;
START SLAVE;

如果复制 catch 来,你并没有走出困境。您可能需要下载 Percona Toolkit 并运行 pt-table-checksumpt-table-sync修复 Slave 上丢失的数据。

如果复制没有开始,您将必须执行尽职调查并重新加载从站。

希望如果复制与原始建议一致,您可能不必在此警告中执行任何操作。

关于mysql slave复制失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16389389/

相关文章:

apache2 - 使用 WSGI 和 Apache 设置 Roundup

perl - 如何在没有 expat-devel 的情况下安装 XML::Parser?

sql-server - SQL Server 的对等复制和合并复制有什么区别?

PHP/MYSQL 通过 ID 只获取一列值

mysql - 连接操作后选择特定列

performance - Linux - HTPASSWD 文件太大? (超过2000个用户)

replication - 卡夫卡 : replicas and ISR don't match

mysql - 如何使联合表在 MariaDB 重新启动之间保持不变?

php - 数据库未更新值,空白页

mysql - 如何将laravel模型保存到2个数据库