mysql备份之select ...into outfile

4.2.2 select ...into outfile

Select ...into oufile 也是一种逻辑备份方式,恢复速度比较快,但是只能备份表中的数据,不能包含表结构,完成备份后,表如果被删了,是无法恢复的,它把备份的数据导出到一个文本文件中,通过load data的方式,实现回复还原操作。

一般语法为:select coll,co12...from table_name into outfile /path/备份名称’。

命令的使用可以自行去查找。

 

 

 

实验过程,

测试前需要查看当前mysql是否在使用secure_file_priv,不然可能会不被允许导出操作,如下图为null表示禁止在任何目录进行文件导出导入操作。需要修改配置文件my.cnf,在mysqld模块下加入一句secure_file_priv=,意思是允许把数据导出到任何目录,且注意权限问题,不然会被拒绝,目录可以改,然后重启mysql

 

 

 

修改后为

 

 

 

 

进行测试操作

 

select * from test into outfile '/tmp/test.sql'; 

 

 

 

查看文件,已导出到目标目录。并且能查看到数据。

 

 

 

 

恢复测试,删除掉test表中所有数据。如下图

 

 

 

准备恢复,如下图:

load data infile '/tmp/test.sql' into table test.test;

 

 

 

 

 

发现,test表的数据恢复了。

 

 

 

4.2.3.load datainsert的插入速度对比

1,首先要准备一个表并插入十万条数据。

2,建表 create table L(id int,name varchar(8));

3,创建一个循环插入100000条数据程序在进入mysql执行。

delimiter //

 create procedure per2()

begin

declare i int;

set i=1;

while i<= 100000 do insert into test.L values(i,'aaaaa');

set i=i+1;

end while;

end//

4,执行存储过程

call per2();

//

5,等待一会查询select count*from test.L;

过程如下图所示

 

 

 

 

 

进行测试环节

1,先用select...into outfile 把十万条数据dump出来

 

 

 

 

2,模拟故障,truncate删掉L表数据,检查数据量已变成0

 

 

 

3,进行load data,导入数据:用时可以看到是0.373s

 

 

 

 

查看数据有没有恢复完整,如下图知道数据恢复完整。

 

 

 

Insert速度

接下来是进行mysqldump备份这个表,其恢复的过程实际就是insert过程

1,首先备份L

 

 

 

 

 

2,开始恢复,在这里不用再去把L表删掉恢复,因为mysqldump备份的时候会在备份文件加入删掉表的语句,然后执行建表,insert语句

 

 

 总结:可以看到insert插入比select...into outfile慢了近两倍。

可知在大数据量的情况下的优势了。

posted @ 2021-11-17 21:19  头发重要  阅读(1488)  评论(0编辑  收藏  举报