SELECTした結果をファイル出力したい
背景
今回はMySQLのSELECT文を実行したら、なんと1000件超えてしまった! ターミナルから全件確認できないんですけど!?という時のために、 SQL実行結果をテキストファイルに出力することがあったので、ご紹介させていただきます。
手順
今回試した操作と状況はこちら。
- AWS CloudShellからBastion EC2にログイン
- さらにmysqlにログイン
- SELECT文を実行 → 1000件超えて、結果が全件確認できない!
こうなってしまったので、SELECTの結果をファイル出力してしまおう、となりました。
解決策
- AWS CloudShellからBastion EC2にログイン(※mysqlには入らない)
- 以下コマンドを実行
ポイントは
-eオプション。 executeオプションというらしく、コマンドラインから直接クエリを実行するコマンドを利用します。
shell
mysql -h <host> -u <user> -D <db> -e "SELECT 1000兼超えるやーつ" -p > /tmp/output.txtこれでmysqlログイン時のパスワードを入力したら、正しくoutput.txtに結果が出力されます。
- S3経由でダウンロード
あとはこれをS3にコピー、S3からローカルにダウンロードして、無事に結果を手に入れることができました。
plain text
aws s3 cp /tmp/output.txt s3://hoge-hoge/output.txtまとめ
環境によってはmysqlにログインしたまま、以下コマンドでも出力ができそうでしたが、 私の現場ではOUTFILE制限されており、bastionからのexecuteオプション利用に落ち着きました。
shell
SELECT 1000兼超えるやーつ INTO OUTFILE '/tmp/output.txt';ちなみに、その1000件以上の結果は他の現場でも利用するシーンがあるのでしょうか。
それは私にもわかりません笑 ここまでのデータを出力するなら、本来はそれ専用の画面を作って、CSV出力させる機能を追加してもいいのにな〜とは思いました。
ということで、今回は参考になるケースが超絶少なそうな、mysql -eオプションのお話でした。
それでは!