我有一个主从复制设置,它看起来运行良好。下面是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
? 为什么即使复制已完成且同步,它们仍会出现?这些文件是二进制格式是真的吗,因此我无法查看它们?
从
SHOW SLAVE STATUS\G
,得到两个值Relay_Log_File
:当前中继日志在复制期间接受新条目Relay_Log_Pos
:当前中继日志的当前位置,在复制期间接受新条目Relay_Master_Log_File
:中继日志文件,包含在从站上执行的在主站上最后成功执行的 SQL 语句。是的,您可以查看中继日志。由于它们与常规二进制日志具有相同的结构,因此只需运行mysqlbinlog程序。例如,要查看任何中继日志(例如最后一个)中的 SQL,请执行以下操作:
Relay_Master_Log_File
实际上是 master 上的 binlog 名称,其中包含在 slave 上成功执行的最后一条 SQL 语句。它不是从站上的中继日志的名称。见:http ://dev.mysql.com/doc/refman/5.5/en/show-slave-status.htmlExec_Master_Log_Pos
是从 SQL 线程执行到的 relay_master_log_file 中的位置。因此,在您的示例中,从属数据库已执行所有语句,直到mysql-bin.000001
主数据库上的 binlog pos 10726644 为止。until_log_pos
仅当您使用语法启动您的奴隶时才使用START SLAVE UNTIL master_log_pos = $integer
。该语法将复制到该位置(它将是exec_master_log_pos
)然后停止。如果您想复制到特定点,通常只会执行此操作,但不会再执行此操作(例如,如果下一条语句是意外的 table drop 或其他内容)。未指定时的值为until_log_pos
0,因此在您的情况下意味着复制将继续前进。