文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 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 參考手冊  /  ...  /  移動或複製 InnoDB 資料表

17.6.1.4 移動或複製 InnoDB 資料表

本節說明將部分或所有 InnoDB 資料表移動或複製到不同伺服器或執行個體的技術。例如,您可能會將整個 MySQL 執行個體移動到較大、更快的伺服器;您可能會將整個 MySQL 執行個體複製到新的複本伺服器;您可能會將個別資料表複製到另一個執行個體以開發和測試應用程式,或複製到資料倉儲伺服器以產生報告。

在 Windows 上,InnoDB 一律在內部以小寫儲存資料庫和資料表名稱。若要以二進位格式將資料庫從 Unix 移動到 Windows 或從 Windows 移動到 Unix,請使用小寫名稱建立所有資料庫和資料表。完成此動作的便利方法是在建立任何資料庫或資料表之前,將下列行新增至 [mysqld] 區段的 my.cnfmy.ini 檔案

[mysqld]
lower_case_table_names=1
注意

禁止使用與伺服器初始化時所使用的設定不同的 lower_case_table_names 設定來啟動伺服器。

移動或複製 InnoDB 資料表的技術包括

匯入資料表

使用可傳輸表空間功能,可以從另一個 MySQL 伺服器執行個體或從備份匯入駐留在每個資料表表空間中的資料表。請參閱第 17.6.1.3 節「匯入 InnoDB 資料表」

MySQL Enterprise Backup

MySQL Enterprise Backup 產品可讓您備份正在執行的 MySQL 資料庫,並將對操作的干擾降至最低,同時產生資料庫的一致快照。當 MySQL Enterprise Backup 複製資料表時,讀取和寫入可以繼續進行。此外,MySQL Enterprise Backup 可以建立壓縮備份檔案,並備份資料表的子集。結合 MySQL 二進位記錄,您可以執行時間點復原。MySQL Enterprise Backup 包含在 MySQL 企業訂閱中。

關於 MySQL Enterprise Backup 的更多詳細資訊,請參閱第 32.1 節「MySQL Enterprise Backup 概觀」

複製資料檔案 (冷備份方法)

您可以透過複製第 17.18.1 節「InnoDB 備份」中「冷備份」下方列出的所有相關檔案,來簡單地移動 InnoDB 資料庫。

InnoDB 資料和日誌檔在具有相同浮點數格式的所有平台上都是二進位相容的。如果浮點數格式不同,但您在資料表中未使用 FLOATDOUBLE 資料類型,則程序相同:只需複製相關檔案即可。

當您移動或複製每個資料表的 .ibd 檔案時,來源和目標系統上的資料庫目錄名稱必須相同。InnoDB 共用表格空間中儲存的資料表定義包含資料庫名稱。表格空間檔案中儲存的交易 ID 和日誌序號在不同的資料庫之間也不同。

若要將 .ibd 檔案和相關的資料表從一個資料庫移動到另一個資料庫,請使用 RENAME TABLE 陳述式。

RENAME TABLE db1.tbl_name TO db2.tbl_name;

如果您有 乾淨.ibd 檔案備份,您可以按照以下方式將其還原到其來源的 MySQL 安裝

  1. 自從您複製 .ibd 檔案以來,資料表不得被刪除或截斷,因為這樣做會變更儲存在表格空間內部的資料表 ID。

  2. 發出此 ALTER TABLE 陳述式以刪除目前的 .ibd 檔案

    ALTER TABLE tbl_name DISCARD TABLESPACE;
  3. 將備份 .ibd 檔案複製到正確的資料庫目錄。

  4. 發出此 ALTER TABLE 陳述式以告知 InnoDB 使用新的 .ibd 檔案用於資料表

    ALTER TABLE tbl_name IMPORT TABLESPACE;
    注意

    ALTER TABLE ... IMPORT TABLESPACE 功能不會對匯入的資料強制執行外部索引鍵條件約束。

在此情況下,乾淨.ibd 檔案備份是指滿足下列要求的備份

  • .ibd 檔案中沒有交易的未完成修改。

  • .ibd 檔案中沒有未合併的插入緩衝區項目。

  • 清除已從 .ibd 檔案中移除所有標記為刪除的索引記錄。

  • mysqld 已將 .ibd 檔案的所有修改頁面從緩衝區集區刷新到檔案。

您可以使用以下方法建立乾淨的備份 .ibd 檔案

  1. 停止 mysqld 伺服器的所有活動並提交所有交易。

  2. 等到 SHOW ENGINE INNODB STATUS 顯示資料庫中沒有活動交易,且 InnoDB 的主要執行緒狀態為 Waiting for server activity 時。然後您可以複製 .ibd 檔案。

建立 .ibd 檔案的乾淨副本的另一種方法是使用 MySQL Enterprise Backup 產品

  1. 使用 MySQL Enterprise Backup 備份 InnoDB 安裝。

  2. 在備份上啟動第二個 mysqld 伺服器,並讓它清理備份中的 .ibd 檔案。

從邏輯備份還原

您可以使用 mysqldump 之類的公用程式來執行邏輯備份,這會產生一組可以執行的 SQL 陳述式,以重現原始的資料庫物件定義和資料表資料,以便傳輸到另一個 SQL 伺服器。使用此方法,格式是否不同或您的資料表是否包含浮點數資料並不重要。

為了提高此方法的效能,請在匯入資料時停用 autocommit。僅在匯入整個資料表或資料表區段後才執行提交。