MySQL 目录里没有 my.cnf/my.ini,只看到 /etc/mysql/conf.d/ 下的几个 .cnf 文件(docker.cnf、mysql.cnf、mysqldump.cnf)。
这是非常正常的,因为许多 Linux / Docker 的 MySQL 镜像并不会使用单独的 my.cnf,而是采用 目录结构加载配置。
✅ 1. MySQL 配置文件优先级(Linux)
MySQL 5.7/8.0 默认会按顺序读取这些路径:
/etc/my.cnf
/etc/mysql/my.cnf
/etc/mysql/conf.d/*.cnf
/etc/mysql/mysql.conf.d/*.cnf
只要你把配置放在这些路径之一,MySQL 都会自动加载。
📌 如果你找不到 my.cnf,那就意味着 MySQL 采用 “目录加载配置” 模式。
✅ 2. 哪个文件可以修改?
你看到的三个文件作用如下:
| 文件名 | 作用 | 能不能放你的配置? |
|---|---|---|
| docker.cnf | Docker 镜像专用,仅少量参数(小文件) | ❌ 不推荐修改 |
| mysql.cnf | 主配置入口,但通常内容很少 | ✔️ 可以修改 |
| mysqldump.cnf | 仅 mysqldump 工具使用 | ❌ 不能修改 |
👉 正确的做法是:在 /etc/mysql/conf.d/ 目录下创建一个新的配置文件,例如:
/etc/mysql/conf.d/custom.cnf
并写入你的配置。
这是 MySQL 官方推荐的方式。
✅ 3. 建议你新建:/etc/mysql/conf.d/custom.cnf
例如:
sudo nano /etc/mysql/conf.d/custom.cnf
写入你的参数:
[mysqld]
# 字符集配置
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
# InnoDB 配置
innodb_buffer_pool_size = 1G
innodb_log_file_size = 256M
innodb_flush_log_at_trx_commit = 2
innodb_file_per_table = ON
# 查询缓存(5.7 支持,8.0 已移除)
query_cache_type = 1
query_cache_size = 64M
# 连接配置
max_connections = 500
max_connect_errors = 1000
# 临时表配置
tmp_table_size = 64M
max_heap_table_size = 64M
# 慢查询日志
slow_query_log = ON
long_query_time = 2
最后重启 MySQL:
sudo systemctl restart mysql
🔍 4. 如何确认配置是否加载成功?
执行:
mysql --help | grep conf
会显示当前加载的配置路径。
也可以在 MySQL 里查参数:
show variables like 'character_set_server';
show variables like 'innodb_buffer_pool_size';
🛑 重要提醒:MySQL 8.0 不支持 query cache
8.0 会报错:
unknown variable 'query_cache_type'
如果你是 MySQL 8.0,必须把以下三项去掉:
query_cache_type = 1
query_cache_size = 64M
🎯 总结
如果你没有 my.cnf,那就:
✅ 在 /etc/mysql/conf.d/ 下创建 custom.cnf
这是最干净、最标准、安全的方式。