プロジェクト

全般

プロフィール

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
      

上記で標準出力を無理やりCSVに変換する。