Mysql 数据库同步选项

标签 mysql replication database-replication

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

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

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

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

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

最佳答案

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

关于Mysql 数据库同步选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51428265/

相关文章:

php - 更改密码 PHP 问题

Amazon EC2 上的 MySQL 数据库复制错误 2013

redis - Redis是否支持强一致性

Mysql 主从主复制错误

mysql - 使用连接获取第二个表中不存在的记录

php - 如何在mysql中强制插入重复的键

php - 在网站托管期间出现此错误

couchdb - CouchDB 的过滤复制能否复制文档的最后 100 个修订版?

logging - 为什么我的 MongoDB 日志填满 "getmore local.oplog.rs"?

mysql - 轻量级多操作系统监控平台