При запуске mysqld
сервера вы можете указать параметры программы в файле параметров или в командной строке. Эти параметры предназначены для разблокировки других функций MySQL, изменения переменных или наложения ограничений.
Вот как параметры читаются на сервере MySQL:
- mysqld считывает параметры из
[mysqld]
и[server]
групп - mysqld_safe считывает параметры из
[mysqld]
,[server]
,[mysqld_safe]
и[safe_mysqld]
групп - mysql.server считывает параметры из
[mysqld]
и[mysql.server]
групп.
Вы можете увидеть краткую сводку опций, поддерживаемых MySQL, используя:
1 |
$ mysqld --help |
Чтобы увидеть полный список, используйте команду:
1 |
$ mysqld --verbose --help |
Одна из тех системных переменных, которые можно установить при запуске сервера, это
mysqld_secure-file-priv
Что такое переменная mysqld_secure-file-priv?
Переменная secure_file_priv
используется для ограничения эффекта операций импорта и экспорта данных. Пример пораженных операций, выполняемый LOAD DATA
и SELECT ... INTO OUTFILE
отчетность и функция LOAD_FILE()
. Эти операции разрешены только пользователям, имеющим такую FILE
привилегию.
Чтобы увидеть текущую настройку во время выполнения, используйте SHOW VARIABLES
инструкцию.
Войдите в оболочку MySQL как пользователь root
1 |
$ mysql -u root -p |
Запускаем
1 2 3 4 5 6 7 8 |
mysql> SHOW VARIABLES LIKE "secure_file_priv"; +------------------+-----------------------+ | Variable_name | Value | +------------------+-----------------------+ | secure_file_priv | /var/lib/mysql-files/ | +------------------+-----------------------+ 1 row in set Time: 0.023s |
Вы можете видеть, что набор каталогов
/var/lib/mysql-files/
Изменение каталога переменных secure-file-priv
Это значение можно изменить в файле опций MySQL в разделе [mysqld] .
1 |
sudo vim /etc/my.cnf |
Установите переменную в [mysqld]
разделе
1 2 |
[mysqld] secure-file-priv=/mysqlfiles |
Затем создайте настроенный каталог
1 2 |
sudo mkdir /mysqlfiles sudo chown -R mysql:mysql /mysqlfiles/ |
Перезапустите службу MySQL, чтобы изменения вступили в силу.
1 |
sudo systemctl restart mysqld |
Войдите снова, чтобы подтвердить новую настройку
1 2 3 4 5 6 7 |
mysql> SHOW VARIABLES LIKE "secure_file_priv"; +------------------+--------------+ | Variable_name | Value | +------------------+--------------+ | secure_file_priv | /mysqlfiles/ | +------------------+--------------+ 1 row in set (0.00 sec) |
Давайте протестируем, чтобы подтвердить, что мы можем экспортировать по указанному пути.
1 2 |
mysql> SELECT * FROM information_schema.processlist into outfile '/tmp/mysql_processes.txt'; ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement |
Попробуем еще раз написать правильный путь.
1 2 |
mysql> SELECT * FROM information_schema.processlist into outfile '/mysqlfiles/mysql_processes.txt'; Query OK, 1 row affected (0.00 sec) |
Переменная Diable secure-file-priv
Чтобы отключить его, установите для переменной значение NULL.
1 2 |
[mysqld] secure-file-priv = "" |
Перезапуск службы mysqld
1 |
sudo systemctl restart mysqld |
Подтвердить после перезапуска службы
1 2 3 4 5 6 7 |
mysql> SHOW VARIABLES LIKE "secure_file_priv"; +------------------+-------+ | Variable_name | Value | +------------------+-------+ | secure_file_priv | | +------------------+-------+ 1 row in set (0.00 sec) |
Попробуйте сохранить содержимое QUERY в другую директорию
1 2 |
mysql> SELECT * FROM information_schema.processlist into outfile '/tmp/mysql_processes.txt'; Query OK, 1 row affected (0.00 sec) |
Все, спасибо за внимание, теперь вы научились настраивать переменную secure-file-priv