tl;dr:复制在特定的二进制日志和位置上停止,我不知道为什么
我有一个 MySQL 5.5 的 MySQL 复制设置。
这种复制设置没有落后的历史,并且一直很稳定。
今天早上,我注意到奴隶比主人晚了 17 个小时。
做更多的研究,它看起来是 SQL_Thread 的一个问题。
当前的主日志文件,根据从属(通过SLAVE STATUS
),是mysql-bin.001306
@position 20520499
。这与MASTER STATUS
master 的输出一致。
但是,SLAVE STATUS
表明Relay_Master_Log_File
是当前mysql-bin.001302
具有Exec_Master_Log_Pos
的36573336
。今天早上我一直在监视它们时,Relay_Master_Log_File
nor根本没有进步。Exec_Master_Log_Pos
查看 master 上的 binlogs,这是位于以下位置的语句mysql-bin.001302@3657336
:
# at 36573053
#170221 14:33:48 server id 1 end_log_pos 36573130 Query thread_id=96205677 exec_time=0 error_code=0
SET TIMESTAMP=1487716428/*!*/;
BEGIN
/*!*/;
# at 36573130
# at 36573213
#170221 14:33:48 server id 1 end_log_pos 36573213 Table_map: `database-name`.`table-name` mapped to number 5873
#170221 14:33:48 server id 1 end_log_pos 36573309 Write_rows: table id 5873 flags: STMT_END_F
### INSERT INTO `database-name`.`table-name`
### SET
### @1='xxxxxxxx'
### @2=6920826
### @3='xxxxxxxx'
### @4='GET'
### @5='address'
### @6=2017-02-21 14:40:24
### @7=2017-02-21 14:40:24
# at 36573309
#170221 14:33:48 server id 1 end_log_pos 36573336 Xid = 1668637037
COMMIT/*!*/;
# at 36573336
大约在昨天的这个时候,我确实执行了一些大型查询以将数据迁移到新表。这个过程看起来有点像这样;
mysql> insert into tmp_table ( select <rows> from origin table ); -- 44 million rows
mysql> insert into dest_table ( select * from tmp_table ); -- 44 million rows
有问题的两个表上没有主键或唯一键,我读过这可能是个问题。然而,虽然上面 binlog 条目中显示的数据库 + 表是此处的目标表——显示的插入记录不是在迁移期间生成的。
如果你已经走到这一步,你应该得到互联网积分。
在这一点上,我不确定还需要考虑什么,或者在哪里寻找日志停止的原因。任何见解都值得赞赏。
谢谢。
作为参考,这是截至本文发布时的MASTER STATUS
和输出:SLAVE STATUS
主状态
mysql> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.001306 | 20520499 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
从属状态
mysql> show slave status \G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: master-host
Master_User: replication-user
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.001306
Read_Master_Log_Pos: 20520499
Relay_Log_File: relay-bin.002601
Relay_Log_Pos: 36573482
Relay_Master_Log_File: mysql-bin.001302
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
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: 36573336
Relay_Log_Space: 3565987462
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: 63435
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
1 row in set (0.00 sec)