MySQLの奴隷状態を示すことを理解しようとしています
-
22-10-2019 - |
質問
マスタースレーブレプリケーションのセットアップがあり、正常に実行されているようです。以下は結果です SHOW SLAVE STATUS
指図:
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:
さらに理解したいと思います Relay_Log_File
, Relay_Log_Pos
と Relay_Master_Log_File
.
私の質問は次のとおりです。
リレーログファイルが読み取られているものであり、レプリケーションが実行されるためにローカルに保存されているのは本当ですか?
はどうですか
relay_master_log_file
それから;それはどのように違いますかMaster_Log_File
?これらの値は何ですか、 つまり。,
Read_Master_Log_Pos
とRelay_Log_Pos
?複製が完全で同期していても、なぜそれらが現れるのですか?これらのファイルがバイナリ形式であるため、それらを表示できないのは本当ですか?
解決
さらに理解したいのは、Relay_log_file、leray_log_pos、relay_master_log_fileです。
から SHOW SLAVE STATUS\G
, 、2つの値を取得します
Relay_Log_File
:現在のリレーログレプリケーション中に新しいエントリを受け入れますRelay_Log_Pos
:レプリケーション中に新しいエントリを受け入れる現在のリレーログの現在の位置Relay_Master_Log_File
:奴隷で実行されたマスター上の最後に正常に実行されたSQLステートメントを含むリレーログファイル。- MASTER_LOG_FILE:現在のリレーログファイルと現在のリレーログ位置に対応するマスターのログのログ
ファイルはバイナリであるため、それらを正しく表示できません
はい、リレーログを表示できます。それらは通常のバイナリログと同じ構造を持っているので、 mysqlbinlog プログラム。たとえば、最後のログなど、リレーログのいずれか内でSQLを表示するには、これを行います。
mysqlbinlog mysqld-relay-bin.000056 > /root/SQLForCurrentRelayLog.txt
less /root/SQLForCurrentRelayLog.txt
他のヒント
Relay_Master_Log_File
実際、マスターのビンログの名前は、奴隷で実行された最後のSQLステートメントを含むマスターの名前です。奴隷のリレーログの名前ではありません。見る: http://dev.mysql.com/doc/refman/5.5/en/show-slave-status.html
Exec_Master_Log_Pos
スレーブSQLスレッドが実行したleray_master_log_fileの位置です。あなたの例では、スレーブDBはBinlogまですべての声明を実行しました mysql-bin.000001
マスターDBのPOS 10726644。
until_log_pos
奴隷を構文で起動する場合にのみ実際に使用されます START SLAVE UNTIL master_log_pos = $integer
. 。その構文はその位置まで複製します(それは exec_master_log_pos
)そして停止します。通常、特定のポイントに再現したい場合にのみこれを行いますが、それ以上はありません(次のステートメントが偶発的なテーブルドロップなどである場合など)。の値 until_log_pos
指定されていない場合は0なので、あなたの場合、複製が前進し続けることを意味します。