7.4.3 使用 mysqldump 转储定界文本格式的数据

本节介绍如何使用mysqldump创建带分隔符的转储文件。有关重新加载此类转储文件的信息,请参见第 7.4.4 节“重新加载定界文本格式备份”

如果使用--tab=dir_name选项调用mysqldump,它将使用* dir_name *作为输出目录,并使用每个 table 的两个文件分别转储该目录中的 table。table 名是这些文件的基本名称。对于名为t1的 table,文件名为t1.sqlt1.txt.sql文件包含该 table 的CREATE TABLE语句。 .txt文件包含 table 数据,每 table 行一行。

以下命令将db1数据库的内容转储到/tmp数据库中的文件中:

shell> mysqldump --tab=/tmp db1

包含 table 数据的.txt文件由服务器写入,因此它们由用于运行服务器的系统帐户拥有。服务器使用选择...进入外档写入文件,因此您必须具有FILE特权才能执行此操作,并且如果给定的.txt文件已经存在,则会发生错误。

服务器将转储 table 的CREATE定义发送到mysqldump,然后将其写入.sql文件。因此,这些文件归执行mysqldump的用户所有。

最好仅将--tab用于转储本地服务器。如果将它与远程服务器一起使用,则 localhost 和远程主机上都必须存在--tab目录,并且.txt文件将由服务器写入远程目录(在服务器主机上),而.sql文件将被写入通过本地目录中的mysqldump(在 Client 端主机上)。

对于mysqldump --tab,服务器默认将 table 数据写入.txt文件每行一行,并在各列值之间使用制 table 符,各列值之间不带引号,并使用换行符作为行终止符。 (这些默认值与选择...进入外档相同)。

为了使数据文件可以使用其他格式写入,mysqldump支持以下选项:

用于分隔列值的字符串(默认值:制 table 符)。

包含列值的字符(默认值:无字符)。

包含非数字列值的字符(默认值:无字符)。

用于转义特殊字符的字符(默认值:不转义)。

行终止字符串(默认值:换行符)。

根据为这些选项中的任何一个指定的值,在命令行上可能有必要为命令解释器适当地加引号或转义该值。或者,使用十六进制 table 示法指定值。假设您希望mysqldump用双引号引起来的列值。为此,请将双引号指定为--fields-enclosed-by选项的值。但是此字符通常是命令 Interpreter 所特有的,必须加以特殊对待。例如,在 Unix 上,您可以这样引用双引号:

--fields-enclosed-by='"'

在任何平台上,您都可以以十六进制指定值:

--fields-enclosed-by=0x22

通常会同时使用多个数据格式选项。例如,要转储以逗号分隔的值格式的 table,并以回车/换行对(\r\n)结尾的行转储,请使用此命令(在单行中 Importing):

shell> mysqldump --tab=/tmp --fields-terminated-by=,
         --fields-enclosed-by='"' --lines-terminated-by=0x0d0a db1

如果您使用任何数据格式化选项来转储 table 数据,则稍后需要重新加载数据文件时,需要指定相同的格式,以确保正确解释文件内容。