【问题标题】:MySQL replication Master - Master ensure identical statusMySQL 复制 Master - Master 确保相同的状态
【发布时间】:2012-02-10 18:14:37
【问题描述】:

我在两个 MySQL 5.0 之间设置了 Master to Master 复制

我的要求是,在启动我的应用程序之前,我必须确保数据库相同我想确认“show slave status”命令的“seconds_behind_master”为 0 秒足以考虑 2 个数据库同步?

http://dev.mysql.com/doc/refman/5.0/en/show-slave-status.html

谢谢

【问题讨论】:

  • 您是否只写入一个数据库?如果不是,您的数据是否完全依赖于插入的顺序(想想自动增量字段)?
  • 不,数据不依赖于插入的顺序,我们已将一台服务器设置为仅自动递增奇数而另一台服务器自动递增以避免复制冲突和协调。

标签: mysql database replication database-replication


【解决方案1】:

不,这不足以保证数据库是相同的,只是从服务器运行了主服务器二进制日志中的所有语句。您可以更新或删除从数据库上的大块数据,并且仍然落后于 master = 0 秒,但从数据库肯定不会与主数据库相同。

如果你真的想验证数据库是否相同,你应该使用像 Percona 的 pt-table-checksum 这样的工具。

【讨论】:

  • 但就我而言,两者都是大师。在任一服务器上执行的任何更改都应自动复制到另一台服务器。在那种情况下,后面的秒数会起作用吗?
  • 假设您设置复制时数据库是相同的,并且没有使用 sql_bin_log=0 执行任何语句,那么期望它们相同是合理的。但是如果你真的想确定你需要做一些额外的验证,比如校验和表。
  • 我查看了 percona 的实用程序,它似乎主要针对 linux (.deb .rpm .tar.gz) 是否有 Windows 替代方案,因为该数据库托管在 Windows Server 2003 中环境?
【解决方案2】:

这并不是真正的保证,因为主到主复制不保证跨服务器的原子性。

此外,单次读取 0 可能没有意义,但如果您没有报告错误,那么随着时间的推移持续读取 0 将很好地表明服务器已同步。

所以,我说,每秒读取一次,持续 10 秒,如果它们都为 0,并且没有错误,那么您可能已经足够好了,就像 Ike 建议的那样,不需要比较校验和。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多