我遵循这个教程:
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 。