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