J'ai une configuration de réplication maître-esclave et il semble que cela fonctionne bien. Ci-dessous est le résultat de SHOW SLAVE STATUS
commande:
show slave STATUS\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: *.*.*.*
Master_User: repliV1
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 10726644
Relay_Log_File: mysqld-relay-bin.000056
Relay_Log_Pos: 231871
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB: data1
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 10726644
Relay_Log_Space: 232172
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Je voudrais mieux comprendre le Relay_Log_File
, Relay_Log_Pos
et Relay_Master_Log_File
.
Mes questions sont:
Est-il vrai que le fichier journal de relais est un fichier qui est lu et stocké localement pour que la réplication s'exécute?
Que dire de la relay_master_log_file
puis; en quoi est-ce différent du Master_Log_File
?
Quelles sont ces deux valeurs, à savoir, Read_Master_Log_Pos
et Relay_Log_Pos
? Pourquoi apparaissent-ils alors que la réplication est terminée et synchronisée?
Est-il vrai que ces fichiers sont au format binaire et que je ne peux donc pas les visualiser?
Je veux comprendre plus en détail est le Relay_Log_File, Relay_Log_Pos et Relay_Master_Log_File.
De SHOW SLAVE STATUS\G
, obtenez deux valeurs
Relay_Log_File
: Journal de relais actuel acceptant de nouvelles entrées pendant la réplicationRelay_Log_Pos
: Position actuelle du journal de relais actuel acceptant de nouvelles entrées pendant la réplicationRelay_Master_Log_File
: Fichier journal de relais contenant la dernière instruction SQL exécutée avec succès sur le maître qui a été exécutée sur l'esclave.Les fichiers sont en binaire donc pas en mesure de les visualiser correctement
Oui, vous pouvez afficher les journaux de relais. Puisqu'ils ont la même structure qu'un journal binaire normal, il suffit d'exécuter le programme mysqlbinlog . Par exemple, pour afficher le SQL dans l'un de vos journaux de relais, comme le dernier, procédez comme suit:
mysqlbinlog mysqld-relay-bin.000056 > /root/SQLForCurrentRelayLog.txt
less /root/SQLForCurrentRelayLog.txt
Relay_Master_Log_File
est en fait le nom du binlog sur le maître contenant la dernière instruction SQL exécutée avec succès sur l'esclave. Ce n'est pas le nom d'un journal de relais sur l'esclave. Voir: http://dev.mysql.com/doc/refman/5.5/en/show-slave-status.html
Exec_Master_Log_Pos
est la position dans le fichier relay_master_log_file que le thread SQL esclave a exécuté jusqu'à. Donc, dans votre exemple, la base de données esclave a exécuté toutes les instructions jusqu'à binlog mysql-bin.000001
pos 10726644 sur la base de données master.
until_log_pos
n'est vraiment utilisé que si vous démarrez votre esclave avec la syntaxe START SLAVE UNTIL master_log_pos = $integer
. Cette syntaxe se répliquera jusqu'à cette position (ce sera le exec_master_log_pos
) puis arrêtez. Vous ne feriez normalement cela que si vous vouliez répliquer vers un point spécifique, mais pas plus loin (comme si la prochaine instruction est une chute accidentelle de la table ou quelque chose). La valeur de until_log_pos
est 0 lorsqu'il n'est pas spécifié, donc dans votre cas, cela signifie que la réplication continuera à avancer.