mysql 主從復制參數slave_net_timeout


slave_net_timeout

slave_net_timeout表示slave在slave_net_timeout時間之內沒有收到master的任何數據(包括binlog,heartbeat),slave認為連接斷開,會進行重連。

超時后,立刻重連,后續重連的時間間隔由 CHANGE MASTER TO 命令的MASTER_CONNECT_RETRY 參數指定。

重連次數上限由MASTER_CONNECT_RETRY定義,默認值3600s.

可以通過change master to 設置,也可以通過--master-retry-count 命令行參數指定.

查看和修改

mysql >show variables like 'slave_net_timeout';
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| slave_net_timeout | 60    |
+-------------------+-------+
1 row in set (0.00 sec)	

將slave_net_timeout修改為6000

mysql >set global slave_net_timeout=6000;

mysql >show variables like 'slave_net_timeout'; 
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| slave_net_timeout | 6000  |
+-------------------+-------+
1 row in set (0.00 sec)

測試

一個master,一個slave,都已經正常啟動。

首先,在slave上做如下操作:

  1. 設置slave_net_timeout為6000
  2. 執行stop slave停止復制
  3. 使用change master to 將heartbeat修改為180s,connect_retry修改為50s
    change master to MASTER_CONNECT_RETRY=50,MASTER_HEARTBEAT_PERIOD=180;
    
  4. 執行start slave開啟復制

在slave上使用show processlist,確認I/O線程,SQl線程已經啟動成功。
在master上同樣使用show processlist,確認Binlog Dump進程已啟動成功。

接着,在master上做如下操作:

  1. 清除iptables所有規則,排除干擾

     iptables -F 
    
  2. 設置iptables規則,禁止發送數據到slave

    iptables -A OUTPUT -p tcp -d 192.4.222.202 -j DROP
    

    其中,192.4.222.202是slave的IP地址。這條規則的含義表示丟棄所有master發往slave的數據包,確保沒有任何數據(binlog和heartbeat)從master發送給slave。

這樣,slave應該在超過slave_net_timeout的時間后,開始重連master。
但是從slave打印的錯誤日志看,卻是在master開啟iptables后47s,就開始重連,這個值跟slave_net_timeout設置的6000s沒有對應關系。

這是個奇怪的問題。

參考

16.1.6.3 Replication Slave Options and Variables


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM