Docker MySQL 8 如何设置 --secure-file-priv

Jim*_*mix 4 mysql config parameter-passing docker

我想解决这个问题:

错误 1290 (HY000):MySQL 服务器正在使用 --secure-file-priv 选项运行,因此无法执行此语句

使用docker 上的官方 MySQL 8镜像。

命令:

SHOW VARIABLES LIKE "secure_file_priv";
Run Code Online (Sandbox Code Playgroud)

给出:

+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| secure_file_priv | NULL  |
+------------------+-------+
1 row in set (0.01 sec)
Run Code Online (Sandbox Code Playgroud)

是否可以使用官方 MySQL 8 Docker 映像覆盖 --secure-file-priv 的默认值 NULL?

此图像中的默认值设置为 NULL config/my.cnf

完美地我想在使用 docker run 或 create 时只设置一个环境变量或参数,而不是使用我自己的配置文件。

但如果这是不可能的,那么如何使用自定义配置文件?是否有可能自定义文件只是覆盖了这一参数,而将其他参数保留在官方映像配置中?

Mos*_*ein 11

根据此文档,您可以secure-file-priv通过命令行进行配置--secure-file-priv=dir_name

secure-file-priv 可能的值是:空字符串、目录名或 NULL,如 privous 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
Run Code Online (Sandbox Code Playgroud)

所以在我们的例子中会是这样的:

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
Run Code Online (Sandbox Code Playgroud)

现在我们的更改已在 MySQL 中提交

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

Run Code Online (Sandbox Code Playgroud)

或者,您可以使用自定义配置文件,如下所述:

使用自定义 MySQL 配置文件MySQL的默认配置可以在 /etc/mysql/my.cnf 中找到,其中可能 !includedir 附加目录,例如 /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
Run Code Online (Sandbox Code Playgroud)

这将启动一个新容器some-mysql,其中 MySQL 实例使用来自/etc/mysql/my.cnf和的组合启动设置/etc/mysql/conf.d/config-file.cnf,后者的设置优先。

  • 很高兴知道,我最初想将文件放入 `/var/lib/mysql` 中,但我决定最好有一个单独的目录来处理并放置 csv 文件/删除它们,因为用户想要`LOAD DATA INFILE`不需要访问mysql存储数据库数据的目录的权限。(`/var/lib/mysql`)。 (2认同)