查看mySQL延遲的方法:
查看Seconds_Behind_Master
1.在從伺服器mysql上執行
show slave stats\G;
1. 0:表示主從復制良好
2.NULL表示io_thread或sql_thread有一個發生故障,就是說該線程的Running狀態時No,而非Yes
3.正值表示主從已出現延時,數字越大表示從庫落後主庫越多
詳細可以參考
https://f.dataguru.cn/thread-461916-1-1.html
https://ningg.top/inside-mysql-master-slave-delay/
mysql主從原理
Master上 1 個IO線程,負責向Slave傳輸binary log(binlog)
Slave上 2 個線程:IO 線程和執行SQL的線程,其中:
IO線程:將獲取的日志信息,追加到relay log上;
執行SQL的線程:檢測到relay log中內容有更新,則在Slave上執行sql;
mysql常見錯誤:
1.主從無法同步
解決方法:show slave status\G;
查看狀態下面2個值是否為yes
Slave_IO_Running
Slave_IO_Running
查看下面2個值得為之是否與master伺服器一致
Master_Log_File
Master_Log_File
如果:Slave_SQL_Running 值為 NO,或 Seconds_Bebind_Master 值為 Null
1. 程式有可能在 slave 上進行瞭寫操作
2. 也有可能是 slave 機器重啟後,事務回滾造成的
解決方法一:
msyql> stop slave;
msyql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
msyql> start slave;
解決方法二:
stop slave –停止同步
到master機器:show master status\G; 查看偏移量
到slave伺服器重新做手動同步;
master_host='192.168.142.128',master_user='repl',master_password='repl',master_log_file='AAA.000001',master_log_pos=120;
SLAVE在宕機,或者非法關機,例如電源故障、主板燒瞭等,造成中繼日志損壞,同步停掉。
【錯誤日志】
從庫日志:SHOW SLAVE STATUS \G;
Slave_IO_Running: Yes
Slave_SQL_Running: No
Last_Errno: 1593
Last_Error: Error initializing relay log position: I/Oerror reading event at position 4
【解決方案】
在主庫上找到同步的binlog和POS點,然後重新做同步,這樣就可以有新的中繼日志瞭。
mysql> CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000010',MASTER_LOG_POS=821;