我的系统pipe理员设置了两个同步的数据库。 主-主。 但是,这两个数据库不同步

DB1和DB2。

我对DB1进行了更改,它似乎不在DB2上。 当我在DB2上执行“SHOW SLAVE STATUS \ G”时,似乎出现错误:

mysql> show slave status\G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: Master_User: Master_Port: Connect_Retry: 60 Master_Log_File: mysql-bin.0005496 Read_Master_Log_Pos: 5445649315 Relay_Log_File: mysqld-relay-bin.0041705 Relay_Log_Pos: 1624302119 Relay_Master_Log_File: mysql-bin.0004461 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: 1062 Last_Error: Error 'Duplicate entry '4779' for key 1' on query. Default database: 'falc'. Query: 'INSERT INTO `log` (`anon_id`, `created_at`, `query`, `episode_url`, `detail_id`, `ip`) VALUES ('fdzn1d45kMavF4qbyePv', '2009-11-19 04:19:13', 'amazon', '', '', '130.126.40.57')' Skip_Counter: 0 Exec_Master_Log_Pos: 162301982 Relay_Log_Space: 136505187184 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 1 row in set (0.00 sec) 

然后,我确实显示了表 ,而DB2似乎没有在DB1上创build的表…这意味着由于某种原因,DB2停止了与DB1的同步。

我怎样才能让他们再次完全同步呢?

我只想要的是DB2与DB1完全一样!

主键冲突可以通过设置两个服务器上的auto_increment_increment和auto_increment_offset值来避免。

在两台服务器上将auto_increment_increment设置为相同的值(例如,4)将两台服务器上的auto_increment_offset设置为DIFFERENT值(例如,服务器A上的1,服务器B上的2)。

这将有助于避免将来自动增加主键的冲突。 这两个mysql服务器都需要重新启动才能使这个scheme生效,并且当你重新启动它们的时候,理想情况下它们应该是同步的。

您的系统pipe理员可能已经完成了所有这些工作,但看起来像是一个auto_increment键冲突。

至于你目前的困境,检查两台服务器的log表中的id为4779的行。 如果行完全相同,则可以安全地运行SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1; START SLAVE; 让复制再次运行。

如果他们不同,你将需要决定保留哪一个。

请记住,您发出的任何SQL插入/更新/删除语句将最终在两台服务器上运行,因此请仔细考虑。

你可以使用SQL_LOG_BIN = 0; 指令仅在一个框上运行语句来修复复制错误。

祝你好运!

MySQL复制是A-> B而不是A – > B,因此请确保您正在更新主数据库(A),这是复制到从数据库(B)的数据库。 如果你不是,那么这可能是你的问题。

我猜想你有一个糟糕的表设置的地方。 复制停止,因为复制查询失败:

在查询时重复键入1的'4779'

您可以将跳过查询计数设置为1,然后继续处理,以便复制器将跳过错误的语句并继续复制。 然后您的表格(可能)在复制恢复后不久显示出来。 但是,您必须自问:“为什么复制查询失败?” 然后你必须问自己:“你感到幸运吗?” 朋克。 那么,你呢?