Mysql Db同步选项

时间:2018-07-19 17:02:11

标签: mysql replication database-replication

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

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

我已经确保DB2(始终是接收者)具有很大范围的序列-因此在同步时,由DB2创建或“拥有”的记录不会与DB1记录冲突。还有一个规则,即在DB2上,我们将不编辑在DB1上创建的任何数据(我们可以通过序列号,也可以通过在每个DB上输入的数据种类来区分)。

我已经通过mysqldump(来自Db1)完成了此工作,并将转储修改为具有“ REPLACE INTO”而不是“ INSERT into”-并将修改后的mysqldump-output作为SQL脚本运行。音量不太高,工作正常。

是否可以通过复制做到这一点(足够简单)。 Mysql可以创建快照转储,我可以将其复制并运行复制命令-可行。

1 个答案:

答案 0 :(得分: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文件。这样,您可以一次处理整个文件,而不必担心部分文件。