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慢了近兩倍。

可知在大數據量的情況下的優勢了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM