MySQL 5.7にした後に、DBをバックアップしているスクリプトのログを見ていたら、エラーが発生していることに気がついた。

MySQL 5.7

mysqldumpの'-T' オプションで、TAB区切りのデータを出力しているのだが、「Got error: 1290: The MySQL server is running with the --secure-file-priv option」となってしまっている。
コマンドを打ち込んでみると、同じようにエラーとなる。
mysqldumpに'-T' オプション指定せずSQLをダンプする場合は成功する。


# /usr/bin/mysqldump --user=root -p  -T /home/me/backup/ mydb
Enter password:
mysqldump: Got error: 1290: The MySQL server is running with the --secure-file-priv option so it cannot execute this statement when executing 'SELECT INTO OUTFILE'

どうやら、secure-file-privとは SELECT INTO OUTFILE系のFILEを扱うSQLでFILEの操作が許可されるパスを制限するもののようだ。
yumでインストールしたmysql5.7はsecure_file_priv=/var/lib/mysql-files/に設定されていた。


mysql> show variables like 'secure_%';
+------------------+-----------------------+
| Variable_name    | Value                 |
+------------------+-----------------------+
| secure_auth      | ON                    |
| secure_file_priv | /var/lib/mysql-files/ |
+------------------+-----------------------+
2 rows in set (0.00 sec)

変更するには、my.cnfを書き換えて、MySQLを再起動すれば良いようだ。

・secure_file_priv may be set as follows:
If empty, the variable has no effect.

・If set to the name of a directory, the server limits import and export operations to work only with files in that directory.
The directory must exist; the server will not create it.

・If set to NULL, the server disables import and export operations. This value is permitted as of MySQL 5.7.6.

本当はSELECT INTO OUTFILEが可能なフォルダを制限したほうが良いのだろうが、 今回は値を空にして、secure-file-privの動作を無効にした。

/etc/my.cnf
[mysqld] secure_file_priv=

MySQLを再起動
/etc/init.d/mysqld restart

これでmysqldumpの'-T' オプションが動作するようになった。
見事にMySQL 5.7にやられた。

参考)

MySQL 5.7にやられないためにおぼえておいてほしいこと