MySQL上的“重复项”错误一直在从属中断复制

我遵循这个教程:

https://www.digitalocean.com/community/tutorials/how-to-set-up-master-slave-replication-in-mysql

不幸的是复制停止在奴隶始终:

[ERROR] Slave SQL: Error 'Duplicate entry '6443185' for key 'PRIMARY'' on query. Default database: 'testdb'. Query: 'INSERT INTO ultimate_cron_lock (name, current, expire) VALUES ('ultimate_cron_serial_launcher_1', '0', '1424077478.0243')', Error_code: 1062 

如果我删除所有的dbs,那么我怎么能告诉Mysql从服务器自动创build它们?

我没有在Master上指定binlog_do_db =,这意味着它应该为所有dbs执行二进制日志,在Slave上我只忽略了几个数据库:

 server-id = 2 relay-log = /var/lib/mysql/binlog/mysql-relay-bin.log log_bin = /var/lib/mysql/binlog/mysql-bin.log replicate-ignore-db=test replicate-ignore-db=information_schema replicate-ignore-db=mysql 

谢谢

其中最具破坏性的build议是build议使用slave-skip-errors使灾难自动化。 这是获取不一致的从数据库的快速方法。 请不惜一切代价避免设置slave-skip-errors

在同一时间,我可以说,从属错误的最常见的原因是不知道的事实,MySQL的奴隶不是默认只读。 如果您正在使用频繁切换,您的某些客户端可能仍会将更改写入从属设备。 为了摆脱这一点,你应该真的设置从服务器上的read_only = on

您可能可以这样做,但这需要在创build原始数据库后重播每一个事务。 除了这样做的效率相当低之外,还要求事务日志已经从被复制的数据库被创build的时刻开始设置,并且不会被截断,在我的经验中这种情况很less出现。

你可以在你的奴隶的my.cnf中设置以下内容:

 [mysqld] slave-skip-errors=1062 

但正如文件所说:

除非你完全理解你为什么得到错误,否则不要使用这个选项。

这个问题可能是由于你的应用程序中的时间/竞争条件造成的,你应该寻找解决scheme。

正如文件还警告:

不分青红皂白地使用这个选项会导致奴隶变得无法与主人同步,你不知道为什么会发生这种情况。

如果你使用这个选项而不是调查你的应用程序,你应该经常运行pt-table-checksum 。