输出文件
mysqldump输出的数据文件有两种形式:
- 如果带了--tab
选项,mysqldump会为每张表创建两个文件,一个是以tab间隔的文本文件
包含表的内容数据,后缀是.txt
;一个是表的创建语句,表示数据库表的结构,.sql
文件。两个文件名与表名相同。
- 如果不带--tab
选项,那么mysqldump直接输出.sql
文件,里面包含了CREATE 和 INSERT 语句。
不带--tab
的备份
mysqldump -u root -p --all-database > backup.sql;//备份所有的数据库
mysqldump -u root -p --database db1 db2 ... > backup.sql;//备份指定的数据库,但是backup.sql没有CREATE语句
mysqldump -u root -p db1 db2... > backup.sql;//备份指定的数据库,但是backup.sql有CREATE语句
mysqldump -u root -p --add-drop-database db1 db2 > backup.sql;//备份指定的数据库,backup.sql会添加drop databse db1这样的语句;
带--tab
的备份
mysqldump --tab=/tmp/dir;
导出数据到指定目录,每张表都有两个文件,假设表名为myTb,那么,在/tmp/dir/目录下,会有myTb.sql,myTb.txt两个文件。myTb.sql包含表的创建语句(CREATE TABLE myTb…),myTb.txt则是表的数据,数据中,列与列之前默认以tab间隔。
mysqldump还可以指定myTb.txt里数据的展示格式:
--fields-terminated-by=str//列与列之前以字符串str为间隔
--fields-enclosed-by=char//用char字符包围列,如(a)(d)
--fields-optionally-enclosed-by=char//非数字列,以char字符包围
--fields-escaped-by=char//
--lines-terminated-by=str//行以字符串str结尾
上面的参数最好用hex进制进行表示,以避免混淆。或者用单引号包围。
从带--tab
的备份中恢复数据
上面说了,--tab
选项会为每张数据表创建两个文件,一个是.sql,一个是.txt.那么下面的命令是把表myTb恢复到数据库:
mysql db1 < myTb.sql;
mysqlimport db1 myTb.sql;
第一句是在数据库db1创建表myTb;第二句是把myTb的数据导致数据库中。
当然,如果我们使用mysql登录进入了,也可以用下面mysql的命令,其作用等效于上面:
mysql>USE db1;
mysql>LOAD DATA INFILE 'myTb.txt' INTO TABLE myTb;
如果你导出数据是指定了格式,那么恢复数据时,也需要指定格式;
mysqlimport --fileds-terminated-by=, --fileds-enclosed-by='"' db1 myTb.txt;
或者
mysql>USE db1;
mysql>LOAD DATA INFILE 'myTb.txt' INTO TABLE myTb
->FIELDS TERMINATED BY ','
->FIELDS ENCLOSED BY '"';
备份存储过程,函数,触发器
mysqldump --events//事件
mysqldump --routines//存储过程与函数
mysqldump --triggers//触发器。默认开启
只备份表结构或者只备份表数据
mysqldump --no-data;//只备份表结构
mysqldump --no-create-info//只备份表数据
有什么用呢?当你进行数据库版本升级,或者你要换个机器部署数据库的时候,你可能想要先测试一下,目标数据库是不是支付我这个版本的数据,所以,建议你先从老数据库dump表结构出来,然后导入目标数据库,这样可以快速验证是不是支持数据类型结构什么的;验证成功之后,再把数据导入目标数据库中。