マスター/スレーブレプリケーションのセットアップを行っていますが、正常に動作しているようです。以下は、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
とどう違うのですか?
viz。、Read_Master_Log_Pos
およびRelay_Log_Pos
の両方の値は何ですか?レプリケーションが完了して同期しているのに、なぜ表示されるのですか?
これらのファイルがバイナリ形式であるため、表示できないのは本当ですか?
さらに理解したいのは、Relay_Log_File、Relay_Log_Pos、Relay_Master_Log_Fileです。
SHOW SLAVE STATUS\G
、2つの値を取得
Relay_Log_File
:レプリケーション中に新しいエントリを受け入れる現在のリレーログRelay_Log_Pos
:レプリケーション中に新しいエントリを受け入れる現在のリレーログの現在の位置Relay_Master_Log_File
:スレーブで実行されたマスターで最後に正常に実行されたSQLステートメントを含むリレーログファイル。ファイルはバイナリなので、正しく表示できません
はい、リレーログを表示できます。それらは通常のバイナリログと同じ構造を持っているので、 mysqlbinlog プログラムを実行するだけです。たとえば、最後のログなど、リレーログ内のSQLを表示するには、次のようにします。
mysqlbinlog mysqld-relay-bin.000056 > /root/SQLForCurrentRelayLog.txt
less /root/SQLForCurrentRelayLog.txt
Relay_Master_Log_File
は、実際にはスレーブで正常に実行された最後のSQLステートメントを含むマスター上のbinlogの名前です。スレーブのリレーログの名前ではありません。参照: http://dev.mysql.com/doc/refman/5.5/en/show-slave-status.html
Exec_Master_Log_Pos
は、スレーブSQLスレッドが実行したリレー_master_log_file内の位置です。したがって、あなたの例では、スレーブdbはマスターdbでbinlog mysql-bin.000001
pos 10726644までのすべてのステートメントを実行しました。
until_log_pos
は、スレーブをSTART SLAVE UNTIL master_log_pos = $integer
の構文で開始する場合にのみ実際に使用されます。その構文はその位置まで複製され(exec_master_log_pos
になります)、停止します。これは通常、特定のポイントに複製する場合にのみ行いますが、それ以上は行いません(次のステートメントがテーブルの偶発的なドロップなどである場合)。 until_log_pos
の値が指定されていない場合は0なので、この場合、レプリケーションはそのまま続行されます。