關閉複製來源伺服器並稍後重新啟動是安全的。當副本失去與來源的連線時,副本會嘗試立即重新連線,如果失敗,則會定期重試。預設為每 60 秒重試一次。可以使用 CHANGE REPLICATION SOURCE TO
陳述式變更此設定。副本也能夠處理網路連線中斷的問題。但是,副本只有在 replica_net_timeout
秒內沒有收到來自來源的資料後,才會注意到網路中斷。如果您的中斷時間很短,您可能想要降低 replica_net_timeout
的值。請參閱 第 19.4.2 節,「處理副本的意外停止」。
來源端的不正常關機(例如當機),可能會導致來源端的二進制日誌的最終位置小於副本讀取的最新位置,這是因為來源端的二進制日誌檔案未被刷新。這可能會導致來源端重新啟動時,副本無法進行複製。在來源伺服器的 my.cnf
檔案中設定 sync_binlog=1
有助於將這個問題最小化,因為這會導致來源端更頻繁地刷新其二進制日誌。為了在使用 InnoDB
進行交易的複製設定中獲得最大的耐用性和一致性,您也應該設定 innodb_flush_log_at_trx_commit=1
。透過此設定,InnoDB
重做日誌緩衝區的內容會在每次交易提交時寫入日誌檔案,並且該日誌檔案會刷新到磁碟。請注意,即使有此設定,交易的耐用性仍然無法保證,因為作業系統或磁碟硬體可能會告知 mysqld 刷新到磁碟的操作已發生,即使它實際上尚未發生。
正常關閉副本是安全的,因為它會追蹤它停止的位置。但是,請小心副本沒有開啟臨時表;請參閱第 19.5.1.31 節, 「複製與臨時表」。不正常的關機可能會產生問題,特別是在問題發生之前磁碟快取未刷新到磁碟的情況下。
對於交易,副本會先提交,然後更新
relay-log.info
。如果在這兩個操作之間發生意外退出,中繼日誌處理將會比資訊檔案指示的更進一步,並且副本在重新啟動後,會重新執行中繼日誌中最後一筆交易的事件。如果副本更新了
relay-log.info
,但伺服器主機在寫入刷新到磁碟之前當機,也可能會發生類似的問題。為了盡可能減少此情況發生的機會,請在副本的my.cnf
檔案中設定sync_relay_log_info=1
。將sync_relay_log_info
設定為 0 會導致沒有寫入被強制刷新到磁碟,並且伺服器會依賴作業系統不時刷新檔案。
如果您有良好的不斷電供應系統,您系統對於這些類型問題的容錯能力將會大大提高。