如何获取已断开连接的 mysql 从属设备的日志位置?

如何获取已断开连接的 mysql 从属设备的日志位置?

我们有一个系统,我们的商务人员在出差时会携带笔记本电脑。它们都是 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。

相关内容