MySQLのデータをcsv,tsv形式で出力する
|
調査のためにMySQLのテーブルのデータをCSVファイルで取り出すことになりました。方法をまとめます。
mysqldump
MySQLにはmysqldumpというツールがあり、下記のようなコマンドでDBの情報をダンプ(出力)できます。
mysqldump -u {USERNAME} -p {DB} {TABLE} > {OUTPUT_FILE_NAME}
tsv形式でダンプする場合は --tab
オプションをつけます。
mysqldump -u {USER_NAME} -p --tab=/tmp {DB_NAME} {TABLE_NAM}
--tab=/tmp
と指定することで、/tmpディレクトリ配下にファイルを出力することができます。
csv形式でダンプする場合は–tabオプションに加えて、–fields-terminated-by=,を指定します。
mysqldump -u {USER_NAME} -p --tab=/tmp --fields-terminated-by=, {DB_NAME} {TABLE_NAM}
mysqldump以外の方法でcsv出力
mysqldumpを使った方法は接続元のサーバーとmysqlサーバーが同じ場所で動作している必要があります。AWSなどの踏み台経由でRDSと接続している場合などは実行できません。
The trouble with all these
INTO OUTFILE
or--tab=tmpfile
(and-T/path/to/directory
) answers is that it requires running mysqldump on the same server as the MySQL server, and having those access rights.https://stackoverflow.com/questions/12040816/dump-all-tables-in-csv-format-using-mysqldump
別の策として、SQL文を実行してその結果をリダイレクトするという方法があります。
mysql -B -u {USERNAME} -p {PASSWORD} {DB} -h {DB_HOST} -e "SELECT * FROM accounts;" \ | sed "s/\"/\"\"/g;s/'/\'/;s/\t/\",\"/g;s/^/\"/;s/$/\"/;s/\n//g" > hogehoge.csv
sed
コマンドで不要な文字列を置換し、csvファイルとして出力できます。
まとめ
MySQLのデータをいい感じにcsvファイルに出力できました。やったね!