MySQL的同步,分为异步copy跟半同步copy。半同步copy,则是需要slave确认接收到了binlog。因为需要等待slave的确认,所以半同步copy对主MySQL来说会慢一些,但是保证了数据到达slave节点,只是还不需要slave执行完这个binlog。当同步出现问题时,查slave状态会出现Slave_IO_Running或Slave_SQL_Running为No。
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 175.11.58.54
Master_User: rpluser
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 121875594
Relay_Log_File: saoss2-relay-bin.000002
Relay_Log_Pos: 17160
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: 121875594
Relay_Log_Space: 17368
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:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 2
Master_UUID: ec719be8-d425-11ed-9fe7-44a1913ae60e
Master_Info_File: /opt/mysql/data/master.info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
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
Replicate_Rewrite_DB:
Channel_Name:
Master_TLS_Version:
1 row in set (0.00 sec)
mysql> show master status\G
*************************** 1. row ***************************
File: mysql-bin.000007 //自己节点的
Position: 63054
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec)
如果是Slave_IO_Running:no,肯定是因为log文件或者pos位置跟主服务器不对应导致的;
解决办法:
修改从服务器与主服务器一致即可,每次主服务器的sql操作都会影响pos位置,主从服务器的pos同时改变;
需要执行如下操作,其中master_log_file和master_log_pos为175.11.58.54节点上执行show master status\G查到的信息;执行后show slave status查看同步状态
mysql> stop slave;
mysql> change master to master_host='175.11.58.54',master_user='rpluser',master_password="xxxxxx",master_log_file="mysql-bin.000001",master_log_pos=121858754;
mysql> start slave;
报如上错误的场景有 mysql主主同步过程中,会有备机出现异常,机器故障,导致同步失败,机器重启之后,查看mysql同步状态报如下错误:Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Client requested master to start replication from position > file size'”
如果一直是Slave_IO_Running:Connetcting,那么肯定有Last_IO_Errno: 1045,Last_IO_Error: error connecting to master XXX
可能的原因 | 说明 |
网络不通 | 查看master和slave是否在统一网络段里面 |
检查ip | 指的是master容器内部的ip地址不是宿主机ip地址 |
端口 | 指的是master容器mysql宝楼的端口 |
密码不对 | 指的是master容器内部,mysql创建数据同步的用户的密码 |
file | 指的是文件名是否正确 |
Position | 检查Master的 Position对不对 |
如果是Slave_SQL_Running: No, 可能是slave机器重起后,事务回滚造成的.
一般是事务回滚造成的解决办法:
mysql> stop slave ;
mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
mysql> start slave