MySQLでCSVファイルがうまくいかなかった場合
(ubuntudeで、mysqlバージョンは、5.7)mysqlからファイル出力(CSVファイルなど)を出力しようとしたら
エラーになった場合は
以下のフォルダ名を追加して、そこに出力しましょう!
'/var/lib/mysql-files/test.txt'
そのフォルダのパーミションを変更して、だれでも読み書きできるようにしました。
(実行権限はいらないね)
エラーメッセージ
mysql> select 1 into outfile 'test.txt';
ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
mysql> select "testdata" into outfile '/var/lib/mysql-files/test.txt';
Query OK, 1 row affected (0.00 sec)
パーミションの変更
ll /var/lib/
drwxr-xr-x 2 root root 4096 7月 8 17:55 msttcorefonts/
drwx------ 10 mysql mysql 4096 12月 17 08:57 mysql/
drwxrwxrwx 2 mysql mysql 4096 12月 17 08:37 mysql-files/
drwx------ 2 mysql mysql 4096 5月 14 2017 mysql-keyring/
drwxr-xr-x 2 root root 4096 4月 27 2017 mysql-upgrade/
drwxr-xr-x 2 root root 4096 5月 13 2017 nssdb/
drwxr-xr-x 2 root root 4096 3月 7 2012 ntpdate/
別のやり方
secure_file_privの値を""にすると、どこでも読めるらしい。sudo vi /etc/mysql/mysql.conf.d/mysqld.cnfを編集します。
ファイルの最後に以下を追加する。(もしあれば変更)
secure-file-priv=""
以下をmysql内で確認するとできた。
しかし、/tmp以外のフォルダではNG
❍ select "testdata" into outfile '/tmp/test.txt';
✗ select "testdata" into outfile '/home/koba/test/test.txt';
そこで、
secure-file-priv="/home/koba/test/"
でどうだ〜
でどうだ〜
mysql> select "testdata" into outfile '/tmp/test2.txt';
ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
mysql> select "testdata" into outfile '/home/koba/test/test2.txt';
ERROR 1 (HY000): Can't create/write to file '/home/koba/test/test2.txt' (Errcode: 13 - Permission denied)
全然だめ、パーミションは変更したのに!
色々やっていたが、ある時うまくいった。(原因?)
・apparmorの設定をおこなっていた()
・再起動した
色々やっていたが、ある時うまくいった。(原因?)
・apparmorの設定をおこなっていた()
・再起動した
・chown で所有者、グループを変更していた
sudo gedit /etc/apparmor.d/usr.sbin.mysqld
sudo /etc/init.d/apparmor reload
sudo /etc/init.d/apparmor reload
sudo /etc/init.d/apparmor restart
まあー、現在時点では、わかったのは。。。
(mysqlからCSVファイルなどを出力したい)
①/etc/mysql/mysql.conf.d/mysqld.cnfを編集
「secure-file-priv=""」を追加した
②フォルダを自分のユーザーの適当なフォルダを作成
パーミションは、所有者、グループが(読み、書き、実行)でその他が実行権
(何も考えないでフォルダ作成しただけ)
③そのフォルダを、chownでグループだけを変更
(グループをmysqlにしないと、mysqldがうまく書けない)
❍ubuntudeで、mysqlバージョンは、5.7
mysql> select version();
+-------------------------+
| version() |
+-------------------------+
| 5.7.18-0ubuntu0.16.04.1 |
+-------------------------+
mysql> select @@global.secure_file_priv;
+---------------------------+
| @@global.secure_file_priv |
+---------------------------+
| /var/lib/mysql-files/ |
+---------------------------+
1 row in set (0.00 sec)
❍フォルダ
/var/lib/mysql-files
❍再起動
sudo /etc/init.d/mysql restart