我遵循了本教程:
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
如果我删除所有数据库,那么我该如何告诉 Mysql 从属服务器自动创建它们?
我没有在 Master 上指定 binlog_do_db=,这意味着它应该为所有 db 执行二进制日志,在 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
谢谢
答案1
所有建议中最具破坏性的建议是使用 来自动化灾难slave-skip-errors
。这是获取不一致的从属数据库的快速方法。请不惜slave-skip-errors
一切代价避免设置。
同时,我可以说,导致从属错误的最常见原因是没有意识到 mysql 从属默认情况下不是只读的。如果您使用频繁切换,您的某些客户端可能仍会将更改写入从属。要摆脱这种情况,您应该read_only = on
在从属服务器上进行设置。
答案2
您也许可以这样做,但这需要重放自原始数据库创建以来的每一个事务。除了这样做效率很低之外,它还要求从要复制的数据库创建时起就设置好事务日志,并且永远不会被截断,而根据我的经验,这种情况很少发生。