我们有一个系统,我们的商务人员在出差时会携带笔记本电脑。它们都是 mysql 从属服务器,他们每隔一天插入一次以同步它们,但有时一个人可能几天都不会同步。我们过去只是删除超过 X 天的 bin 日志,但当销售人员在长途旅行并试图在阈值之后同步时,我们遇到了问题。我们需要使用脚本自动执行该过程,一旦确定已将 bin 日志应用于所有从属服务器,就会删除主服务器上的 bin 日志。脚本运行时,从属服务器可能会断开连接。
我如何知道我的拓扑中最不同步的从属的 Exec_Master_Log_Pos 是什么?或者它的 Master_Log_File。如果我知道这些值,我就可以毫无问题地清除二进制日志。
答案1
MySQL Utilities 1.6.2 (Beta) 有 mysqlrplcheck 实用程序,当与--show-slave-status
选项一起使用时,它将为您提供从服务器的状态,即使从服务器的复制线程已停止。
% mysqlrplcheck --master=root:[email protected]:21891 --slave=root:[email protected]:21892 -v -s
WARNING: Using a password on the command line interface can be insecure.
# master on 127.0.0.1: ... connected.
# slave on 127.0.0.1: ... connected.
Test Description Status
---------------------------------------------------------------------------
Checking for binary logging on master [pass]
Are there binlog exceptions? [pass]
Replication user exists? [pass]
Checking server_id values [pass]
master id = 1
slave id = 101
Checking server_uuid values [pass]
master uuid = 00021891-1111-1111-1111-111111111111
slave uuid = 00021892-2222-2222-2222-222222222222
Is slave connected to master? [WARN]
Check master information file [FAIL]
Slave is stopped.
Checking InnoDB compatibility [pass]
Checking storage engines compatibility [pass]
Checking lower_case_table_names settings [pass]
Master lower_case_table_names: 0
Slave lower_case_table_names: 0
Checking slave delay (seconds behind master) [FAIL]
Slave is stopped.
#
# Slave status:
#
Slave_IO_State :
Master_Host : 127.0.0.1
Master_User : rsandbox
Master_Port : 21891
Connect_Retry : 60
Master_Log_File : mysql-bin.000001
Read_Master_Log_Pos : 151
Relay_Log_File : mysql-relay.000003
Relay_Log_Pos : 314
Relay_Master_Log_File : mysql-bin.000001
Slave_IO_Running : No
Slave_SQL_Running : No
Replicate_Do_DB :
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 : 151
Relay_Log_Space : 724
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 : None
Master_SSL_Verify_Server_Cert : No
Last_IO_Errno : 0
Last_IO_Error :
Last_SQL_Errno : 0
Last_SQL_Error :
Replicate_Ignore_Server_Ids :
Master_Server_Id : 1
Master_UUID : 00021891-1111-1111-1111-111111111111
Master_Info_File : mysql.slave_master_info
SQL_Delay : 0
SQL_Remaining_Delay : None
Slave_SQL_Running_State :
Master_Retry_Count : 86400
Master_Bind :
Last_IO_Error_Timestamp :
Last_SQL_Error_Timestamp :
Master_SSL_Crl :
Master_SSL_Crlpath :
Retrieved_Gtid_Set :
Executed_Gtid_Set :
Auto_Position : 0
# ...done.
但是,如果从服务器关闭,这种方法就行不通了,而您的情况确实如此。主节点不存储从属复制信息,但您可以自动执行某些操作,让您的业务人员“点击”链接来执行此脚本并将信息存储在数据库或文件中,然后您可以检索此信息以决定清除哪个 binlog。