【问题标题】:Mysql Db sync optionsMysql Db 同步选项
【发布时间】:2018-07-19 17:02:11
【问题描述】:

关于 MySQL 复制的问题(主要)。

所以我有 2 个 MySQL 数据库,它们是相同的架构,但没有通过任何类型的网络连接。我需要单向(仅)同步数据,即 Db1 始终需要复制/转储下来,并与 Db2 同步。两者都有更新/插入/删除活动。

我已确保 DB2(它始终是接收器)具有非常高范围的序列 - 因此在 DB2 上创建或“拥有”的记录在同步时不会与 DB1 记录冲突。还有一条规则是,在 DB2 上,我们不会编辑在 DB1 上创建的任何数据(我们可以通过序列号来判断,也可以通过每个 DB 上输入的数据类型来判断)。

我已经通过 mysqldump(来自 Db1)进行了这项工作,并将转储修改为“REPLACE INTO”而不是“INSERT into”——并将修改后的 mysqldump-output 作为 SQL 脚本运行。音量不太高,效果很好。

是否可以通过复制来做到这一点(很简单)。 Mysql 可以创建快照转储,我会复制它们并运行复制命令 - 是否可行。

【问题讨论】:

    标签: mysql replication database-replication


    【解决方案1】:
    1. 我会使用auto_increment_incrementauto_increment_offset 来确保记录不重叠。我知道您说过您将 DB2 上的记录设置为较高的范围,但最终它们可能仍会重叠。只要让 DB1 使用奇数值而 DB2 使用偶数值就可以确保永远不会发生这种情况。

    2. 如果两个实例未通过网络连接,则无法使用复制。复制要求副本能够与其主节点建立连接。

    3. 但是您可以使用二进制日志,这是复制工作方式的一部分。在 DB1 上,启用二进制日志记录,它将记录对数据库所做的每一次更改。定期将这些日志复制到 DB2 的服务器(如果您当前正在使用 mysqldump,我假设您有一些方法可以做到这一点)。使用 mysqlbinlog 工具将日志转换为 SQL 命令以针对您的 DB2 实例进行回放。

      例子:

       mysqlbinlog binlog.000001 binlog.000002 | mysql -u root -p
      
    4. 您可以跟踪已复制和执行的二进制日志。就在您复制一组 binlog 文件之前,在 DB1 上运行 FLUSH LOGS。这会导致 DB1 关闭它当前正在写入的 binlog 文件,并打开一个新的 binlog 文件。这样您就可以一次处理整个文件,而不必担心部分文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-10
      • 1970-01-01
      • 2013-07-10
      • 2011-10-01
      • 2017-03-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多