MySQL可以使用select…into outfile語句將表的內容導出為一個文本文件。其基本的語法格式如下:
select [列名] from 表名 [WHERE 語句] into outfile '目標文件' [其他選項];
該語句分為兩個部分。前半部分是一個普通的select語句,通過這個select語句來查詢所需要的數據;后半部分是導出數據的。其中,“目標文件”參數指出將查詢的記錄導出到哪個文件中;“其他選項”參數為可選參數選項,下表列舉了其可能的取值。
提示:FIELDS和LINES兩個子句都是可選的,但是如果兩個子句都被指定了,FIELDS必須位于LINES的前面。
視頻講解如下 |
---|
【趙渝強老師】使用select...into outfile語句備份MySQL |
下面以備份員工表(emp)的數據為例來演示如何使用select…into outfile語句進行數據的熱備份
(1)創建備份文件存儲的目錄,并且將目錄所屬的組設置為mysql。
mkdir -p /databackup/select
chown mysql:mysql /databackup/select
(2)使用select…into outfile語句來導出demo1數據庫下emp表的記錄。其中,字段之間用“、”隔開,字符型數據用雙引號括起來。每條記錄以“>”開頭。
mysql> use demo1;mysql> select * from emp
into outfile '/databackup/select/bk1.txt'
fieldsterminated by '\、'optionally enclosed by '\"'
linesstarting by '\>'terminated by '\r\n';# 輸出的錯誤信息如下:
ERROR 1290 (HY000):
The MySQL server is running with the --secure-file-priv option
so it cannot execute this statement
(3)查看參數–secure-file-priv的值。
mysql> show variables like 'secure_file_priv';# 輸出的信息如下:
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| secure_file_priv | NULL |
+------------------+-------+# 提示:secure_file_priv參數是用來限制load data, select ... select...into outfile和load_file()在導出數據時使用的目錄。
# 當secure_file_priv的值為null ,表示不允許導入和導出數據。
# 當secure_file_priv的值為/tmp/ ,表示導入和導出只能發生在/tmp/目錄下。
# 當secure_file_priv的值沒有具體值時,表示不對導入和導出做限制。
(4)修改文件/etc/my.ini,在“[mysqld]”塊下面加入下面一行。
secure_file_priv=
(5)重啟MySQL數據庫
systemctl restart mysqld
(6)重新查看參數–secure-file-priv的值。
mysql> show variables like 'secure_file_priv';# 輸出的信息如下:
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| secure_file_priv | |
+------------------+-------+
(7)重新執行第(2)步操作。
(8)查看文件/databackup/select/bk1.txt文件的內容。
cat /databackup/select/bk1.txt # 輸出的信息如下:
>7369、"SMITH"、"CLERK"、7902、"1980/12/17"、800、\N、20
>7499、"ALLEN"、"SALESMAN"、7698、"1981/2/20"、1600、300、30
>7521、"WARD"、"SALESMAN"、7698、"1981/2/22"、1250、500、30
>7566、"JONES"、"MANAGER"、7839、"1981/4/2"、3670、\N、20
>7654、"MARTIN"、"SALESMAN"、7698、"1981/9/28"、1250、1400、30
>7698、"BLAKE"、"MANAGER"、7839、"1981/5/1"、2850、\N、30
>7782、"CLARK"、"MANAGER"、7839、"1981/6/9"、2550、\N、10
>7788、"SCOTT"、"ANALYST"、7566、"1987/4/19"、3000、\N、20
>7839、"KING"、"PRESIDENT"、-1、"1981/11/17"、5950、\N、10
>7844、"TURNER"、"SALESMAN"、7698、"1981/9/8"、1500、\N、30
>7876、"ADAMS"、"CLERK"、7788、"1987/5/23"、1100、\N、20
>7900、"JAMES"、"CLERK"、7698、"1981/12/3"、950、\N、30
>7902、"FORD"、"ANALYST"、7566、"1981/12/3"、3000、\N、20
>7934、"MILLER"、"CLERK"、7782、"1982/1/23"、1400、\N、10