mysqldump '-T' オプションでGot error: 1290が発生する
MySQL 5.7にした後、DBをバックアップしているスクリプトのログを見ていたら、エラーが発生していることに気がついた。
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にやられた。 参考)