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