生成的.txt文件中的数据是mysql服务器写进去的,所以它的所有者是运行mysql服务器的系统用户; 服务器使用SELECT ... INTO OUTFILE 语句来写文件,所以你必须拥有FILE特权; 另外,如果已经存在同名的.txt文件,将会报错;(windows下实验,没有报错,直接覆盖) 对于要dump的表,mysql将CREATE 定义发送给mysqldump; 生成的sql文件属于执行mysqldump命令的用户; --tab选项最好只用本地服务器; 如果对于远程主机使用--tab选项,那么本地机器和远程机器都必须有--tab指定的目录, 在这种情况下,.txt文件将会保留在远程目录,.sql目录将会保存在本地目录; 对于mysqldump --tab来说,默认情况下,mysql服务器将表中的每一行数据写到.txt文件中的一行,每一列的每一个值都没有引号,新的一行作为行的分隔; 这是和SELECT ... INTO OUTFILE一样的;
mysqldump提供一些选项来控制txt文件的格式:
—fields-terminated-by=str 使用字符串str作为列值的分隔(默认的是tab)—fields-enclosed-by=char 在每一个字段的前后加上char这个字符(默认没有)—fields-optionally-enclosed-by=char 在每一个非数字的字段前后加上char这个字符(默认没有) 注意:–fields-enclosed-by和–fields-optionally-enclosed-by不能同时使用;–fields-escaped-by=char 使用char去转义特殊字符(默认没有)–lines-terminated-by=str 行结束符(默认是新行,遇到新行就换行) 对于上面的选项,取决于我们给指定的值,有可能要使用转义字符,为了避免,可以使用十六进制代替; 假如,我们想使用双引号将字段引起来,那么我们要使用--fields-enclosed-by选项,但是, 对于命令行来说,双引号是一个特殊字符,所以必须特殊对待; --fields-enclosed-by='"'或者 --fields-enclosed-by=0x22 7.4.4 重新载入分割文本类型的dump文件 ++++++++++++++++++++++ 对于重新载入分割文本类型的文件,我们首先要使用mysql命令调用.sql文件创建一个空表,然后将txt文件里边的数据导入; shell> mysql db1 < t1.sql shell> mysqlimport db1 t1.txt 另一种可选的方式: mysql> USE db1; mysql> LOAD DATA INFILE 't1.txt' INTO TABLE t1; 如果之前使用了mysqldump提供的选项来控制.txt文件的格式,那么,重新载入的时候也还需要明确指定; shell> mysqlimport --fields-terminated-by=, --fields-enclosed-by='"' --lines-terminated-by=0x0d0a db1 t1.txt 或者 mysql> USE db1; mysql> LOAD DATA INFILE 't1.txt' INTO TABLE t1 -> FIELDS TERMINATED BY ',' FIELDS ENCLOSED BY '"' -> LINES TERMINATED BY '\r\n';