本節說明如何使用 mysqldump 建立 SQL 格式的傾印檔案。如需重新載入此類傾印檔案的資訊,請參閱第 9.4.2 節「重新載入 SQL 格式備份」。
預設情況下,mysqldump 會將資訊以 SQL 陳述式的形式寫入標準輸出。您可以將輸出儲存到檔案中。
$> mysqldump [arguments] > file_name
若要傾印所有資料庫,請使用 --all-databases
選項來呼叫 mysqldump。
$> mysqldump --all-databases > dump.sql
若要僅傾印特定資料庫,請在命令列上命名它們,並使用 --databases
選項。
$> mysqldump --databases db1 db2 db3 > dump.sql
--databases
選項會使命令列上的所有名稱都被視為資料庫名稱。若沒有此選項,mysqldump 會將第一個名稱視為資料庫名稱,而將後續名稱視為表格名稱。
使用 --all-databases
或 --databases
,mysqldump 會在每個資料庫的傾印輸出之前寫入 CREATE DATABASE
與 USE
陳述式。這可確保在重新載入傾印檔案時,如果每個資料庫不存在,則會建立每個資料庫,並將其設定為預設資料庫,以便將資料庫內容載入到與來源相同的資料庫中。如果您希望傾印檔案在重新建立每個資料庫之前強制捨棄每個資料庫,也請使用 --add-drop-database
選項。在這種情況下,mysqldump 會在每個 CREATE DATABASE
陳述式之前寫入 DROP DATABASE
陳述式。
若要傾印單一資料庫,請在命令列上命名它。
$> mysqldump --databases test > dump.sql
在單一資料庫的情況下,允許省略 --databases
選項。
$> mysqldump test > dump.sql
前述兩個命令之間的差異在於,若沒有 --databases
,則傾印輸出不包含 CREATE DATABASE
或 USE
陳述式。這有幾個含義。
當您重新載入傾印檔案時,您必須指定預設資料庫名稱,讓伺服器知道要重新載入哪個資料庫。
為了重新載入,您可以指定與原始名稱不同的資料庫名稱,這可讓您將資料重新載入到不同的資料庫中。
如果要重新載入的資料庫不存在,您必須先建立它。
由於輸出不包含
CREATE DATABASE
陳述式,因此--add-drop-database
選項沒有任何作用。如果您使用它,則不會產生DROP DATABASE
陳述式。
若要僅傾印資料庫中的特定表格,請在資料庫名稱之後的命令列上命名它們。
$> mysqldump test t1 t3 t7 > dump.sql
預設情況下,如果您在建立傾印檔案的伺服器上使用 GTID (gtid_mode=ON
),mysqldump 會在輸出中包含 SET @@GLOBAL.gtid_purged
陳述式,以將來源伺服器上 gtid_executed
集合中的 GTID 新增到目標伺服器上的 gtid_purged
集合。如果您僅傾印特定資料庫或表格,請務必注意,mysqldump 所包含的值包含來源伺服器上 gtid_executed
集合中所有交易的 GTID,即使是那些變更了資料庫中被抑制的部分,或是伺服器上未包含在部分傾印中的其他資料庫。如果您僅在目標伺服器上重播一個部分傾印檔案,則額外的 GTID 不會對該伺服器的未來操作造成任何問題。但是,如果您在目標伺服器上重播第二個包含相同 GTID 的傾印檔案(例如,來自同一個來源伺服器的另一個部分傾印),則第二個傾印檔案中的任何 SET @@GLOBAL.gtid_purged
陳述式都會失敗。為避免此問題,請將 mysqldump 選項 --set-gtid-purged
設定為 OFF
或 COMMENTED
,以輸出第二個沒有作用中的 SET @@GLOBAL.gtid_purged
陳述式的傾印檔案,或在重播傾印檔案之前手動移除該陳述式。