Как мне установить значение для secure_file_priv
?
Я нашел это, в котором рассказывается, какие настройки можно использовать https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_secure_file_priv
Сервер mysql запускается без параметров командной строки. Нет ничего, что могло бы переопределить его файл .cnf.
user@server:~$ ps aux | grep [m]ysql
mysql 4495 0.0 7.0 544368 144924 ? Ssl 09:16 0:02 /usr/sbin/mysqld
Бег :~$ mysqld --verbose --help
говорит мне
Параметры по умолчанию считываются из следующих файлов в указанном порядке:
/etc/my.cnf /etc/mysql/my.cnf ~ / .my.cnf
Существует только 2-й файл. Это начало цепочки символических ссылок на /etc/mysql/my.cnf.migrated
следующим образом...
user@server:~$ ls -l /etc/mysql/my.cnf
lrwxrwxrwx 1 root root 24 Aug 12 15:15 /etc/mysql/my.cnf -> /etc/alternatives/my.cnf
user@server:~$ ls -l /etc/alternatives/my.cnf
lrwxrwxrwx 1 root root 26 Aug 12 15:15 /etc/alternatives/my.cnf -> /etc/mysql/my.cnf.migrated
user@server:~$ ls -l /etc/mysql/my.cnf.migrated
-rw-r--r-- 1 root root 4455 Dec 13 03:18 /etc/mysql/my.cnf.migrated
Я пробовал устанавливать значения для secure_file_priv
в этом последнем файле, перезапустив сервер mysql и даже перезагрузив сервер Ubuntu. Независимо от значения, установленного командой
mysql> SELECT @@GLOBAL.secure_file_priv;
всегда возвращается /var/lib/mysql-files/
.
Я также искал другие файлы .cnf и попытался установить значение для secure_file_priv
в каждом из них
user@server:~$ find /etc -iname "m*.cn*" -type f
/etc/mysql/conf.d/mysql.cnf
/etc/mysql/my.cnf.migrated
/etc/mysql/my.cnf.fallback
/etc/mysql/mysql.conf.d/mysqld.cnf
/etc/mysql/mysql.cnf
Не важно. После внесения изменений перезапустите сервер и проверьте значение с помощью
mysql> SELECT @@GLOBAL.secure_file_priv;
результат /var/lib/mysql-files/
всегда одно и то же. Это не меняется.
Что мне нужно сделать, чтобы установить значение для secure_file_priv
?
Добавьте переменную под [mysqld]
раздел /etc/mysql/my.cnf
:
secure_file_priv=/absolute/path
Затем перезапустите службу mysql.
Проверить с SELECT @@secure_file_priv;
У меня сработало:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.16 MySQL Community Server (GPL)
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql [localhost] {msandbox} ((none)) > select @@secure_file_priv;
+--------------------+
| @@secure_file_priv |
+--------------------+
| /tmp/ |
+--------------------+
1 row in set (0.00 sec)
Чтобы избежать ошибки 1290, например:
mysql [localhost] {msandbox} (test) > select * from t1 into outfile 'file.sql';
ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
Убедитесь, что вы используете такие абсолютные пути:
mysql [localhost] {msandbox} (test) > select * from t1 into outfile '/tmp/file.sql';
Query OK, 1 row affected (0.00 sec)
mysql [localhost] {msandbox} (test) > \! ls /tmp/file.sql
/tmp/file.sql
mysql [localhost] {msandbox} (test) > truncate t1;
Query OK, 0 rows affected (0.04 sec)
mysql [localhost] {msandbox} (test) > load data infile '/tmp/file.sql' into table t1;
Query OK, 1 row affected (0.00 sec)
Records: 1 Deleted: 0 Skipped: 0 Warnings: 0