本節說明如何使用 mysqldump 建立分隔文字匯出檔案。有關重新載入這類匯出檔案的資訊,請參閱 第 9.4.4 節「重新載入分隔文字格式的備份」。
如果您使用 mysqldump 和 --tab=
選項,它會使用 dir_name
dir_name
作為輸出目錄,並使用每個資料表的兩個檔案將資料表個別匯出到該目錄中。資料表名稱是這些檔案的基本名稱。對於名為 t1
的資料表,檔案會命名為 t1.sql
和 t1.txt
。.sql
檔案包含資料表的 CREATE TABLE
陳述式。.txt
檔案包含資料表資料,每行一個資料表列。
下列命令會將 db1
資料庫的內容匯出到 /tmp
資料庫中的檔案
$> mysqldump --tab=/tmp db1
包含資料表資料的 .txt
檔案是由伺服器寫入的,因此這些檔案的所有者是執行伺服器所使用的系統帳戶。伺服器使用 SELECT ... INTO OUTFILE
寫入檔案,因此您必須具有 FILE
權限才能執行此作業,如果給定的 .txt
檔案已存在,則會發生錯誤。
伺服器會將匯出資料表的 CREATE
定義傳送至 mysqldump,而 mysqldump 會將它們寫入 .sql
檔案。因此,這些檔案的所有者是執行 mysqldump 的使用者。
最好 --tab
僅用於匯出本機伺服器。如果您將它與遠端伺服器搭配使用,--tab
目錄必須同時存在於本機和遠端主機上,且 .txt
檔案是由遠端目錄 (在伺服器主機上) 中的伺服器所寫入,而 .sql
檔案是由本機目錄 (在用戶端主機上) 中的 mysqldump 所寫入。
對於 mysqldump --tab,預設情況下,伺服器會將資料表資料寫入 .txt
檔案,每行一個資料列,欄值之間使用 Tab 分隔,欄值周圍沒有引號,並且使用換行符號作為行終止符號。(這些與 SELECT ... INTO OUTFILE
的預設值相同。)
若要允許使用不同的格式寫入資料檔案,mysqldump 支援這些選項
分隔欄值的字串 (預設值:Tab)。
用於括住欄值的字元 (預設值:沒有字元)。
--fields-optionally-enclosed-by=
char
用於括住非數值欄值的字元 (預設值:沒有字元)。
用於跳脫特殊字元的字元 (預設值:不跳脫)。
行終止字串 (預設值:換行)。
根據您為這些選項指定的任何值,可能需要在命令列上適當地為您的命令解譯器加上引號或跳脫值。或者,使用十六進位表示法指定值。假設您希望 mysqldump 以雙引號括住欄值。若要這麼做,請將雙引號指定為 --fields-enclosed-by
選項的值。但此字元對於命令解譯器而言通常是特殊的,必須特別處理。例如,在 Unix 上,您可以像這樣將雙引號加上引號
--fields-enclosed-by='"'
在任何平台上,您都可以用十六進位指定值
--fields-enclosed-by=0x22
通常會一起使用多個資料格式設定選項。例如,若要以逗號分隔值的格式匯出資料表,並使用歸位/換行符號對 (\r\n
) 終止行,請使用此命令 (在單行上輸入)
$> mysqldump --tab=/tmp --fields-terminated-by=,
--fields-enclosed-by='"' --lines-terminated-by=0x0d0a db1
如果您使用任何資料格式設定選項來匯出資料表資料,您需要在稍後重新載入資料檔案時指定相同的格式,以確保正確解譯檔案內容。