るいすときのこの物語

オタクエンジニアの雑記

RDS for MySQL でSELECT結果をCSVに吐き出す


機会があって調べていると一筋縄ではいかなかったので覚書。 2ヶ月ぶりの記事ですが普通に生きています。

 

INTO OUTFILE は使えない

RDS for MySQL(Aurora) v5.6.10 では INTO OUTFILEを実行するとエラーで使えない ERROR 1045 (28000): Access denied for user 'xxxx'@'%' (using password: YES)

 

StackOverFlow の人気コマンドを実行するとレイアウトが崩れる

mysql -u username -p --database=dbname --host=rdshostname --port=rdsport --batch 
  -e "select * from yourtable" 
  | sed 's/\t/","/g;s/^/"/;s/$/"/;s/\n//g' > yourlocalfilename

これで吐き出される CSV は見るに堪えないものができてしまう。 MySQLのバージョンだったりが関係あるのかもしれない。

 

mysqldump-to-csv を使う

https://github.com/jamesmishra/mysqldump-to-csv

$ wget https://raw.githubusercontent.com/jamesmishra/mysqldump-to-csv/master/mysqldump_to_csv.py
$ mysqldump -h hostname -u username -p database -w 'user_id = 1' table | python mysqldump_to_csv.py > table.csv

これを使うと何故かヘッダが付与されないけど そこは手動で。