MySQL主從復制設置裝備擺設心跳功效引見。本站提示廣大學習愛好者:(MySQL主從復制設置裝備擺設心跳功效引見)文章只能為提供參考,不一定能成為您想要的結果。以下是MySQL主從復制設置裝備擺設心跳功效引見正文
在 MySQL 主從復制時,有時刻會碰著如許的毛病:在 Slave 上 Slave_IO_Running 和 Slave_SQL_Running 都是 Yes,Slave_SQL_Running_State 顯示 Slave has read all relay log; waiting for the slave I/O thread to update it ,看起來狀況都正常,但現實卻滯後於主,Master_Log_File 和 Read_Master_Log_Pos 也不是現實主上最新的地位。一種能夠是 Master 上的 binlog dump 線程掛了。但有時刻,在 Master 上檢討也是完整正常的。那 Slave 的耽擱又是怎樣形成的呢?
在 MySQL 的復制協定裡,由 Slave 發送一個 COM_BINLOG_DUMP 敕令後,就完整由 Master 來推送數據,Master、Slave 之間不再須要交互。假如 Master 沒有更新,也就不會稀有據流,Slave 就不會收就任何數據包。然則假如因為某種緣由形成 Master 沒法把數據發送到 Slave ,好比產生過收集毛病或其他緣由招致 Master 上的 TCP 銜接喪失,因為 TCP 協定的特征,Slave 沒無機會獲得告訴,所以也沒法曉得收不到數據是由於 Master 原來就沒有更新呢照樣因為出了毛病。
好在 MySQL 5.5 開端增長了一個復制心跳的功效。
如
stop slave;
change master to master_heartbeat_period = 10;
set global slave_net_timeout = 25;
start slave;
就會讓 Master 在沒稀有據的時刻,每 10 秒發送一個心跳包。如許 Slave 就可以曉得 Master 是否是還正常。slave_net_timeout 是設置在多久充公到數據後以為收集超時,以後 Slave 的 IO 線程會從新銜接 Master 。聯合這兩個設置便可以免因為收集成績招致的復制耽擱。master_heartbeat_period 單元是秒,可所以個帶上小數,如 10.5。最高精度為 1 毫秒。
slave_net_timeout 的默許是 3600,也就是一小時。也就是說,在之前的情形下,Slave 要耽擱 1 小時後才會測驗考試重連。而在沒有設置 master_heartbeat_period 時,將 slave_net_timeout 設得很短會形成 Master 沒稀有據更新時頻仍重連。
很奇異的是,以後的 master_heartbeat_period 值沒法經由過程 show slave status 檢查,而要應用 show status like ‘Slave_heartbeat_period' 檢查。另外,狀況變量 Slave_last_heartbeat 表現最初一次收到心跳的時光,Slave_received_heartbeats 表現總共收到的心跳次數。
如:
mysql> show status like 'slave%';
+----------------------------+---------------------+
| Variable_name | Value |
+----------------------------+---------------------+
| Slave_heartbeat_period | 5.000 |
| Slave_last_heartbeat | 2014-05-08 11:48:57 |
| Slave_open_temp_tables | 0 |
| Slave_received_heartbeats | 1645 |
| Slave_retried_transactions | 0 |
| Slave_running | ON |
+----------------------------+---------------------+
6 rows in set (0.00 sec)