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

Docker MySQL 8如何设置--secure file priv,mysql,docker,parameter-passing,config,Mysql,Docker,Parameter Passing,Config,我想解决这个问题: 错误1290(HY000):MySQL服务器正在使用--secure file priv选项运行,因此无法执行此语句 在docker上的图像 命令: SHOW VARIABLES LIKE "secure_file_priv"; 给出: +------------------+-------+ | Variable_name | Value | +------------------+-------+ | secure_file_priv | NULL | +---

我想解决这个问题:

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

在docker上的图像

命令:

SHOW VARIABLES LIKE "secure_file_priv";
给出:

+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| secure_file_priv | NULL  |
+------------------+-------+
1 row in set (0.01 sec)
是否可以使用官方MySQL 8 Docker映像覆盖--secure文件priv的默认值NULL

此图像中的默认值设置为NULL

在使用docker run或create时,我希望只设置一个环境变量或参数,而不是自带配置文件

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

根据,您可以通过命令行传递
--secure file priv=dir\u name
来配置
安全文件priv

secure file priv可能的值为:空字符串、dirname或NULL,如privous url中所述

发件人:

没有cnf文件的配置:许多配置选项可以作为标志传递给mysqld。这将使您能够灵活地自定义容器,而不需要cnf文件。例如,如果要将所有表的默认编码和排序规则更改为使用UTF-8(utf8mb4),只需运行以下命令:

因此,在我们的情况下是这样的:

dir\u name应该是容器中的一个目录,否则会出现以下错误:
mysqld:dir\u name上的realpath()错误(错误2-没有这样的文件或目录)

现在我们的改变是通过MySQL实现的

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

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

使用自定义MySQL配置文件:MySQL的默认配置可以在/etc/MySQL/my.cnf中找到,它可能会!includedir其他目录,如/etc/mysql/conf.d或/etc/mysql/mysql.conf.d。请检查mysql映像本身中的相关文件和目录以了解更多详细信息

如果/my/custom/config-file.cnf是自定义配置文件的路径和名称,则可以这样启动mysql容器(请注意,此命令中仅使用自定义配置文件的目录路径):


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

有没有办法将
dir
通过
--secure file priv
作为MySQL命令的工作目录,如
LOAD DATA infle'…
,这样就可以执行
LOAD DATA infle./file.csv'.
而不是
LOAD DATA infle'.
“安全文件priv dir/file.csv”…
?我试图将该目录作为选项
-w“secure file priv dir”
传递给docker run,但似乎没有任何效果。嗯,我不确定,但在测试
加载数据后,我发现它通过
/var/lib/mysql
工作,所以在你做
加载数据填充'/file.csv'
时,它实际上意味着
/var/lib/mysql/file.csv
根据我的测试,理论上你可以将
安全文件priv dir
的值设置为
/var/lib/mysql
,但总的来说,我不确定这是否正确会正常使用还是不好知道,最初我想把文件放到
/var/lib/mysql
中,但我决定最好有一个单独的目录,让您处理并放置csv文件/删除它们,因为想要
加载数据填充的用户不需要访问mysql存储数据库数据的目录。(
/var/lib/mysql
)。
$ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag --secure-file-priv=dir_name
mysql> SHOW VARIABLES LIKE "secure_file_priv";
+------------------+----------+
| Variable_name    | Value    |
+------------------+----------+
| secure_file_priv | dir_name |
+------------------+----------+

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