有关MySQL复制的问题(主要)。
因此,我有2个MySQL数据库,它们是相同的架构,但是没有通过任何类型的网络连接。我需要单向(仅)同步数据,即Db1始终需要复制/转储并与Db2同步。两者都有更新/插入/删除活动。
我已经确保DB2(始终是接收者)具有很大范围的序列-因此在同步时,由DB2创建或“拥有”的记录不会与DB1记录冲突。还有一个规则,即在DB2上,我们将不编辑在DB1上创建的任何数据(我们可以通过序列号,也可以通过在每个DB上输入的数据种类来区分)。
我已经通过mysqldump(来自Db1)完成了此工作,并将转储修改为具有“ REPLACE INTO”而不是“ INSERT into”-并将修改后的mysqldump-output作为SQL脚本运行。音量不太高,工作正常。
是否有可能通过复制做到这一点(足够简单)? Mysql可以创建快照转储,我可以将其复制并运行复制命令-可行。
最佳答案
我将使用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文件。这样,您可以一次处理整个文件,而不必担心部分文件。关于mysql - Mysql Db同步选项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51428265/