空my.cnf是否需填入SHOW VARIABLES列出的MySQL配置变量
结论
不需要手动将SHOW VARIABLES列出的所有变量写入my.cnf文件。
原因说明
- 你当前看到的my.cnf并非无效配置,文件末尾的
!includedir /etc/mysql/conf.d/是配置加载指令,MySQL启动时会自动遍历加载该目录下所有后缀为.cnf的配置文件,默认还会加载/etc/mysql/mysql.conf.d/目录下的配置(Debian系MySQL的核心服务参数一般存放在这个目录的mysqld.cnf文件中)。Debian系的MySQL默认采用拆分配置的结构,不会把所有参数都堆在主my.cnf文件里,你当前生效的参数,一部分来自其他拆分配置文件,一部分来自MySQL内置的编译默认值,还有部分来自启动时传入的命令行参数,不写在主my.cnf里也能正常生效。 - 你贴出的变量输出基本都是MySQL 8.0的默认值:
admin_port默认就是33062、admin_tls_version默认支持TLSv1.2和TLSv1.3、lc_messages_dir默认对应安装版本的消息文件路径、socket类文件默认存放在/var/run/mysqld/目录、SSL相关证书私钥默认读取数据目录下的pem文件,这类参数哪怕完全不写入任何配置文件,MySQL启动时也会自动按默认值加载。
注意事项
- 只有当你需要修改参数默认值、自定义服务行为时,才需要把对应参数写入配置文件。比如调整内存缓冲区大小、修改最大连接数、更换服务端口、调整数据存储路径这类个性化需求,再把对应参数按配置段写入my.cnf或者
conf.d目录下的自定义配置文件即可。 - 不要盲目把所有运行时变量抄入配置文件:冗余的静态配置会增加后续维护成本,一旦MySQL版本升级调整了默认参数的合理值,你写死的配置会覆盖新默认值,容易引发兼容问题;另外部分运行时变量是服务动态生成的状态值,不支持写在静态配置文件里,乱加反而可能导致MySQL启动失败。
- 如果你想查看当前所有配置的加载来源,可以执行
mysqld --verbose --help命令,输出内容里会标注每个参数的最终取值和对应的加载位置。
内容的提问来源于stack exchange,提问作者user6642297
相关产品推荐
相关产品推荐

