RDSのmysql(mariadb)の出力をCSV出力¶
通常のMySQL(MariaDB)ではSQL側からCSVにエクスポートすることが可能だが、
RDSの仕様でユーザにファイル入出力の権限が割り当てることができないため
エラーとなってしまう。(ユーザテーブルの編集ができない)
select * from table_name into outfile '/var/tmp/sample.csv' fields terminated by ',' optionally enclosed by '"'; ERROR 1045 (28000): Access denied for user 'user'@'%' (using password: YES)
- 上記の抽出条件をもとに無理やり何とかする
「-e」オプションの引数の中身は上記で指定した通常のSQL文だが、エスケープが必要な文字や
もともと「""」として囲った部分は「\"\"」とする必要がある。mysql -u sympa -p --database=データベース名 --host=RDSエンドポイント名 --batch \ -e "select * from table_name" | sed 's/\t/,/g;s/\n//g' >/var/tmp/sample.csv
- -Nオプションを付けると見出しをスキップする。
mysql -u sympa -p --database=データベース名 --host=RDSエンドポイント名 --batch \ -e "select * from table_name" -N | sed 's/\t/,/g;s/\n//g' >/var/tmp/sample.csv
- -Nオプションを付けると見出しをスキップする。
上記で標準出力を無理やりCSVに変換する。