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 集群复制”。