MySQL 复制功能是使用以下类型的线程实现的:
-
二进制日志转储线程。 源服务器创建一个线程将二进制日志内容发送到副本服务器时副本服务器连接。这条线程可以在源服务器的
SHOW PROCESSLIST
输出中被识别为Binlog Dump
线程。 -
复制 I/O 接收器线程。 当在副本服务器上发出
START REPLICA
语句时,副本服务器创建一个 I/O(接收器)线程,该线程连接到源服务器并请求它发送二进制日志中的更新。复制接收器线程读取源服务器的
Binlog Dump
线程发送的更新(见前一项),并将其复制到副本服务器的中继日志文件中。该线程的状态在
SHOW REPLICA STATUS
输出中显示为Slave_IO_running
。 -
复制 SQL 应用程序线程。 当
replica_parallel_workers
等于 0 时,副本服务器创建一个 SQL(应用程序)线程,以读取由复制接收器线程写入的中继日志,并执行其中的交易。当replica_parallel_workers
等于
时,有N
>= 1N
个应用程序线程和一个协调器线程,该协调器线程从中继日志中顺序读取交易,并将其分配给工作线程。每个工作线程应用协调器分配给它的交易。
您可以通过将系统变量 replica_parallel_workers
设置为大于 0 的值来启用副本服务器上的进一步并行处理。当这样做时,副本服务器将创建指定数量的工作线程来应用交易,另外还有一个协调器线程,该线程从中继日志中读取交易,并将其分配给工作线程。具有 replica_parallel_workers
(slave_parallel_workers
)设置为大于 0 的副本服务器称为多线程副本。如果您使用多个复制通道,每个通道都将使用该变量指定的线程数。
多线程副本也支持 NDB 集群。请参阅 第 25.7.11 节,“NDB 集群复制使用多线程应用程序”,以获取更多信息。