Help us understand the problem. What is going on with this article?

MySQLで抽出結果をファイルに出力する方法

More than 3 years have passed since last update.

MySQLでのファイル出力方法について。
バージョン5.7.11でmysqlクライアントを使用して確認しています。

SELECT INTO OUTFILE を使用する

サーバ上のファイルに出力します。

構文

以下の構文で抽出結果をファイルに出力することができます。

SELECT フィールド名 FROM テーブル名 INTO OUTFILE 'ファイル名'

 SELECT * FROM test;
+------+---------+
| id   | name    |
+------+---------+
|    1 | isono   |
|    2 | fu”guta |
+------+---------+
2 rows in set (0.00 sec)

mysql> SELECT * FROM test INTO OUTFILE '/var/lib/mysql-files/test.dmp';
Query OK, 2 rows affected (0.00 sec)

mysql> system sudo cat /var/lib/mysql-files/test.dmp
1   isono
2   fu"guta

secure_file_priv

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

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

mysql> SELECT * FROM test INTO OUTFILE '/tmp/test.dmp';
ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

FILESオプションとLINESオプション

各フィールドはタブで区切られています。
FIELDSオプションを使用すれば区切り文字を、LINESオプションを使用すれば改行コードを変更できます。

mysql> SELECT * FROM test INTO OUTFILE '/var/lib/mysql-files/test.dmp'
    -> FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' 
    -> LINES TERMINATED BY '\r\n';
Query OK, 2 rows affected (0.00 sec)

mysql> system sudo cat /var/lib/mysql-files/test.dmp
1,"isono"
2,"fu\"guta"

"がエクケープされていること確認できます。

ヘッダをつける

ヘッダをつけるオプションはないようです。
以下の例ではUNIONでヘッダをつけています。

mysql> SELECT 'id', 'name' UNION SELECT * FROM test INTO OUTFILE '/var/lib/mysql-files/test2.dmp';
;
Query OK, 3 rows affected (0.00 sec)

mysql> system sudo cat /var/lib/mysql-files/test2.dmp
id  name
1   isono
2   fu"guta

リダイレクトによる出力

リダイレクトを使用した出力も可能です。

shell> echo 'SELECT * FROM test' | mysql -u root -p test > /tmp/test.dmp
Enter password: 
shell> cat /tmp/test.dmp
id  name
1   isono
2   fu"guta
tas6
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした