Mysql

mysql複製失敗

  • August 12, 2020

在我們意識到我們的備份(轉儲)花費的時間太長,以及 VPS 提供商關閉我們的數據庫 vps 2 小時的事件後,我們決定嘗試複製(不刪除備份,只需在複製伺服器中進行備份) .

我遵循了關於 mysql 8 的複制指南,但沒有意識到這樣的指南是為沒有已經執行的數據庫的全新安裝而製作的。然後我嘗試導入我們早上的備份,希望神奇地日誌知道從哪裡開始複製,但我錯了。

任何人都可以告訴我我應該怎麼做?我們有大約 30 個數據庫,總大小必須為 50GB。我真的不想阻止兩台伺服器進行轉儲,然後將它們導入另一台伺服器……

這是我的奴隸狀態:

*************************** 1. row ***************************
              Slave_IO_State: Waiting for master to send event
                 Master_Host: SERVER_IP
                 Master_User: replicador
                 Master_Port: 3306
               Connect_Retry: 60
             Master_Log_File: mysql-bin.000002
         Read_Master_Log_Pos: 24876902
              Relay_Log_File: pergamum-relay-bin.000004
               Relay_Log_Pos: 714
       Relay_Master_Log_File: mysql-bin.000001
            Slave_IO_Running: Yes
           Slave_SQL_Running: No
             Replicate_Do_DB: 
         Replicate_Ignore_DB: 
          Replicate_Do_Table: 
      Replicate_Ignore_Table: 
     Replicate_Wild_Do_Table: 
 Replicate_Wild_Ignore_Table: 
                  Last_Errno: 1032
                  Last_Error: Could not execute Update_rows event on table gc57125800.ate_rondas_virtuais_pontos_registro; Can't find record in 'ate_rondas_virtuais_pontos_registro', Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND; the event's master log mysql-bin.000001, end_log_pos 905
                Skip_Counter: 0
         Exec_Master_Log_Pos: 546
             Relay_Log_Space: 293925133
             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: NULL
Master_SSL_Verify_Server_Cert: No
               Last_IO_Errno: 0
               Last_IO_Error: 
              Last_SQL_Errno: 1032
              Last_SQL_Error: Could not execute Update_rows event on table gc57125800.ate_rondas_virtuais_pontos_registro; Can't find record in 'ate_rondas_virtuais_pontos_registro', Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND; the event's master log mysql-bin.000001, end_log_pos 905
 Replicate_Ignore_Server_Ids: 
            Master_Server_Id: 1
                 Master_UUID: bef45e1b-99d6-11ea-a355-3e2547e4f083
            Master_Info_File: mysql.slave_master_info
                   SQL_Delay: 0
         SQL_Remaining_Delay: NULL
     Slave_SQL_Running_State: 
          Master_Retry_Count: 86400
                 Master_Bind: 
     Last_IO_Error_Timestamp: 
    Last_SQL_Error_Timestamp: 200810 19:53:10
              Master_SSL_Crl: 
          Master_SSL_Crlpath: 
          Retrieved_Gtid_Set: 
           Executed_Gtid_Set: 
               Auto_Position: 0
        Replicate_Rewrite_DB: 
                Channel_Name: 
          Master_TLS_Version: 
      Master_public_key_path: 
       Get_master_public_key: 0
           Network_Namespace: 
1 row in set (0.00 sec)

更新:做錯了。我使用了從屬日誌文件引用,在備份時未能獲得引用。如果有人正在閱讀本文並在想您的第一次複製時撓頭,那麼本指南對我非常有用。

基本上我需要對日誌位置進行完整轉儲,這樣我就可以告訴我的奴隸從哪裡開始複製。

我假設您正在使用mysqldump.

要啟動複製過程,從節點需要兩件事:

  • 來自 master 的最近數據庫的副本
  • 主二進制日誌中對應副本中狀態的座標

您可以在命令中添加--master-data參數以mysqldump在備份中包含座標設置。

以這種方式獲取副本後,您可以在從屬設備上恢復副本,然後用於START SLAVE啟動複製。slave 將在指定的位置從 master 二進制 log 開始讀取mysqldump並繼續進行複制。

引用自:https://serverfault.com/questions/1029694