mysql中没有找到类似于my.ini的配置文件,只找到有etc/mysql/conf.d的目录,那么如何配置?

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.cnfDocker 镜像专用,仅少量参数(小文件)❌ 不推荐修改
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

这是最干净、最标准、安全的方式。

发表回复