MySQLでSELECTした結果をCSVに出力する方法

MySQLでSELECTした結果をCSVファイルに出力する方法をご紹介します。CSVへのファイル出力には「INTO OUTFILE」構文を使用します。

使用した環境

  • Windows 10 Pro 1903 18362.592
  • MySQL version 8.0.13

SELECT の結果をCSVファイルに出力する方法

今回検証で使用したテーブル(members)

select * from members;
+------+----------+------+------------+
| id   | name     | age  | department |
+------+----------+------+------------+
| 0001 | 田中太郎 |   33 | 営業部     |
| 0002 | 山田一郎 |   45 | 営業部     |
| 0003 | 佐藤圭介 |   24 | 技術部     |
| 0004 | 中村花子 |   29 | 経理部     |
+------+----------+------+------------+

基本構文

(任意のSELECT文) INTO OUTFILE '出力ファイルパス';

オプション

以下4種類のオプションを指定することができます。

オプション概要
TERMINATED BY区切り文字の指定
ENCLOSED BYフィールドを囲む文字の指定
ESCAPED BYエスケープ文字の指定
LINES TERMINATED BY改行文字の指定

デフォルトの出力設定から変更したい場合、上記オプションを指定することで自由にCSVファイルを作成することができます。

SELECT id, name, department FROM members INTO OUTFILE 'C:/tmp/output_1.csv' FIELDS TERMINATED BY ',';

出力結果(output_1.csv)

0001,田中太郎,営業部
0002,山田一郎,営業部
0003,佐藤圭介,技術部
0004,中村花子,経理部

トラブルシューティング

上記で紹介したSQL文で、私が遭遇したエラーを記載しておきたいと思います。

ERROR 1290

エラーメッセージ

ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

エラーメッセージ 日本語訳

エラー1290(HY000):MySQLサーバーは--secure-file-privオプションを指定して実行されているため、このステートメントを実行できません

概要

MySQLのセキュリティにより、ファイル書き込みできるディレクトリが制限されているため、このエラーが発生します。

書き込み可能なディレクトリは下記クエリで確認できます。

select @@secure_file_priv;
MySQL 書き込み可能ディレクトリの確認

私の環境では「C:\ProgramData\MySQL\MySQL Server 8.0\Uploads\」にのみ出力可能な状態となっていました。

解決方法

「C:\ProgramData\MySQL\MySQL Server 8.0\my.ini」をテキストエディタで開き、下記のように「secure-file-priv」を空に設定します。

MySQL my.iniの編集

INIファイルの編集が完了したらMySQLのサービスを再起動してください。

MySQL サービス 再起動

コメント

タイトルとURLをコピーしました