mysql配置文件位置,如何解决配置文件不生效的问题?
发布于 作者:苏南大叔 来源:程序如此灵动~

本文中,苏南大叔要解决的问题是:mysql
的配置文件my.cnf
不生效的问题。确定修改的文件没错,但怎么重启都不生效。该如何解决这样的问题呢?调试的龙套对象,依然还是docker
版本的mysql:latest
,实际的版本号是mysql@9.3.0
。
苏南大叔的“程序如此灵动”博客,记录苏南大叔的代码编程经验总结。测试环境:win10
,docker@28.0.4
,mysql@5.7.44
,heidisql@12.10.0.7000
。虽然是在windows
系统下,但是因为使用了docker
,所以配置文件是my.cnf
,而不是my.ini
。
docker 安装 mysql:latest
因为通过docker
安装mysql
,会涉及到“目录映射”的问题,换句话说,就是会涉及到配置文件路径的问题。所以,这里提前贴出实验使用的mysql
容器安装命令。
执行下面的命令之前,请保证d:/data/mysql/my.cnf
文件存在,否则可能会错误的变成一个目录。
if not exist d:/data/mysql/my.cnf echo. > d:/data/mysql/my.cnf
docker run -d ^
--name mysql-container ^
--restart always ^
-e MYSQL_ROOT_PASSWORD=root ^
-e MYSQL_DATABASE=sunan_db ^
-v d:/data/mysql/my.cnf:/etc/mysql/my.cnf ^
-v d:/data/mysql/conf:/etc/mysql/conf.d ^
-v d:/data/mysql/data:/var/lib/mysql ^
-v d:/data/mysql/log:/var/log/mysql ^
-p 3306:3306 ^
mysql:5.7
这个my.cnf
【注意:后缀不是.conf
!】的路径在容器里面的路径是/etc/mysql/my.cnf
。因为my.cnf
的位置多样性,不排除有其他的映射方式,具体问题具体分析。
症状描述
实验的过程中,苏南大叔为了解决中文乱码的问题,修改了default-charset
。但是,重启之后没生效。如下图所示:
SHOW VARIABLES LIKE '%character%';
SHOW VARIABLES LIKE '%collation%';
查看配置文件文件位置
因为好多个位置的my.cnf
文件,都可以生效。所以,进入mysql
容器,进行检查。
docker exec -it <container_name> bash
使用如下命令,查看到底使用的是哪个配置文件。
mysql --help | grep "Default options" -A 1
通过这个命令,得到了默认文件位置有:
Default options are read from the following files in the given order:
/etc/my.cnf
/etc/mysql/my.cnf
/usr/etc/my.cnf
~/.my.cnf
World-writable
上述命令同时得到了这么一个警告信息:
mysql: [Warning] World-writable config file '/etc/mysql/my.cnf' is ignored.
大意就是:MySQL
配置文件/etc/mysql/my.cnf
的权限设置过于开放(world-writable
),因此被MySQL
忽略了。意味着所有用户都有写入该文件的权限,这样做会带来安全风险。
对于数据库配置文件来说,在大多数情况下只需要数据库管理员或者root
用户有读写权即可。如果所有人都可以修改这些配置信息,则可能会导致数据泄露或者其他安全问题。
解决方案
进入容器操作界面。然后使用ls -l
命令查看/etc/mysql/my.cnf
的当前权限:
ls -l /etc/mysql/my.cnf
如果是world-writable
的,会看到下面的类似内容:
-rwxrwxrwx 1 root root /etc/mysql/my.cnf
否则会看到下面的类似内容:
-rw-r--r-- 1 root root /etc/mysql/my.cnf
-rwxrwxrwx
说明该配置文件确实是对所有人开放了读、写和执行权利。需要修改这个文件的权限,使其只有root用户有读写权,其他用户只有读的权限:
chmod 644 /etc/mysql/my.cnf
重启容器,症状消失,mysql
顺利读取到了配置文件。配置修改生效!
结语
苏南大叔写的mysql
相关经验文章,请点击:


