可能存在这样的情况:您有一个源服务器,想要将不同的数据库复制到不同的副本。例如,您可能想要将不同的销售数据分布到不同的部门,以便在数据分析期间分配负载。这种布局的示例如图 19.2,“将数据库复制到独立副本”所示。
您可以通过在每个副本上配置源和副本,然后使用--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.%
。
在这种配置中,每个副本都从源服务器接收整个二进制日志,但仅执行二进制日志中适用于该副本的事件。
如果您需要在复制开始之前将数据同步到副本,可以选择以下方法:
-
将所有数据同步到每个副本,然后删除不需要的数据库、表或两者。
-
使用mysqldump创建每个数据库的独立转储文件,然后在每个副本上加载适当的转储文件。
-
使用原始数据文件转储,并仅包括每个副本所需的特定文件和数据库。
Note这不适用于
InnoDB
数据库,除非您使用innodb_file_per_table
。