MySQL.com

Linux/Ubuntu 上の MySQL で SELECT 結果を CSV形式のファイルに出力する方法についての覚え書きです。

 

 

環境

Ubuntu 16.04 LTS

MySQL 5.7.22

方法

CSV形式のファイルに出力

SELECT文の最後に「INTO OUTFILE 〜」と続けて書いて、SELECT文の結果をカンマ区切りのCSV形式で保存します。

SELECT * FROM tb INTO OUTFILE '/tmp/select.csv' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"';

これで /tmp にCSV形式のファイルとして保存されました。

Libreoffice等で開いてみると正常に表示されます。

–secure-file-privの設定

初回にSELECT文などの結果をCSVなどのファイルに保存しようとすると「–secure-file-priv」オプションによって実行できませんと表示されます。

SELECT * FROM tb INTO OUTFILE '/tmp/select.csv' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"';
ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

その場合には MySQL の設定を変更して再起動します。

# 設定変更
$ sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
...
secure_file_priv=""


# 再起動
$ sudo systemctl restart mysql

MySQL の再起動後にファイル出力のSQLを実行すると正常に実行されます。

パーミッションエラー

CSVファイルの出力先をホームディレクトリ下などに保存しようとするとパーミッションエラーが発生しました。

SELECT * FROM tb INTO OUTFILE '/home/akiyoshi/select.csv' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"';
ERROR 1 (HY000): Can't create/write to file '/home/akiyoshi/select.csv' (Errcode: 13 - Permission denied)

そういう場合は /tmp ディレクトリ直下に保存するようにすると問題なく保存できそうです。

【Linux】MySQLのSELECT結果をCSVファイルで出力する方法

コメントを残す