配置MySQL多源复制
MySQL多源复制使复制从服务器可以并行接收来自多个直接主服务器的事务。在多源复制拓扑中,从服务器为其应从中接收事务的每个主服务器创建一个复制通道。有关复制通道如何工作的更多信息,请参见“复制通道”。
您可能选择实现多源复制以实现以下目标:
- 将多个服务器备份到单个服务器。
- 合并表碎片。
- 将数据从多个服务器整合到单个服务器。
在应用事务时,多源复制不会实现任何冲突检测或解决方案,并且如果需要,这些任务将留给应用程序。
注意多源复制从属服务器上的每个通道都必须从其他主服务器复制。您无法设置从单个从服务器到单个主机的多个复制通道。这是因为复制从属服务器的服务器ID在复制拓扑中必须唯一。主服务器仅通过从服务器的服务器ID来区分从服务器,而不能通过复制通道的名称来区分,因此它无法识别来自同一从服务器的不同复制通道。
通过将slave_parallel_workers
系统变量设置为大于0的值,还可以将rmulti-source复制从属服务器设置为多线程复制从属服务器。在多源复制从属服务器上执行此操作时,该从属服务器上的每个通道都具有指定数量的应用程序线程,再加上一个协调器线程来管理它们。您不能为单个通道配置应用程序线程数。
从MySQL 8.0开始,可以在特定复制通道上使用复制过滤器配置多源复制从属。当多个主服务器上存在相同的数据库或表时,可以使用通道特定的复制过滤器,并且您只需要从属服务器就可以从一个主服务器复制它。有关更多信息,请参见“基于复制通道的过滤器”。
本节提供有关如何为多源复制配置主服务器和从属服务器,如何启动,停止和重置多源从属服务器以及如何监视多源复制的教程。
配置多源复制
多源复制拓扑至少需要配置两个主服务器和一个从属服务器。在这些教程中,我们假设你有两个主人master1
和master2
,和复制从slavehost
。从服务器db1
将从master1
和db2
从每个主机复制一个数据库master2
。
可以将多源复制拓扑中的主服务器配置为使用基于GTID的复制或基于二进制日志位置的复制。有关如何使用基于GTID的复制配置主服务器的信息,请参见“使用GTID设置复制”。有关如何使用基于文件位置的复制配置主数据库,请参见“设置要复制的主数据库的配置”。
多源复制拓扑中的从站需要TABLE
用于主信息日志和中继日志信息日志的存储库,这是MySQL 8.0中的默认存储库。多源复制与文件存储库不兼容,并且现在不赞成和系统变量的FILE
设置。master_info_repository
relay_log_info_repository
要修改将FILE
存储库用于从属状态日志的现有复制从属服务器以使用TABLE
存储库,可以使用mysql客户端在从属服务器上发出以下语句来动态转换现有复制存储库:
mysql>STOP SLAVE ; mysql>SET GLOBAL master_info_repository = 'TABLE'; mysql>SET GLOBAL relay_log_info_repository = 'TABLE';
在从站可用于连接的所有主站上创建一个合适的用户帐户。您可以在所有母版上使用相同的帐户,也可以在每个母版上使用不同的帐户。如果仅出于复制目的创建帐户,则该帐户仅需要REPLICATION SLAVE
特权。例如,要设置一个ted
可以从复制从属服务器连接的新用户,请slavehost
使用mysql客户端在每个主服务器上发出以下语句:
mysql>CREATE USER 'ted'@'slavehost'IDENTIFIED BY 'password'; mysql>GRANT REPLICATION SLAVE ON *.*TO 'ted'@'slavehost';
有关更多详细信息以及有关来自MySQL 8.0的新用户的默认身份验证插件的重要信息,请参见“创建用于复制的用户”。