您的位置:首页 > 数据库 > MySQL

mysqldump备份之分割文本形式

2016-11-18 10:42 357 查看
7.4.3 使用mysqldump将数据以分割文本的形式进行dump
++++++++++++++++++++++
如果调用mysqldump的时候使用了--tab=dir_name的时候,它将会用dir_name作为输出目录(目录要提前创建),并且每一个表将会创建2个文件(一个txt文件和一个sql文件)来保存;
这两个文件的基名就是表的名字:对于名为t1的表来说,这2个文件就是t1.txt和t1.sql;
生成的.sql文件包含一个CREATE TABLE 语句;生成的.txt文件包含表中的数据,表中的每一行在文件中也是一行;








生成的.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';
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息