mysql 复制失败

mysql 复制失败

在我们意识到我们的备份(转储)花费的时间太长,以及 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)

更新: 我正在做错误的。我使用了从属日志文件引用,但在备份时无法获取引用。如果有人正在阅读这篇文章,并且正在为你的第一次复制而挠头,那么这篇文章指导对我很有用。

基本上,我需要对日志位置进行完整转储,这样我就可以告诉我的从属服务器从哪里开始复制。

答案1

我假设您正在使用 进行备份mysqldump

要启动复制过程,从属节点需要两样东西:

  • 来自主数据库的最新数据库副本
  • 主二进制日志中与副本状态对应的坐标

您可以--master-data向命令添加参数mysqldump以包含备份中的坐标设置。

以这种方式复制后,您可以在从服务器上恢复该副本,然后使用它START SLAVE来开始复制。从服务器将从中指定的位置开始从主服务器二进制日志中读取mysqldump并继续复制。

相关内容