使用mysqldump以分隔文本格式导出数据
这节介绍了如何使用mysqldump创建分隔文本格式的转储文件。
如果您使用--tab=dir_name选项调用mysqldump,它将使用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文件,每行一行,列值之间用制表符分隔,列值周围没有引号,并将换行符作为行终止符。(这些与SELECT ... INTO OUTFILE的默认设置相同。)
为了支持使用不同的格式写入数据文件,mysqldump提供了以下选项:
- --fields-terminated-by=str
用于分隔列值的字符串(默认为制表符)。
- --fields-enclosed-by=char
用于将列值括起来的字符(默认为没有字符)。
- --fields-optionally-enclosed-by=char
用于将非数字列值括起来的字符(默认为没有字符)。
- --fields-escaped-by=char
用于转义特殊字符的字符(默认为不转义)。
- --lines-terminated-by=str
行终止字符串(默认为换行符)。
根据您为这些选项指定的值,可能需要在命令行中适当地引用或转义该值以适应您的命令解释器。或者,可以使用十六进制表示法指定该值。假设您希望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
如果您在转储表数据时使用了任何数据格式选项,您需要在以后重新加载数据文件时指定相同的格式,以确保正确解释文件内容。