mysqldump '-T' オプションでGot error: 1290が発生する

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. This is not a secure setting.

  • 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.

MySQL :: MySQL 5.7 Reference Manual :: 5.1.7 Server System Variables

本当は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にやられないためにおぼえておいてほしいこと