9.4.3 使用 mysqldump 转储分隔文本格式的数据
本节描述了如何使用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
文件已经存在。
服务器将dump的表格的创建定义发送到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
通常,人们会同时使用多个数据格式选项。例如,要以逗号分隔的值(CSV)格式导出表格,并且每行以回车符/换行符对(\r\n
)结束,您可以使用以下命令:
$> mysqldump --tab=/tmp --fields-terminated-by=,
--fields-enclosed-by='"' --lines-terminated-by=0x0d0a db1
如果您在导出数据时使用了任何数据格式选项,那么当您稍后重新加载数据文件时,必须指定相同的格式,以确保正确解释文件内容。