有关MySQL复制的问题(主要)。
所以我有2个MySQL数据库,它们是相同的架构,但是没有通过任何类型的网络连接。我需要单向(仅)同步数据,即Db1始终需要复制/转储下来并与Db2同步。两者都有更新/插入/删除活动。
我已经确保DB2(始终是接收者)具有很大范围的序列-因此在同步时,由DB2创建或“拥有”的记录不会与DB1记录冲突。还有一个规则,即在DB2上,我们将不编辑在DB1上创建的任何数据(我们可以通过序列号,也可以通过在每个DB上输入的数据种类来区分)。
我已经通过mysqldump(来自Db1)完成了此工作,并将转储修改为具有“ REPLACE INTO”而不是“ INSERT into”-并将修改后的mysqldump-output作为SQL脚本运行。音量不太高,工作正常。
是否可以通过复制做到这一点(足够简单)。 Mysql可以创建快照转储,我可以将其复制并运行复制命令-可行。
答案 0 :(得分:1)
我将使用auto_increment_increment
和auto_increment_offset
来确保记录不重叠。我知道您说过您将DB2上的记录设置为较大范围,但是最终它们可能仍然重叠。仅使DB1使用奇数,而DB2使用偶数,就可以确保永远不会发生这种情况。
如果两个实例未通过网络连接,则不能使用复制。复制要求副本能够与其主数据库建立连接。
但是您可以使用二进制日志,这是复制工作方式的一部分。在DB1上,启用二进制日志记录,它将记录对数据库所做的所有更改。定期将这些日志复制到DB2的服务器上(如果您当前正在使用mysqldump,我假设您有某种方法可以这样做)。使用mysqlbinlog
工具将日志转换为SQL命令以针对您的DB2实例进行重放。
示例:
mysqlbinlog binlog.000001 binlog.000002 | mysql -u root -p
由您决定是否复制和执行了哪些二进制日志。在复制一组binlog文件之前,请在DB1上运行FLUSH LOGS
。这将导致DB1关闭当前正在写入的binlog文件,并打开一个新的binlog文件。这样,您可以一次处理整个文件,而不必担心部分文件。