数据库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并在每个从属设备上导入文件更有效。