我在 2 台 Debian 服务器上设置了主主复制,它们复制所有内容,包括 mysql 数据库本身(以便新用户等也能复制)。这通常非常有效,但大多数(如果不是全部)对 mysql 的 apt 升级都涉及对 mysql 数据库架构的一些更改,这会导致复制错误并停止复制。最终,我总是需要通过跳过每一侧的错误语句来手动修复。这总是很耗时,我担心手动执行时可能会出错(跳过太多语句、错误输入 CHANGE MASTER 详细信息等)。
我可以做些什么来确保将来对 MySQL 的 apt-get 更新能够顺利处理而不会导致复制问题? 肯定有一个行之有效的最佳实践?
答案1
知道哪些命令破坏了您的复制会很好,但我想,mysql_upgrade 脚本可能是个坏人。如果是,您可以重建 mysql 包,在安装后脚本中添加 --skip-write-binlog(5.6.7 之后不需要这个)
但通常我不会只使用 apt-get upgrade 来升级正在生产的服务器,然后停止从属服务器,对其进行升级并重新连接。这是禅宗之道。
答案2
我不知道它是否适用于所有可能的升级方案,但我刚刚测试了这一点,并且升级没有任何复制问题:
# /etc/mysql/conf.d/binlog_ignoredb_mysql.cnf.disabled
# Rename this to end in .cnf prior to performing `apt-get upgrade`.
# Otherwise, its attempts to `ALTER TABLE users` will cause replication errors.
# After upgrade is complete, rename back to .disabled and then /etc/init.d/mysql restart
[mysqld]
binlog-ignore-db=mysql
请注意,我的测试是针对小升级(5.5.41 到 5.5.43)进行的。
答案3
在调查是否mysql_upgrade
仍然存在复制设置问题时(因为它以前困扰过我和我的团队,但同时binlog-ignore-db=mysql
也存在问题),我偶然发现了这个页面,我很高兴阅读banyek 的回答这表明这是一个已经解决的问题!