本节介绍如何使用 mysqldump 创建分隔文本转储文件。有关重新加载此类转储文件的信息,请参阅第 9.4.4 节,“重新加载分隔文本格式的备份”。
如果使用 --tab=
选项调用 mysqldump,它会将 目录名
目录名
用作输出目录,并使用两个文件将表分别转储到该目录中。表名是这些文件的基本名称。对于名为 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
如果您使用任何数据格式选项来转储表数据,则以后在重新加载数据文件时需要指定相同的格式,以确保正确解释文件内容。