文件首頁
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


7.6.7.3 複製遠端資料

clone 外掛程式支援下列複製遠端資料的語法;也就是說,從遠端 MySQL 伺服器執行個體(捐贈者)複製資料,並將其傳輸到啟動複製操作的 MySQL 執行個體(接收者)。

CLONE INSTANCE FROM 'user'@'host':port
IDENTIFIED BY 'password'
[DATA DIRECTORY [=] 'clone_dir']
[REQUIRE [NO] SSL];

其中

  • user 是捐贈者 MySQL 伺服器執行個體上的複製使用者。

  • passworduser 密碼。

  • host 是捐贈者 MySQL 伺服器執行個體的 hostname 位址。不支援網際網路協定版本 6 (IPv6) 位址格式。可以使用 IPv6 位址的別名來代替。IPv4 位址可以照常使用。

  • port 是捐贈者 MySQL 伺服器執行個體的 port 號碼。(不支援由 mysqlx_port 指定的 X Protocol 通訊埠。也不支援透過 MySQL Router 連線到捐贈者 MySQL 伺服器執行個體。)

  • DATA DIRECTORY [=] 'clone_dir' 是一個選擇性子句,用於指定接收者上要複製資料的目錄。如果您不想從接收者資料目錄中移除現有的使用者建立資料(結構描述、表格、表空間)和二進位日誌,請使用此選項。需要絕對路徑,且目錄不得存在。MySQL 伺服器必須具有建立目錄的必要寫入權限。

    當未使用選用的 DATA DIRECTORY [=] 'clone_dir' 子句時,複製操作會從接收者資料目錄中移除使用者建立的資料(結構描述、表格、表空間)和二進位日誌,將新資料複製到接收者資料目錄,並在之後自動重新啟動伺服器。

  • [REQUIRE [NO] SSL] 明確指定在透過網路傳輸複製資料時是否使用加密連線。如果無法滿足明確的規格,則會傳回錯誤。如果未指定 SSL 子句,複製預設會嘗試建立加密連線,如果安全連線嘗試失敗,則會回復為不安全的連線。無論是否指定此子句,複製加密資料時都需要安全連線。如需更多資訊,請參閱設定用於複製的加密連線

注意

預設情況下,位於捐贈者 MySQL 伺服器執行個體資料目錄中的使用者建立 InnoDB 表格和表空間會複製到接收者 MySQL 伺服器執行個體的資料目錄中。如果指定了 DATA DIRECTORY [=] 'clone_dir' 子句,則會複製到指定的目錄。

位於捐贈者 MySQL 伺服器執行個體資料目錄外部的使用者建立 InnoDB 表格和表空間會複製到接收者 MySQL 伺服器執行個體上的相同路徑。如果表格或表空間已存在,則會報告錯誤。

預設情況下,InnoDB 系統表空間、重做日誌和撤銷表空間會複製到捐贈者上設定的相同位置(由 innodb_data_home_dirinnodb_data_file_pathinnodb_log_group_home_dir 以及 innodb_undo_directory 分別定義)。如果指定了 DATA DIRECTORY [=] 'clone_dir' 子句,則這些表空間和日誌會複製到指定的目錄。

遠端複製的先決條件

若要執行複製操作,複製外掛程式必須在捐贈者和接收者 MySQL 伺服器實例上都處於活動狀態。有關安裝說明,請參閱第 7.6.7.1 節,「安裝複製外掛程式」

捐贈者和接收者上都需要一個 MySQL 使用者才能執行複製操作(稱為「複製使用者」)。

建立複製使用者並授予所需權限的說明包含在接下來的遠端複製範例中。

執行 CLONE INSTANCE 陳述式時,會檢查以下先決條件

  • 捐贈者和接收者必須是相同的 MySQL 伺服器系列,例如 8.4.0 和 8.4.11。若要判斷 MySQL 伺服器版本,請發出以下查詢

    mysql> SHOW VARIABLES LIKE 'version';
    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | version       | 8.4.0 |
    +---------------+-------+
  • 捐贈者和接收者 MySQL 伺服器實例必須在相同的作業系統和平台上執行。例如,如果捐贈者實例在 Linux 64 位元平台上執行,則接收者實例也必須在該平台上執行。請參閱您的作業系統文件,以了解如何判斷您的作業系統平台。

  • 接收者必須有足夠的磁碟空間來存放複製的資料。預設情況下,在複製捐贈者資料之前,接收者上會移除使用者建立的資料(結構描述、資料表、表空間)和二進位日誌,因此您只需要足夠的空間來存放捐贈者資料。如果您使用 DATA DIRECTORY 子句複製到指定的目錄,則必須有足夠的磁碟空間來存放現有的接收者資料和複製的資料。您可以透過檢查檔案系統上的資料目錄大小和任何位於資料目錄外部的表空間大小來估計您的資料大小。在估計捐贈者上的資料大小時,請記住只有 InnoDB 資料會被複製。如果您將資料儲存在其他儲存引擎中,請相應地調整您的資料大小估計。

  • InnoDB 允許在資料目錄外部建立某些表空間類型。如果捐贈者 MySQL 伺服器實例在資料目錄外部有表空間,則複製操作必須能夠存取這些表空間。您可以查詢 Information Schema FILES 資料表,以識別位於資料目錄外部的表空間。位於資料目錄外部的檔案具有指向資料目錄以外目錄的完整路徑。

    mysql> SELECT FILE_NAME FROM INFORMATION_SCHEMA.FILES;
  • 捐贈者上處於活動狀態的外掛程式(包括任何金鑰環外掛程式)也必須在接收者上處於活動狀態。您可以發出 SHOW PLUGINS 陳述式或查詢 Information Schema PLUGINS 資料表來識別處於活動狀態的外掛程式。

  • 捐贈者和接收者必須具有相同的 MySQL 伺服器字元集和定序。有關 MySQL 伺服器字元集和定序設定的資訊,請參閱第 12.15 節,「字元集設定」

  • 捐贈者和接收者上需要相同的 innodb_page_sizeinnodb_data_file_path 設定。捐贈者和接收者上的 innodb_data_file_path 設定必須指定相同數量的、大小相等的資料檔案。您可以使用 SHOW VARIABLES 語法來檢查變數設定。

    mysql> SHOW VARIABLES LIKE 'innodb_page_size';
    mysql> SHOW VARIABLES LIKE 'innodb_data_file_path';
  • 如果複製加密或頁面壓縮的資料,則捐贈者和接收者必須具有相同的檔案系統區塊大小。對於頁面壓縮的資料,接收者檔案系統必須支援稀疏檔案和空洞穿孔,以便在接收者上發生空洞穿孔。有關這些功能以及如何識別使用這些功能的資料表和表空間的資訊,請參閱第 7.6.7.5 節,「複製加密資料」第 7.6.7.6 節,「複製壓縮資料」。若要判斷您的檔案系統區塊大小,請參閱您的作業系統文件。

  • 如果您要複製加密資料,則需要安全連線。請參閱設定用於複製的加密連線

  • 接收者上的 clone_valid_donor_list 設定必須包含捐贈者 MySQL 伺服器實例的主機位址。您只能從有效捐贈者清單上的主機複製資料。具有 SYSTEM_VARIABLES_ADMIN 權限的 MySQL 使用者才能設定此變數。設定 clone_valid_donor_list 變數的說明,會在接下來的遠端複製範例中提供。您可以使用 SHOW VARIABLES 語法來檢查 clone_valid_donor_list 設定。

    mysql> SHOW VARIABLES LIKE 'clone_valid_donor_list';
  • 不得有其他複製操作正在執行。一次只允許單一複製操作。若要判斷是否有複製操作正在執行,請查詢 clone_status 資料表。請參閱使用效能結構描述複製資料表監控複製操作

  • 複製外掛程式以 1MB 的封包加上中繼資料傳輸資料。因此,捐贈者和接收者 MySQL 伺服器實例上所需的最小 max_allowed_packet 值為 2MB。max_allowed_packet 值小於 2MB 會導致錯誤。使用以下查詢來檢查您的 max_allowed_packet 設定

    mysql> SHOW VARIABLES LIKE 'max_allowed_packet';

以下先決條件也適用

  • 捐贈者上的撤銷表空間檔案名稱必須是唯一的。當資料複製到接收者時,撤銷表空間(無論它們在捐贈者上的位置為何)都會複製到接收者上的 innodb_undo_directory 位置,或複製到 DATA DIRECTORY [=] 'clone_dir' 子句指定的目錄(如果使用)。由於此原因,不允許捐贈者上有重複的撤銷表空間檔案名稱。如果在複製操作期間遇到重複的撤銷表空間檔案名稱,則會報告錯誤。

    若要檢視捐贈者上的撤銷表空間檔案名稱以確保它們是唯一的,請查詢 FILES 資料表

    mysql> SELECT TABLESPACE_NAME, FILE_NAME FROM INFORMATION_SCHEMA.FILES
           WHERE FILE_TYPE LIKE 'UNDO LOG';

    有關捨棄和新增撤銷表空間檔案的資訊,請參閱第 17.6.3.4 節,「撤銷表空間」

  • 預設情況下,資料複製後,會自動重新啟動(停止並啟動)接收者 MySQL 伺服器實例。若要自動重新啟動,接收者上必須有可用的監控程序來偵測伺服器關閉。否則,複製操作會在複製資料後停止,並顯示以下錯誤,且接收者 MySQL 伺服器實例會關閉

    ERROR 3707 (HY000): Restart server failed (mysqld is not managed by supervisor process).

    此錯誤並不表示複製失敗。這表示在複製資料後,必須手動再次啟動接收者 MySQL 伺服器實例。手動啟動伺服器後,您可以連線至接收者 MySQL 伺服器實例,並檢查效能結構描述複製資料表以驗證複製操作是否已成功完成(請參閱使用效能結構描述複製資料表監控複製操作)。RESTART 陳述式具有相同的監控程序要求。如需更多資訊,請參閱第 15.7.8.8 節,「RESTART 陳述式」。如果使用 DATA DIRECTORY 子句複製到指定的目錄,則此要求不適用,因為在這種情況下不會執行自動重新啟動。

  • 有幾個變數控制遠端複製操作的各個方面。在執行遠端複製操作之前,請檢閱變數並根據需要調整設定,以符合您的運算環境。複製變數是在執行複製操作的接收者 MySQL 伺服器實例上設定的。請參閱第 7.6.7.13 節,「複製系統變數」

複製遠端資料

以下範例示範如何複製遠端資料。預設情況下,遠端複製操作會移除接收者上的使用者建立資料(結構描述、資料表、表空間)和二進位日誌,將新資料複製到接收者資料目錄,然後重新啟動 MySQL 伺服器。

此範例假設已滿足遠端複製的先決條件。請參閱遠端複製的先決條件

  1. 使用管理員使用者帳戶登入來源 MySQL 伺服器實例。

    1. 建立具有 BACKUP_ADMIN 權限的複製使用者。

      mysql> CREATE USER 'donor_clone_user'@'example.donor.host.com' IDENTIFIED BY 'password';
      mysql> GRANT BACKUP_ADMIN on *.* to 'donor_clone_user'@'example.donor.host.com';
    2. 安裝複製外掛程式。

      mysql> INSTALL PLUGIN clone SONAME 'mysql_clone.so';
  2. 使用管理員使用者帳戶登入接收者 MySQL 伺服器實例。

    1. 建立具有 CLONE_ADMIN 權限的複製使用者。

      mysql> CREATE USER 'recipient_clone_user'@'example.recipient.host.com' IDENTIFIED BY 'password';
      mysql> GRANT CLONE_ADMIN on *.* to 'recipient_clone_user'@'example.recipient.host.com';
    2. 安裝複製外掛程式。

      mysql> INSTALL PLUGIN clone SONAME 'mysql_clone.so';
    3. 將來源 MySQL 伺服器實例的主機位址新增至 clone_valid_donor_list 變數設定。

      mysql> SET GLOBAL clone_valid_donor_list = 'example.donor.host.com:3306';
  3. 以您先前建立的複製使用者 (recipient_clone_user'@'example.recipient.host.com) 登入接收者 MySQL 伺服器實例,並執行 CLONE INSTANCE 陳述式。

    mysql> CLONE INSTANCE FROM 'donor_clone_user'@'example.donor.host.com':3306
           IDENTIFIED BY 'password';

    複製資料後,接收者上的 MySQL 伺服器實例會自動重新啟動。

    如需監控複製操作狀態和進度的資訊,請參閱第 7.6.7.10 節「監控複製操作」

複製到具名目錄

預設情況下,遠端複製操作會先從接收者資料目錄中移除使用者建立的資料(結構描述、表格、表空間)和二進位日誌,然後再從來源 MySQL 伺服器實例複製資料。透過複製到具名目錄,您可以避免從目前的接收者資料目錄中移除資料。

複製到具名目錄的程序與複製遠端資料中描述的程序相同,但有一個例外:CLONE INSTANCE 陳述式必須包含 DATA DIRECTORY 子句。例如

mysql> CLONE INSTANCE FROM 'user'@'example.donor.host.com':3306
       IDENTIFIED BY 'password'
       DATA DIRECTORY = '/path/to/clone_dir';

需要絕對路徑,且該目錄不得存在。MySQL 伺服器必須具有建立該目錄所需的寫入權限。

複製到具名目錄時,複製資料後不會自動重新啟動接收者 MySQL 伺服器實例。如果要在具名目錄中重新啟動 MySQL 伺服器,您必須手動執行。

$> mysqld_safe --datadir=/path/to/clone_dir

其中 /path/to/clone_dir 是接收者上具名目錄的路徑。

設定用於複製的加密連線

您可以為遠端複製操作設定加密連線,以保護透過網路複製的資料。複製加密資料時,預設需要加密連線。(請參閱第 7.6.7.5 節「複製加密資料」。)

以下說明如何設定接收者 MySQL 伺服器實例以使用加密連線。假設來源 MySQL 伺服器實例已設定為使用加密連線。如果不是,請參閱第 8.3.1 節「設定 MySQL 以使用加密連線」,以取得伺服器端設定指示。

若要設定接收者 MySQL 伺服器實例以使用加密連線

  1. 讓接收者主機可取得來源 MySQL 伺服器實例的用戶端憑證和金鑰檔案。使用安全通道將檔案分發到接收者主機,或將它們放置在接收者主機可存取的掛載磁碟分割上。要提供的用戶端憑證和金鑰檔案包括

    • ca.pem

      自簽署憑證授權單位 (CA) 檔案。

    • client-cert.pem

      用戶端公開金鑰憑證檔案。

    • client-key.pem

      用戶端私密金鑰檔案。

  2. 在接收者 MySQL 伺服器實例上設定下列 SSL 選項。

    • clone_ssl_ca

      指定自簽署憑證授權單位 (CA) 檔案的路徑。

    • clone_ssl_cert

      指定用戶端公開金鑰憑證檔案的路徑。

    • clone_ssl_key

      指定用戶端私密金鑰檔案的路徑。

    例如

    clone_ssl_ca=/path/to/ca.pem
    clone_ssl_cert=/path/to/client-cert.pem
    clone_ssl_key=/path/to/client-key.pem
  3. 若要要求使用加密連線,在接收者上發出 CLONE 陳述式時,請包含 REQUIRE SSL 子句。

    mysql> CLONE INSTANCE FROM 'user'@'example.donor.host.com':3306
           IDENTIFIED BY 'password'
           DATA DIRECTORY = '/path/to/clone_dir'
           REQUIRE SSL;

    如果未指定 SSL 子句,則複製外掛程式預設會嘗試建立加密連線,如果加密連線嘗試失敗,則會回復為未加密連線。

    注意

    如果您要複製加密資料,則預設需要加密連線,無論是否指定 REQUIRE SSL 子句。如果您嘗試複製加密資料,使用 REQUIRE NO SSL 會導致錯誤。