本节描述如何使用 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,然后将它们写入 .sql
文件中。因此,这些文件由执行 mysqldump 的用户拥有。
最好将 --tab
选项仅用于转储本地服务器。如果您使用它与远程服务器,则 --tab
目录必须在本地和远程主机上都存在,.txt
文件将由服务器在远程目录中写入(在服务器主机上),而 .sql
文件将由 mysqldump 在本地目录中写入(在客户端主机上)。
对于 mysqldump --tab,服务器默认将表数据写入 .txt
文件,每行对应一行表数据,使用制表符分隔列值,不使用引号括起列值,并使用换行符作为行终止符。(这些是 SELECT ... INTO OUTFILE
的默认值。)
要使数据文件使用不同的格式写入,mysqldump 支持以下选项:
-
分隔列值的字符串(默认:制表符)。
-
括起列值的字符(默认:无字符)。
-
--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
如果您使用任何数据格式化选项来 덤프表数据,那么在以后重新加载数据文件时,需要指定相同的格式,以确保正确地解释文件内容。