MySQL
CSV
tsv

MySQLのCSV出力が権限によって出来ない場合の対処法

More than 1 year has passed since last update.

はじめに :dolphin:

MySQLのSELECT文でcsvを出力する

を参考にCSVファイルを出力したのですが、環境によってはユーザ権限の問題等によりエラーが発生してしまいます。

「とりあえずCSV出力したいんじゃ :punch: 」という方への対処法を調査したのでこちらに記載いたします。

こんなエラーが発生する

ERROR 1 (HY000): Can't create/write to file '/tmp/fruits.csv' (Errcode: 13)
ERROR 1045 (28000): Access denied for user '{ユーザ名}'@'%' (using password: YES)

結論 :tada:

以下でザクッと解決

tsv

mysql -h {host名} -u{user名} -p {DB名} -e "{SQL}" > {ファイルパス}

具体的には…

mysql -h database.com -uadmin_user -p my_database -e "select * from fruits;" > /tmp/fruits.tsv

csv

mysql -h {host名}  -u{user名} -p {DB名} -e "{SQL}" | sed -e 's/^/"/g' | sed -e 's/$/"/g' | sed -e 's/\t/","/g' > /tmp/fruits.csv

具体的には…

mysql -h database.com -uadmin_user -p my_database -e "select * from fruits;" | sed -e 's/^/"/g' | sed -e 's/$/"/g' | sed -e 's/\t/","/g' > /tmp/fruits.csv

おわりに

原因として、MySQLログインユーザのファイル書き込み権限がなかったことなどが挙げられます。詳しく知りたい方は以下の記事が非常に参考になりますのでご覧ください。

MySQL SQL結果をINTO OUTFILEを使用せずCSV取得

MySQLリモートDBの結果をローカルCSVファイルに出力する方法