在某些情况下,您可能只有一个源服务器,并且希望将不同的数据库复制到不同的副本。例如,您可能希望将不同的销售数据分发到不同的部门,以帮助在数据分析期间分散负载。这种布局的示例显示在 图 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.%
。
此配置中的每个副本都从源接收完整的二进制日志,但仅执行二进制日志中适用于该副本上生效的 --replicate-wild-do-table
选项所包含的数据库和表的事件。
如果您有必须在复制开始之前同步到副本的数据,您有以下几种选择:
将所有数据同步到每个副本,并删除您不想保留的数据库、表或两者。
使用 mysqldump 为每个数据库创建单独的转储文件,并在每个副本上加载相应的转储文件。
使用原始数据文件转储,并仅包含每个副本所需的特定文件和数据库。
注意这在使用
InnoDB
数据库时不起作用,除非您使用innodb_file_per_table
。