Не могу установить 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
Сервер 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
Существует только второй файл. Это начало цепочки символических ссылок для /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
?
1 ответ
Добавьте переменную под [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