[+/-]
Les capacités de réplication de MySQL sont implémentées à
l'aide de trois threads : un thread sur le maître et deux sur
l'esclave. Lorsque la commande START SLAVE
est
envoyée, l'esclave crée un thread d'I/O (Entrée/Sortie). Le
thread d'I/O se connecte au maître et lit les commandes qui ont
été stockées dans le log binaire. Le maître crée un thread
pour envoyer le contenu des logs binaire à l'esclave. Ce thread
peut être identifié comme le thread Binlog
Dump
dans le résultat de la commande SHOW
PROCESSLIST
. Le thread esclave I/O lit ce que le thread
maître Binlog Dump
lui envoie, et le stocke
dans un fichier local à l'esclave. Le troisième thread SQL lit
ces commandes et les exécute.
Dans la description précédente, il y a trois threads par esclave. Pour un maître avec de nombreux esclaves, il crée un thread par esclave simultanément connecté, et chaque esclave a son propre thread I/O et SQL.
Pour les versions de MySQL avant 4.0.2, la réplication implique uniquement deux threads : un sur le maître et un sur l'esclave. Les threads I/O et SQL sont combinés en un seul thread, et il n'y a pas de log de relais.
L'avantage d'utiliser deux threads est que la lecture et l'exécution des requêtes sont découplées. La tâche de lecture n'est pas ralentie par l'exécution. Par exemple, si l'esclave n'a pas fonctionné depuis un bon moment, le thread d'I/O peut lire rapidement le contenu de toutes les commandes à appliquer, même si le thread SQL met du temps à les concrétiser. Si l'esclave s'arrête avant que toutes les commandes n'ait été exécutées, le thread d'I/O aura au moins lu les commandes, et elles sont désormais locales. Cela permettra au maître de purger ces lignes, si les autres esclaves n'en ont pas besoin non plus.
La commande SHOW PROCESSLIST
affiche des
informations qui vous indiquent ce qui se passe sur le maître et
sur l'esclave, concernant la réplication.
L'exemple ci-dessous montre les trois threads dans le résultat de
SHOW PROCESSLIST
. Le format qui est présenté
est celui de SHOW PROCESSLIST
pour MySQL
version 4.0.15, où le contenu de la colonne
State
a été changé pour être plus
significatif.
Sur le serveur maître, le résultat de SHOW
PROCESSLIST
ressemble à ceci :
mysql> SHOW PROCESSLIST\G
*************************** 1. row ***************************
Id: 2
User: root
Host: localhost:32931
db: NULL
Command: Binlog Dump
Time: 94
State: Has sent all binlog to slave; waiting for binlog to
be updated
Info: NULL
Ici, le thread 2 est le thread de réplication pour un esclave connecté. L'information indique que toutes les requêtes ont été envoyées à l'esclave, et que le maître attend de nouvelles instructions.
Sur le serveur esclave, le résultat de SHOW
PROCESSLIST
ressemble à ceci :
mysql> SHOW PROCESSLIST\G
*************************** 1. row ***************************
Id: 10
User: system user
Host:
db: NULL
Command: Connect
Time: 11
State: Waiting for master to send event
Info: NULL
*************************** 2. row ***************************
Id: 11
User: system user
Host:
db: NULL
Command: Connect
Time: 11
State: Has read all relay log; waiting for the slave I/O
thread to update it
Info: NULL
Cette information indique que le thread 10 est le thread d'I/O, en communication avec le serveur, et le thread 11 est le thread SQL, qui traite les commandes stockées dans le log de relais. Actuellement, les deux threads sont oisifs, et attendent des instructions.
Notez que la valeur de la colonne Time
vous
indique le retard de l'esclave par rapport au maître. See
Section 6.9, « FAQ de la réplication ».
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.