MySQL テーブルデータをcsv形式で出力する

  • 作成日 2021.12.17
  • 更新日 2022.10.20
  • mysql
MySQL テーブルデータをcsv形式で出力する

MySQLで、テーブルデータをcsv形式で出力する手順を記述してます。

環境

  • OS ubuntu21.10
  • MySQL Ver 8.0.27-0ubuntu0.21.10.1 for Linux on x86_64 ((Ubuntu))

手順

テーブルデータをcsv形式で出力するには、以下の構文を使用します。
※出力先は「@@global.secure_file_priv」で値が設定されている場合は、そのパスしか使用できません。

select * from テーブル名 into outfile "出力先/ファイル名" fields terminated by ',';

実際に、パスを確認してから実行してみます。

SELECT @@global.secure_file_priv;

<出力結果>
+---------------------------+
| @@global.secure_file_priv |
+---------------------------+
| /var/lib/mysql-files/     |
+---------------------------+
1 row in set (0.00 sec)

実行します。

select * from tbl1 into outfile "/var/lib/mysql-files/tbl1.csv" fields terminated by ',';

実行すると、csvファイルが作成されていることが確認できます。

sudo cat /var/lib/mysql-files/tbl1.csv

<出力結果>
1,taro,10
2,jiro,20
3,saburo,30

ダブルクオートで囲む

ダブルクオートで囲む場合は、「enclosed by」で囲みたい文字列を指定します。

select * from tbl1 into outfile "/var/lib/mysql-files/tbl1_2.csv" fields terminated by ',' enclosed by '"';

ダブルクオートで囲まれていることが確認できます。

sudo cat /var/lib/mysql-files/tbl1_2.csv

<出力結果>
"1","taro","10"
"2","jiro","20"
"3","saburo","30"

ファイルの作成場所

ファイルの作成場所を、指定したくなければ「–secure-file-priv」を空にします。

空にするには、設定ファイルを変更するので、バックアップを取ります。

sudo cp /etc/mysql/mysql.conf.d/mysqld.cnf{,.`date +%y%m%d%H%M%S`}

「mysqld.cnf」に以下を追加します。

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

<追加>
secure-file-priv = ""

再起動します。

sudo service mysql restart

再度、接続して「@@global.secure_file_priv」を確認すると空になっていることが確認できるので、これで、どこでもファイルが作成できます。

mysql> SELECT @@global.secure_file_priv;

+---------------------------+
| @@global.secure_file_priv |
+---------------------------+
|                           |
+---------------------------+
1 row in set (0.00 sec)