MySQL同步实现细节

翻译自MySQL 5.5 Reference Manual

MySQL同步是使用三个线程实现的,一个在主服务器上,两个在从服务器上:

  • 二进制日志转储线程(Binlog dump thread)。当从服务器连接时,主服务器创建一个线程用来把二进制日志的内容发给从服务器。在主服务器SHOW PROCESSLIST的输出信息中,它被显示为Binlog Dump。
    binlog dump线程在主服务器的二进制文件上取得一个锁(acquires a lock),用来读取每一个要发给从服务器的事件。读取事件后,锁便会被释放,而不管事件有没有发送给从服务器。
  • 从服务器I/O线程(Slave I/O thread)。当从服务器运行START SLAVE语句时,会创建一个I/O线程。这个I/O线程会连接主服务器,要求主服务器发送记录在二进制日志中的数据库更新信息。
    从服务器的I/O线程读取主服务器Binlog Dump线程发过来的数据库更新信息,并把它们拷贝到本地文件,也就是从服务器的中继日志(relay log)中。
    这一线程的状态,在SHOW SLAVE STATUS的输出信息中显示为Slave_IO_running,在SHOW STATUS的输出信息中显示为Slave running。
  • 从服务器SQL线程(Slave SQL thread)。从服务器读取I/O线程生成的中继日志,并执行包含在日志中的事件。

在上面的描述中,每个主/从服务器连接都有3个线程。如果一个主服务器有多个从服务器,它会给每个连接着的从服务器都创建一个binlog dump线程。每一个从服务器都有自己的I/O和SQL线程。

Continue reading ‘MySQL同步实现细节’ »

点击量:95