2019年5月10日 星期五

【MYSQL】DB內某TABLE資料導出成csv檔



方法一:mysql內執行

進入DB內,執行SQL導出成CSV檔。
此案例是進入DB:testcsv  需要導出的table:newjbo (只需改紅色部份)
/tmp/newjbo.csv是要存放的路徑

執行SQL
mysql> use  testcsv
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed

mysql> SELECT * INTO OUTFILE '/tmp/newjbo.csv' FIELDS TERMINATED BY ',' ENCLOSED BY '"' ESCAPED BY '\\' LINES TERMINATED BY '\n' FROM newjbo;
Query OK, 46 rows affected (0.02 sec)

可能會出現的問題
ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
secure-file-priv參數是用來限制LOAD DATA, SELECT ... OUTFILE, and LOAD_FILE()傳到哪個指定目錄的。
  • ure_file_priv的值為null ,表示限制mysql 不允許導入|導出
  • 當secure_file_priv的值為/tmp/ ,表示限制mysql 的導入|導出只能發生在/tmp/目錄下
  • 當secure_file_priv的值沒有具體值時,表示不對mysql 的導入|導出做限制

解決:如何查看secure-file-priv參數的值:

mysql> show global variables like '%secure%';
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| require_secure_transport | OFF   |
| secure_auth              | ON    |
| secure_file_priv         | NULL  |
+--------------------------+-------+
3 rows in set (0.07 sec)
此開關默認為NULL,即不允許導入導出。

故修改my.cnf設定重啟後即可導出,在[mysqld]內加入,路徑沒限制就可打"/" 若有限制就看自己要放在哪寫入完整路徑。
[mysqld]
secure_file_priv ="/"
加入後重啟DB,再次進入MYSQL內重新執行SQL,即可導出CSV檔
方法二:LINUX下執行
在LINUX下直接導出
只需修改紅色部份,第一個是語法,第二個是要存放的路徑
mysql -uroot -p --default-character-set=gbk -e "select * from testcsv.newjob" | sed 's/\t/","/g;s/^/"/;s/$/"/;s/\n//g' > testcsv.newjob.csv


沒有留言:

張貼留言