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 data與insert的插入速度對比
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慢了近兩倍。
可知在大數據量的情況下的優勢了。