Mysql

如何知道 MySQL 複製是否正常工作?

  • January 21, 2021

我正在從 MySQL v 5.5.50 主伺服器複製到 RDS 中託管的 MySQL v 5.5.46 從伺服器。我已經按照 AWS 文件詳細說明瞭如何執行此操作,將轉儲文件導入從伺服器並在CALL mysql.rds_set_external_master...幾天前執行命令開始操作。

我的SHOW MASTER STATUS;結果是:

+---------------------+----------+--------------+------------------+
| File                | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+---------------------+----------+--------------+------------------+
| mysql-binlog.000023 | 48684053 |              |                  |
+---------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

我的SHOW SLAVE STATUS \G;結果是:

*************************** 1. row ***************************
              Slave_IO_State: Waiting for master to send event
                 Master_Host: [master host IP here]
                 Master_User: [local replication user here]
                 Master_Port: 3306
               Connect_Retry: 60
             Master_Log_File: mysql-binlog.000023
         Read_Master_Log_Pos: 53052514
              Relay_Log_File: relaylog.000007
               Relay_Log_Pos: 81145300
       Relay_Master_Log_File: mysql-binlog.000017
            Slave_IO_Running: Yes
           Slave_SQL_Running: Yes
             Replicate_Do_DB:
         Replicate_Ignore_DB:
          Replicate_Do_Table:
      Replicate_Ignore_Table: mysql.rds_sysinfo,mysql.rds_history,mysql.rds_replication_status
     Replicate_Wild_Do_Table:
 Replicate_Wild_Ignore_Table:
                  Last_Errno: 0
                  Last_Error:
                Skip_Counter: 0
         Exec_Master_Log_Pos: 1016905328
             Relay_Log_Space: 5695987840
             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: 394467
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: 21033229
1 row in set (0.12 sec)

最後,唯一可見的兩條相關行(不是我的客戶的 SLEEP)SHOW FULL PROCESSLIST;是:

*************************** 2. row ***************************
    Id: 207
  User: system user
  Host:
    db: NULL
Command: Connect
  Time: 361292
 State: Waiting for master to send event
  Info: NULL
*************************** 3. row ***************************
    Id: 208
  User: system user
  Host:
    db: NULL
Command: Connect
  Time: 394904
 State: Reading event from the relay log
  Info: NULL

我試圖確認事情是否真的在複製,因為Seconds_Behind_Master價值越來越大。但是,Master_Log_File價值已經上升到與主人的價值相匹配。

Exec_Master_Log_Pos並且Relay_Log_Pos很久沒有改變了。然而,Read_Master_Log_Pos一直在增長。

我在 RDS 提供給我的日誌文件中沒有發現任何錯誤,程序啟動時也沒有任何警告或錯誤。

有沒有辦法可以判斷是否存在某種錯誤,以及如何從中恢復?

(* 不能 100% 確定那是多長時間,但以小時而非秒為單位)

更新

我執行了從站停止,然後從啟動命令,在日誌中,我得到以下資訊:

160817 10:39:04 [Note] Slave SQL thread exiting, replication stopped in log 'mysql-binlog.000018' at position 72335184
160817 10:39:04 [ERROR] Error reading packet from server: Lost connection to MySQL server during query ( server_errno=2013)
160817 10:39:04 [Note] Slave I/O thread killed while reading event
160817 10:39:04 [Note] Slave I/O thread exiting, read up to log 'mysql-binlog.000025', position 74416238
160817 10:39:22 [Note] Slave SQL thread initialized, starting replication in log 'mysql-binlog.000018' at position 72335184, relay log '/rdsdbdata/log/relaylog/relaylog.000010' position: 72335333
160817 10:39:22 [Note] Slave I/O thread: connected to master '[replication user]@[server ip]:3306',replication started in log 'mysql-binlog.000025' at position 74416238

所以沒有什麼不愉快的,我可以看到。Seconds_Behind_Master仍在上升,但我的程序列表等中仍然沒有顯示任何單獨的命令。

這兩個...Running值說YES;這通常足以說一切都很好。不過Seconds_Behind_Master: 394467很嚇人。那11個小時!

執行測試:在Master上做CREATE DATABASE dummy;,然後看看它是否在Slave上。(你可能需要root兩次。)

有些情況會在Seconds_Behind_Master0 和某個大值之間反彈。那是僥倖。觀察一段時間,看看情況是否如此。

不幸的是,我對此一無所知。最後我取消了,使用了AWS提供的DMS(Database Migration Service)。到目前為止,這似乎工作得更好,幾乎完成了。我已經用這個遷移了數千個表,但我必須通過 CLI 創建任務並提供一個帶有萬用字元的表映射文件——控制台 GUI 不支持我的數千個數據庫。

引用自:https://dba.stackexchange.com/questions/146965