文档主页
MySQL 9.0 参考手册
相关文档 下载本手册
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
手册页 (TGZ) - 258.2Kb
手册页 (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 参考手册  /  ...  /  将不同的数据库复制到不同的副本

19.4.6 将不同的数据库复制到不同的副本

在某些情况下,您可能有一个源服务器,并且希望将不同的数据库复制到不同的副本。例如,您可能希望将不同的销售数据分发到不同的部门,以帮助在数据分析期间分散负载。此布局的示例如 图 19.2,“将数据库复制到单独的副本” 所示。

图 19.2 将数据库复制到单独的副本

The MySQL source has three databases, databaseA, databaseB, and databaseC. databaseA is replicated only to MySQL Replica 1, databaseB is replicated only to MySQL Replica 2, and databaseC is replicated only to MySQL Replica 3.

您可以通过按常规方式配置源和副本,然后使用每个副本上的 --replicate-wild-do-table 配置选项限制每个副本处理的二进制日志语句来实现这种分离。

重要

您应该不要使用 --replicate-do-db 用于此目的,当使用基于语句的复制时,因为基于语句的复制会导致此选项的效果根据当前选择的数据库而异。这同样适用于混合格式的复制,因为这允许使用基于语句的格式复制一些更新。

但是,如果您仅使用基于行的复制,则将 --replicate-do-db 用于此目的应该是安全的,因为在这种情况下,当前选择的数据库对选项的操作没有影响。

例如,要支持 图 19.2,“将数据库复制到单独的副本” 中显示的分离,您应该在执行 START REPLICA 之前,如下配置每个副本

  • 副本 1 应该使用 --replicate-wild-do-table=databaseA.%

  • 副本 2 应该使用 --replicate-wild-do-table=databaseB.%

  • 副本 3 应该使用 --replicate-wild-do-table=databaseC.%

此配置中的每个副本都从源接收完整的二进制日志,但仅执行二进制日志中适用于每个副本上生效的 --replicate-wild-do-table 选项包含的数据库和表的事件。

如果您有必须在复制开始之前同步到副本的数据,您有以下几种选择

  • 将所有数据同步到每个副本,然后删除您不想保留的数据库、表或两者。

  • 使用 mysqldump 为每个数据库创建单独的转储文件,并在每个副本上加载相应的转储文件。

  • 使用原始数据文件转储,只包含每个副本需要的特定文件和数据库。

    注意

    这在使用 InnoDB 数据库时不适用,除非您使用 innodb_file_per_table.