Docker MySQL 8 как установить --secure-file-priv - PullRequest
0 голосов
/ 16 марта 2019

Я хотел бы решить эту проблему:

ОШИБКА 1290 (HY000): Сервер MySQL работает с параметром --secure-file-priv, поэтому он не может выполнить этот оператор

с официальным изображением MySQL 8 на докере.

команда:

SHOW VARIABLES LIKE "secure_file_priv";

дает:

+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| secure_file_priv | NULL  |
+------------------+-------+
1 row in set (0.01 sec)

Можно ли переписать значение по умолчанию NULL для --secure-file-priv, используя официальный образ MySQL 8 Docker?

значение по умолчанию в этом образе установлено в NULL config / my.cnf

Отлично, я хотел бы установить только переменную или параметр среды при использовании Docker, запустить или создать вместо того, чтобы принести мой собственный файл конфигурации.

, но если это невозможно, то какиспользовать пользовательский файл конфигурации?Возможно ли, что пользовательский файл просто перезаписывает этот один параметр и оставляет другие, как они есть в официальной конфигурации образа?

1 Ответ

3 голосов
/ 16 марта 2019

Согласно этой документации , вы можете настроить secure-file-priv через командную строку, передав --secure-file-priv=dir_name

secure-file-priv Возможные значения: пустая строка, dirname или NULLкак объяснено в приватном URL.

со страницы mysql-docker :

Конфигурация без файла cnf : Многие параметры конфигурации могутпередаваться как флаги в mysqld.Это даст вам гибкость в настройке контейнера без использования файла cnf.Например, если вы хотите изменить кодировку и параметры сортировки по умолчанию для всех таблиц, чтобы использовать UTF-8 (utf8mb4), просто выполните следующее:

$ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

Итак, в нашем случае это будет выглядеть так:

dir_name должен быть каталогом внутри вашего контейнера, в противном случае вы получите следующую ошибку: mysqld: Error on realpath() on 'dir_name' (Error 2 - No such file or directory)

$ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag --secure-file-priv=dir_name

А теперь наше изменениефиксируется в MySQL

mysql> SHOW VARIABLES LIKE "secure_file_priv";
+------------------+----------+
| Variable_name    | Value    |
+------------------+----------+
| secure_file_priv | dir_name |
+------------------+----------+

Кроме того, вы можете использовать пользовательский файл конфигурации, как описано здесь:

Использование пользовательского файла конфигурации MySQL :Конфигурацию по умолчанию для MySQL можно найти в /etc/mysql/my.cnf, который может включать в себя! дополнительные каталоги, такие как /etc/mysql/conf.d или /etc/mysql/mysql.conf.d.Пожалуйста, проверьте соответствующие файлы и каталоги в самом изображении mysql для получения более подробной информации.

Если /my/custom/config-file.cnf - это путь и имя вашего пользовательского файла конфигурации, вы можете запустить контейнер mysql.как это (обратите внимание, что в этой команде используется только путь к каталогу пользовательского файла конфигурации):

$ docker run --name some-mysql -v /my/custom:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag

Это запустит новый контейнер some-mysql, где экземпляр MySQL использует комбинированный запускнастройки от /etc/mysql/my.cnf и /etc/mysql/conf.d/config-file.cnf, причем настройки последнего имеют приоритет.

...