mysql 主從複製引數slave_net_timeout
阿新 • • 發佈:2018-12-30
slave_net_timeout
slave_net_timeout表示slave在slave_net_timeout時間之內沒有收到master的任何資料(包括binlog,heartbeat),slave認為連線斷開,會進行重連。
超時後,立刻重連,後續重連的時間間隔由 CHANGE MASTER TO 命令的MASTER_CONNECT_RETRY 引數指定。
重連次數上限由--master-retry-count 命令列引數指定. 預設值3600s.
檢視和修改
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上做如下操作:
- 設定slave_net_timeout為6000
- 執行stop slave停止複製
- 使用change master to 將heartbeat修改為180s,connect_retry修改為50s
sql change master to MASTER_CONNECT_RETRY=50,MASTER_HEARTBEAT_PERIOD=180;
- 執行start slave開啟複製
在slave上使用show processlist,確認I/O執行緒,SQl執行緒已經啟動成功。
在master上同樣使用show processlist,確認Binlog Dump程序已啟動成功。
接著,在master上做如下操作:
清除iptables所有規則,排除干擾
iptables -F
設定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沒有對應關係。
這是個奇怪的問題。