箱のプログラミング日記。

えんじにあ奮闘記

【MySQL】SELECT文の結果をCSVファイルにエクスポート

MySQLでSELECT文の結果をCSVファイルにエクスポートしようとした時に少しハマったのでメモ。

発生したエラー

いつものようにMySQLにログインして、こちらの記事を参考にSELECT文の結果をCSVファイルにエクスポートしようとしたところ

mysql>SELECT name FROM users INTO OUTFILE '~/export.csv' ;
ERROR 1045 (28000): Access denied for user 'hoge_user'@'%' (using password: YES)

怒られた。

hoge_userの部分はMySQLのユーザー名で、要はこのユーザーにはファイルの書き込み権限がないからエクスポートできないよという内容らしい。

解決:ログインせず外から実行

エラー文でググったところ、ユーザーの権限を変える方法とかもあったのですが本番DBのため安易に変えるのが嫌だなと思い下記の形で落ち着きました。

$ mysql -u hoge_user -p password -h host -D DB_NAME -e "SELECT name FROM users" > ~/export.csv

ログインせず外から。

-eオプションにSELECT文を渡して無事エクスポートができました。

ちなみに

最初、下記のようなコマンドを実行してエクスポートされたCSVファイルを見ると中身が空の状態になってしまい、なんでだろう...とすごく悩んでしまったのだが

誤)

$ mysql -u hoge_user -p password -h host -D DB_NAME -e "SELECT name FROM users WHERE birthday = "1990-01-01" AND ......" > ~/export.csv

エスケープしてないだけだった。

正)

$ mysql -u hoge_user -p password -h host -D DB_NAME -e "SELECT name FROM users WHERE birthday = \"1990-01-01\" AND ......" > ~/export.csv

特にエラーにならず空のCSVファイルが生成されるようなので注意。

参考

MySQL :: MySQL 5.6 リファレンスマニュアル :: 4.5.1.1 mysql のオプション

mysql - Exporting table from Amazon RDS into a csv file - Stack Overflow

MySQLのデータをCSVに吐こうとするとエラーになる。 - H_Yamaguchiのブログ