NEKO BLOG

SELECTした結果をファイル出力したい

背景

今回はMySQLのSELECT文を実行したら、なんと1000件超えてしまった! ターミナルから全件確認できないんですけど!?という時のために、 SQL実行結果をテキストファイルに出力することがあったので、ご紹介させていただきます。

手順

今回試した操作と状況はこちら。

  1. AWS CloudShellからBastion EC2にログイン
  2. さらにmysqlにログイン
  3. SELECT文を実行 → 1000件超えて、結果が全件確認できない!

こうなってしまったので、SELECTの結果をファイル出力してしまおう、となりました。

解決策

  1. AWS CloudShellからBastion EC2にログイン(※mysqlには入らない)
  2. 以下コマンドを実行 ポイントは-eオプション。 executeオプションというらしく、コマンドラインから直接クエリを実行するコマンドを利用します。

shell

mysql -h <host> -u <user> -D <db> -e "SELECT 1000兼超えるやーつ" -p > /tmp/output.txt

これでmysqlログイン時のパスワードを入力したら、正しくoutput.txtに結果が出力されます。

  1. 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オプションのお話でした。

それでは!