預設我們MySQL5.6線上環境都是
官方文檔上對 sync_master_info 描述如下:
預設為10000。設定為1表示每個EVENT都要執行刷盤操作(注意不是每個事務!),為0表示有作業系統來決定何時刷盤。
對于 master_info_repository = TABLE 情況下,If the value of sync_master_info is greater than 0, the slave updates its master info repository table after every sync_master_info events. If it is 0, the table is never updated.
我們可以做個小實驗
搭建一套傳統複制的主從環境。
然後,在主庫插入一條記錄。再到從庫去檢視 select * from mysql.slave_master_info \G 結果中的Master_log_pos字段值。并執行show slave status \G 檢視Exec_Master_Log_Pos值。
可以重複操作幾次資料插入,可以發現和mysql.slave_master_info裡面是一緻的。
然後,在主庫插入一條記錄。再到從庫去檢視 select from mysql.slave_master_info \G 結果中的Master_log_pos字段值。并執行show slave status \G 檢視Exec_Master_Log_Pos值。
可以重複操作幾次資料插入,可以發現show slave status \G 和mysql.slave_master_info裡面對不上了。
show slave status \G 展示的是基本實時的exec_master_log_pos資料。但是 select from mysql.slave_master_info \G 裡面卻遲遲不更新。 這就是sync_master_info參數的功效。
如果set global sync_master_info=1的話,理論上複制會更安全,但是這樣的話執行每個event都要去update一次 mysql.slave_master_info,就增大了磁盤IO,是以我們一般在從庫也啟用binlog,這樣即便複制出問題了,根據從庫記錄下的最後的binlog資訊可以重新change master到主庫上。
本文轉自 lirulei90 51CTO部落格,原文連結:http://blog.51cto.com/lee90/2045847,如需轉載請自行聯系原作者