Spec-Zone .ru
спецификации, руководства, описания, API
|
MySQL replication capabilities are implemented using three threads, one on the master server and two on the slave:
Binlog dump thread. The master creates a thread to send the binary log
contents to a slave when the slave connects. This thread can be identified in the output of SHOW PROCESSLIST
on the master as the Binlog
Dump
thread.
The binlog dump thread acquires a lock on the master's binary log for reading each event that is to be sent to the slave. As soon as the event has been read, the lock is released, even before the event is sent to the slave.
Slave I/O thread. When a START SLAVE
statement is issued on a slave server, the slave creates an
I/O thread, which connects to the master and asks it to send the updates recorded in its binary logs.
The slave I/O thread reads the updates that the master's Binlog Dump
thread sends (see previous item) and copies them to local files that comprise the slave's relay log.
The state of this thread is shown as Slave_IO_running
in the output of
SHOW SLAVE STATUS
or
as Slave_running
in the output of SHOW
STATUS
.
Slave SQL thread. The slave creates an SQL thread to read the relay log that is written by the slave I/O thread and execute the events contained therein.
In the preceding description, there are three threads per master/slave connection. A master that has multiple slaves creates one binlog dump thread for each currently connected slave, and each slave has its own I/O and SQL threads.
A slave uses two threads to separate reading updates from the master and executing them into independent tasks. Thus, the task of reading statements is not slowed down if statement execution is slow. For example, if the slave server has not been running for a while, its I/O thread can quickly fetch all the binary log contents from the master when the slave starts, even if the SQL thread lags far behind. If the slave stops before the SQL thread has executed all the fetched statements, the I/O thread has at least fetched everything so that a safe copy of the statements is stored locally in the slave's relay logs, ready for execution the next time that the slave starts. This enables the master server to purge its binary logs sooner because it no longer needs to wait for the slave to fetch their contents.
The SHOW PROCESSLIST
statement provides information that tells you what is happening
on the master and on the slave regarding replication. For information on master states, see Section
8.12.5.5, "Replication Master Thread States". For slave states, see Section
8.12.5.6, "Replication Slave I/O Thread States", and Section
8.12.5.7, "Replication Slave SQL Thread States".
The following example illustrates how the three threads show up in the output from SHOW PROCESSLIST
.
On the master server, the output from SHOW
PROCESSLIST
looks like this:
mysql> SHOW PROCESSLIST\G
*************************** 1. row *************************** Id: 2 User: root Host: localhost:32931 db: NULLCommand: Binlog Dump Time: 94 State: Has sent all binlog to slave; waiting for binlog to be updated Info: NULL
Here, thread 2 is a Binlog Dump
replication thread that services a connected slave.
The State
information indicates that all outstanding updates have been sent to the
slave and that the master is waiting for more updates to occur. If you see no Binlog
Dump
threads on a master server, this means that replication is not running; that is, no slaves are
currently connected.
On a slave server, the output from SHOW
PROCESSLIST
looks like this:
mysql> SHOW PROCESSLIST\G
*************************** 1. row *************************** Id: 10 User: system user Host: db: NULLCommand: Connect Time: 11 State: Waiting for master to send event Info: NULL*************************** 2. row *************************** Id: 11 User: system user Host: db: NULLCommand: Connect Time: 11 State: Has read all relay log; waiting for the slave I/O thread to update it Info: NULL
The State
information indicates that thread 10 is the I/O thread that is
communicating with the master server, and thread 11 is the SQL thread that is processing the updates stored in
the relay logs. At the time that SHOW
PROCESSLIST
was run, both threads were idle, waiting for further updates.
The value in the Time
column can show how late the slave is compared to the master.
See Section B.13,
"MySQL 5.6 FAQ: Replication". If sufficient time elapses on the master side without activity on the
Binlog Dump
thread, the master determines that the slave is no longer connected. As
for any other client connection, the timeouts for this depend on the values of net_write_timeout
and net_retry_count
; for more information about these, see Section
5.1.4, "Server System Variables".
The SHOW SLAVE STATUS
statement provides additional information about replication
processing on a slave server. See Section 16.1.5.1, "Checking
Replication Status".