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

数据库1是一个常规数据库服务器。 他复制到数据库2 …直接克隆。 主 – 主。 他们一直在“同步”。 他们每个有四千万行。

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

你有什么build议来解决这个问题?

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

– 我需要知道他做了哪些更改以及键入了哪些命令,以便可以反转复制并创build新的复制。

在尝试其他任何操作之前,请检查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 

如果“正在运行”列显示“否”且“seconds_behind_master”大于几秒钟,则检查“last_error”中的值。 它应该给你一个错误发生在哪里的想法。 尝试修复它(通过修改数据库2上的数据),并通过运行DB 2上的“START SLAVE”给它一个新的镜头。之后立即检查“SHOW SLAVE STATUS”。

为了深入挖掘,我推荐阅读MySQL手册,特别是关于复制设置的章节: MySQL 5.0复制

您需要首先确认DB 2是否只包含DB 1数据的一个子集,或者两个服务器是否包含另一个不存在的logging(即DB 1还缺less数据)。 如果是这种情况,那么删除复制,擦除数据库2,然后重新开始,这样做正确…

如果不是这样的话,那么你有很多的SQL来编写。

有可能你的复制是以编程的方式完成的,就像在代码中那样“手动”读取。 你别无select,只能手动重新同步一切。

从官方文件 :

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

  1. 停止复制。
  2. 停止对数据库的所有操作(不再访问,读取或写入)
  3. 完全closures两个数据库。
  4. RISKY,但是如果你有大量的数据集,你可以在停止复制和刷新binlog之后将“data”目录复制到Master 2。 这将是快速的,将100%复制你的主。 有风险
  5. 重新启动数据库。
  6. 重新启动您的复制。