Назад | Перейти на главную страницу

не могу установить secure_file_priv на mysql 5.7 Ubuntu 16.04

Как мне установить значение для 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