mysqldump备份数据

来源:互联网 发布:政府网络舆论互动交流 编辑:程序博客网 时间:2024/05/29 03:52

输出文件

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表结构出来,然后导入目标数据库,这样可以快速验证是不是支持数据类型结构什么的;验证成功之后,再把数据导入目标数据库中。

0 0
原创粉丝点击