10bet网址
MySQL 8.0参考手册
相关的文档10bet官方网站 下载本手册 本手册摘录

17.2.3复制线程

MySQL复制功能是使用三个主线程实现的,其中一个在源服务器上,两个在副本上:

  • 二进制日志转储线程。源将在副本连接时将二进制日志内容发送到副本中的线程。该线程可以在输出中识别显示processlist.在源代码Binlog转储线程。

    二进制日志转储线程获取源二进制日志上的一个锁,用于读取要发送到副本的每个事件。一旦事件被读取,锁就被释放,甚至在事件被发送到副本之前。

  • 复制的I / O的线程。当一个开始副本|奴隶语句在副本服务器上发布,副本创建一个I / O线程,连接到源,并要求它将记录在其二进制日志中的更新发送。

    复制I / O线程读取源的更新Binlog转储线程发送(见上一项)并将它们复制到组成副本的中继日志的本地文件中。

    此线程的状态显示为slave_io_running.在输出中显示从站状态

  • 复制SQL线程。副本创建一个SQL线程以读取由Replication I / O线程编写的中继日志,并执行其中包含的事务。

每个源/副本连接有三个主线程。具有多个副本的源为每个当前连接的副本创建一个二进制日志转储线程,每个副本都有自己的复制I / O和SQL线程。

副本使用两个线程从源文件中分离读取更新,并将它们执行到独立的任务中。因此,即使应用事务的过程很慢,读取事务的任务也不会变慢。例如,如果副本服务器有一段时间没有运行,那么当副本启动时,它的I/O线程可以快速地从源获取所有二进制日志内容,即使SQL线程远远落后。如果该副本在SQL线程执行所有获取的语句之前停止,那么I/O线程至少已经获取了所有内容,以便事务的安全副本本地存储在该副本的中继日志中,为下次该副本启动时的执行做好准备。

您可以通过设置副本对副本进行进一步的并行化slave_parallel_workers.将系统变量设置为大于0的值(默认值)。当设置了这个系统变量时,副本将创建指定数量的工作线程来应用事务,再加上一个协调线程来管理事务。如果使用多个复制通道,则每个通道都有这个线程数。一个副本slave_parallel_workers.设置为大于0的值称为多线程副本。通过此设置,可以重试失败的事务。

笔记

当前NDB Cluster不支持多线程复制,它会忽略该变量的设置。看到第23.6.3节,“NDB集群复制中的已知问题”为更多的信息。