【MySQL】で結果をテキストに出力する方法、INTO OUTFILEとtee

AmazonのCloud9を使っています。データベースはMySQLです。

MySQLでの検索結果をテキストファイルに落としたい出力したいと思いました。
というのもselect文を発行すると件数が非常に多く(1000件とか)Cloud9のターミナル上では全部表示できないので。

参考になるページを見つけてやってみたのですが

SELECT INTO OUTFILEを使う方法

SELECT * FROM テーブル INTO OUTFILE ‘ファイル名’;

をやってみたのですが駄目でした。

$ sudo service mysqld start
$ mysql -u root
mysql USE データベース名;

とやって、

mysql>select * from shops INTO OUTFILE ‘test.txt’;
ERROR 1290 (HY000): The MySQL server is running with the –secure-file-priv option so it cannot execute this statement

というエラーが出ます。

サーバオプションのsecure_file_privが設定されていると、設定されたディレクトリ以外への出力はエラーになるようです。

以下のSQL文を発行して/var/lib/mysql-files/と入っているのでこのディレクトリに出力しないといけない模様。

mysql> SELECT @@secure_file_priv;
+———————–+
| @@secure_file_priv |
+———————–+
| /var/lib/mysql-files/ |
+———————–+
1 row in set (0.00 sec)

なのでSQL文を以下のようにしました。

mysql> select * from shops INTO OUTFILE ‘/var/lib/mysql-files/test.txt’;
Query OK, 1146 rows affected (0.02 sec)

よくわからないけど、これで出たのかな。と思い上記のディレクトリにcdで移動してみます。

$ cd /var/lib/mysql-files/
bash: cd: /var/lib/mysql-files/: Permission denied

すると権限がなくて駄目と言われます。これではせっかく出力したテキストファイルを取得できないじゃないですか。

ということで他の方法も探してみました。

teeとnoteeを使ってファイル出力する方法

今度はちゃんとできました。

$ mysql -u root
mysql USE データベース名;

とやって
↓このように記述していきます。

>mysql tee dump.txt
>mysql select * from users;
>mysql notee

以下のような表示がされます。

mysql> tee dump.txt
Logging to file ‘dump.txt’

>mysql select * from users;
1146 rows in set (0.00 sec)

mysql> notee
Outfile disabled.

mysql> exit;

すると、いま居るディレクトリ配下にdump.txtというファイルが出来ています。