我之前的团队成员将一台服务器上的数据库“复制”到另一台服务器上。但现在它不再同步了

我之前的团队成员将一台服务器上的数据库“复制”到另一台服务器上。但现在它不再同步了

数据库 1 是常规数据库服务器。他将其复制到数据库 2...直接克隆。主对主。它们始终处于“同步”状态。它们各自有 4000 万行。

今天,数据库 2 “坏了”,似乎返回的结果与数据库 1 不同。这不正常,因为它们应该是相同的。

您会提出什么建议来解决这个问题?

我是否应该删除数据库 2,并让数据库 1 重新复制到数据库 2?如果是,我该怎么做?

-我需要知道他做了哪些更改以及输入了哪些命令,以便我可以撤消复制并创建新的复制。

答案1

在尝试任何其他操作之前,请检查 DB 2 是否是 DB 1 的复制从属。在 DB 2 上执行“SHOW SLAVE STATUS”。如果它给出结果,则很可能发生了错误,从而停止了复制。

mysql> SHOW SLAVE STATUS\G
*************************** 1. row ***************************
       Slave_IO_State: Waiting for master to send event
          Master_Host: localhost
          Master_User: root
          Master_Port: 3306
        Connect_Retry: 3
      Master_Log_File: gbichot-bin.005
  Read_Master_Log_Pos: 79
       Relay_Log_File: gbichot-relay-bin.005
        Relay_Log_Pos: 548
Relay_Master_Log_File: gbichot-bin.005
     Slave_IO_Running: Yes
    Slave_SQL_Running: Yes
      Replicate_Do_DB:
  Replicate_Ignore_DB:
           Last_Errno: 0
           Last_Error:
         Skip_Counter: 0
  Exec_Master_Log_Pos: 79
      Relay_Log_Space: 552
      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: 8

检查名为

Slave_IO_Running
Slave_SQL_Running   and
Seconds_behind_master

如果“running”列显示“否”且“seconds_behind_master”大于几秒钟,请检查“last_error”中的值。它应该可以让您了解错误发生的位置。尝试修复它(通过修改 DB 2 上的数据)并通过在 DB 2 上运行“START SLAVE”给它一个新的尝试。之后立即检查“SHOW SLAVE STATUS”。

为了深入了解,我建议阅读 MySQL 手册,特别是有关复制设置的章节:MySQL 5.0 复制

答案2

您需要首先确认 DB 2 是否仅包含 DB 1 数据的子集,或者两个服务器是否都包含对方不包含的记录(即 DB 1 也缺少数据)。如果是这种情况,则删除复制,擦除 DB 2,然后重新启动,这次操作正确...

如果不是这样,那么您就需要编写大量的 SQL。

答案3

您的复制可能是通过编程方式完成的,即“手动”,就像代码一样。您别无选择,只能手动重新同步所有内容。

官方文档

如果您的数据库特别大,复制原始数据文件可能比使用 mysqldump 并在每个从属服务器上导入文件更有效。

  1. 停止复制。
  2. 停止对数据库的所有操作(不再访问、读取或写入)
  3. 完全关闭两个数据库。
  4. 有风险但是如果你有大量数据集,你可以在停止复制并刷新 binlog 后将“数据”目录复制到 Master 2。这样会很快,并且会 100% 复制你的 Master。有风险
  5. 重新启动数据库。
  6. 重新开始复制​​。

相关内容