文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 參考手冊  /  ...  /  移動或複製 InnoDB 表格

17.6.1.4 移動或複製 InnoDB 表格

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

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

[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 Enterprise 訂閱中。

關於 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。僅在匯入整個資料表或資料表片段後才執行提交。