文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
Man Pages (TGZ) - 258.5Kb
Man Pages (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 參考手冊  /  ...  /  透過將來源或複本設為唯讀來備份

19.4.1.3 透過將來源或複本設為唯讀來備份

在複製設定中,可以透過取得全域讀取鎖定並操作 read_only 系統變數,變更要備份的伺服器的唯讀狀態,來備份來源或複本伺服器

  1. 將伺服器設為唯讀,使其僅處理擷取並封鎖更新。

  2. 執行備份。

  3. 將伺服器變回其正常的讀取/寫入狀態。

注意

本節中的說明將要備份的伺服器置於安全狀態,適用於從伺服器取得資料的備份方法,例如 mysqldump (請參閱第 6.5.4 節,「mysqldump — 資料庫備份程式」)。您不應嘗試使用這些說明透過直接複製檔案來進行二進位備份,因為伺服器可能仍有修改過的資料快取在記憶體中,尚未刷新到磁碟。

以下說明如何在來源伺服器和複本伺服器上執行此操作。對於此處討論的兩種情況,假設您有以下複製設定:

  • 來源伺服器 S1

  • 複本伺服器 R1,其來源為 S1

  • 連線至 S1 的用戶端 C1

  • 連線至 R1 的用戶端 C2

在任一種情況下,取得全域讀取鎖定和操作 read_only 變數的語句,都在要備份的伺服器上執行,不會傳播到該伺服器的任何複本。

情境 1:使用唯讀來源進行備份

透過在 S1 上執行以下語句,將來源 S1 設定為唯讀狀態:

mysql> FLUSH TABLES WITH READ LOCK;
mysql> SET GLOBAL read_only = ON;

當 S1 處於唯讀狀態時,以下屬性為真:

  • 由於伺服器處於唯讀模式,C1 發送到 S1 的更新請求會被封鎖。

  • C1 發送到 S1 的查詢結果請求會成功。

  • 在 S1 上進行備份是安全的。

  • 在 R1 上進行備份是不安全的。此伺服器仍在執行,並且可能正在處理來自用戶端 C2 的二進位日誌或更新請求。

當 S1 處於唯讀狀態時,執行備份。例如,您可以使用 mysqldump

在 S1 上的備份操作完成後,執行以下語句,將 S1 還原到正常運作狀態:

mysql> SET GLOBAL read_only = OFF;
mysql> UNLOCK TABLES;

雖然在 S1 上執行備份是安全的(就備份而言),但由於 S1 的用戶端被阻止執行更新,因此這並不是最佳的效能方法。

此策略適用於備份複製設定中的來源,但也可以用於非複製設定中的單一伺服器。

情境 2:使用唯讀複本進行備份

透過在 R1 上執行以下語句,將複本 R1 設定為唯讀狀態:

mysql> FLUSH TABLES WITH READ LOCK;
mysql> SET GLOBAL read_only = ON;

當 R1 處於唯讀狀態時,以下屬性為真:

  • 來源 S1 繼續運作,因此在來源上進行備份是不安全的。

  • 複本 R1 已停止,因此在複本 R1 上進行備份是安全的。

這些屬性為一種常見的備份情境提供了基礎:讓一個複本忙於執行備份一段時間並不是問題,因為它不會影響整個網路,而且系統在備份期間仍在執行。特別是,用戶端仍然可以在來源伺服器上執行更新,這不會受到複本上的備份活動影響。

當 R1 處於唯讀狀態時,執行備份。例如,您可以使用 mysqldump

在 R1 上的備份操作完成後,執行以下語句,將 R1 還原到正常運作狀態:

mysql> SET GLOBAL read_only = OFF;
mysql> UNLOCK TABLES;

在複本恢復正常運作後,它會透過趕上來源二進位日誌中的任何未完成更新,再次與來源同步。