MySQL 高可用度 資料庫 開源碼

進階管理MySQL複製 半同步模式不怕資料遺失

2017-09-14
近日企業遭駭的災情頻傳,若平日資料庫沒有做好備份,那後果可想而知。對此,這裡將介紹開源碼MySQL資料庫伺服器所提供的複製功能,實地示範如何確實完成資料庫資料的備份工作。

mixed

此種格式混合上面兩種格式的記錄方式,在未設定記錄型式的情況下,MySQL伺服器預設即是使用mixed記錄型式來記錄相關日誌資訊。此種記錄格式,在一般的情況下會利用Statement記錄型式來記錄,但在特殊的情況下,則會採用Row記錄型式來記錄。

在初步了解MySQL伺服器的二進位日誌後,接著繼續說明設Bin Log(二進位日誌)所提供的組態選項,常用的組態選項說明,如表1所示。

表1 常用組態選項介紹

在了解二進位日誌之後,接下來就可設定啟用二進位日誌記錄的功能,只要在MySQL伺服器的my.cnf組態檔中設定如圖2所示的選項,即可啟用二進位日誌的功能。


▲圖2 修改my.cnf組態檔內容,啟用二進位日誌功能。

在設定完成後,必須重新啟動MySQL伺服器,此設定值方能生效。重新啟動MySQL伺服器後,可登入MySQL資料庫,隨意利用更動表格指令(例如update)。在update指令執行成功後,就會在「/usr/local/MySQL5/log/」目錄下產生相關的二進位日誌檔案,如圖3所示。


▲ 圖3 在「/usr/local/MySQL5/log/」目錄下將產生相關的二進位日誌檔案。

二進位日誌檔案中將會記錄已被更動的相關資訊(包括所執行的SQL指令),可藉由檢視該二進位日誌檔來取得相關的資訊。但因該檔案內容為二進位格式,並非為文字檔,所以無法直接讀取該檔案。此時,可利用MySQL伺服器所提供的MySQLbinlog程式來讀取二進位日誌檔,使用以下的方法就能夠讀取該二進位日誌檔的內容:


複製功能系統實作

MySQL伺服器提供了非同步複製(Asynchronous Replication)與半同步複製(Semisynchronous Replication)兩種不同複製策略的複製方法,複製方法說明如下:

非同步複製

非同步複製是MySQL伺服器最早使用,也是當前使用最廣的一種複製模式。非同步複製提供一種簡單的主-從複製方法,當主資料庫成功地執行,將SQL指令提交(Commit)給MySQL伺服器並執行後,才會將所執行的SQL指令寫入二進位日誌,並傳遞到從資料庫的中繼日誌上,也因此才稱之為非同步(Asynchronous)。之後,從資料庫才會藉由中繼日誌的內容,來取得相關主資料庫所執行過的SQL指令資訊,並藉由執行相關SQL指令的方式來同步主資料庫的資料。

在這種複製方法下,主資料庫不會去檢測其從資料庫上的同步情況。如果在從資料庫尚未同步完成主資料庫的資料情況下,而主資料庫因為某種原因而崩潰,就會遺失大量的同步資料,因而造成主資料庫及從資料庫的資料內容不一致。為了解決此類大量資料遺失的風險,在MySQL 5.5之後的版本便引進了半同步複製的方法。

半同步複製

為了解決非同步複製所衍生的資料庫同步資料遺失的問題,MySQL伺服器在非同步複製基礎上,以模組外掛的形式實作了一個同步方案,稱之為半同步複製(Semi-sync Replication)。這個模組會在非同步複製的流程中,新增了一個同步確認的流程。半同步複製提供以下兩種的確認複製的機制:

1. after_sync:主資料庫會在執行SQL指令前,將所要執行的SQL指令以二進位日誌的方式傳遞至從資料庫的中繼日誌上,並在接收到從資料庫的回覆後,確認資料庫(Slave)已收到相關的二進位日誌資訊,主資料庫才會實際提交該SQL指令至MySQL伺服器執行。MySQL 5.7以後,此為預設組態選項。

2. after_commit:此種方式是主資料庫會先將所要執行的SQL指令提交至MySQL伺服器執行後,才將相關二進位日誌資訊傳遞至從資料庫的中繼日誌,並等待從資料庫回覆是否已接收到主資料庫二進位日誌資訊的答案。

為了避免複製過程中發生大量資料遺失的風險,在本文中將採用半同步複製的方式來建立主從式的資料庫複製架構。

安裝半同步複製模組

首先,必須在主資料庫上安裝同步複製所需的外掛模組,以MySQL指令登入MySQL伺服器後,先以「use MySQL」指令選擇系統資料庫(資料庫的名稱為「MySQL」),即可以使用如圖4所示的指令來安裝所需要的外掛模組。


▲ 圖4 安裝所需要的外掛模組。

在安裝相關模組後,記得再確認一下該外掛模組是否已經正常的安裝(檢查plugin_status是否為ACTIVE)。

在主資料庫安裝rpl_semi_sync_master模組之後,使用者可執行圖5的指令來確認rpl_semi_sync_master模組是否已經啟動。


▲圖5 確認rpl_semi_sync_master模組是否已啟動。


追蹤我們Featrue us

本站使用cookie及相關技術分析來改善使用者體驗。瞭解更多

我知道了!