MySQL SQL結果をINTO OUTFILEを使用せずCSV取得
概要
MySQL SELECT 文の結果を csv で取得する際
以下のように CLI 上で実行することで取得できます。
1 | $ mysql -u <user> -p<password> <db_name> |
ですが、mysql ログインユーザ
以下のようなエラーで出力できません。
1 | RROR 1 (HY000): Can't create/write to file '/tmp/output.csv' (Errcode: 13) |
FILE の READ/WRITE 権限を付与すれば問題ないですが
権限周りをいじりたくないときなどあるかと思います。
本番環境の DB で権限周りがブラックボックス化していて
FLUSH PRIVILEGES すると何か障害が出るんじゃないかとか汗
その際に実施したことを以下まとめました。
考え方
TXT として取得して sed で csv ファイルに加工する、
という方法で実行しています。
例) 以下のような SQL 実行結果を取得したとすると
1 | $ less output.txt |
↓ Excel で表示されるように加工すると
1 | $ less output.txt |
手順
query 結果を ouput.txt に出力
1 | $ mysql -u <user> -p<password> <db_name> -e"<query>" > output.txt |
Excel 用に加工
- 力技
1 | // 各行の一番前(「^」)に「"」を付加 |
文字コード変更
この CSV を利用する方(提出先)の方の文字コードに合わせます。
提出先では Shift JIS がデフォルトとのことで そこに変更します。
1 | $ nkf -g output4.txt |
1 | $ nkf -sLw output4.txt > output.csv |
これで INTO OUTFILE を利用せず CSV ファイルを取得できました。
ouput.csv
おまけ
ファイル名に日付をつける。
1 | $ mv output.csv output_`date '+%Y%m%d'`.csv |
1 | $ ls |
MySQL SQL結果をINTO OUTFILEを使用せずCSV取得
https://kenzo0107.github.io/2016/03/13/2016-03-14-mysql-output-csv-without-outfile/