MySQL 软件包升级(Debian apt-get)总是会因为 mysql 架构的变化而破坏主主复制

MySQL 软件包升级(Debian apt-get)总是会因为 mysql 架构的变化而破坏主主复制

我在 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 的回答这表明这是一个已经解决的问题!

相关内容