MySQL 配置文件(通常是 my.cnf 或 my.ini)是控制 MySQL 服务行为的核心文件。正确配置它,能显著提升性能、稳定性和安全性。关键不在于堆参数,而在于理解每个常用参数的实际作用和适用场景。
配置文件位置与加载顺序
MySQL 启动时会按固定顺序读取多个配置文件,找到第一个有效配置即停止搜索。常见路径包括:
/etc/my.cnf(Linux 系统级) /etc/mysql/my.cnf /usr/etc/my.cnf ~/.my.cnf(当前用户家目录,仅对客户端生效)可通过命令 mysql --help | grep "Default options" 查看实际加载路径。建议优先使用 /etc/my.cnf,避免多处配置冲突。
核心性能相关参数详解
以下参数直接影响查询响应、并发能力和内存使用,需根据服务器内存和业务负载合理设置:
innodb_buffer_pool_size:InnoDB 缓存数据和索引的内存区域。生产环境建议设为物理内存的 50%–75%(例如 16GB 内存可设为 12G)。过小会导致频繁磁盘读,过大可能挤占系统其他资源。 max_connections:最大允许并发连接数。默认 151,高并发 Web 应用常需调至 500–2000。注意同时检查操作系统文件描述符限制(ulimit -n)是否足够。 innodb_log_file_size:单个重做日志(redo log)文件大小。增大可减少 checkpoint 频率,提升写入性能,但恢复时间略长。常见值为 256M–1G,修改后需停库删除旧日志并重启。 query_cache_type 和 query_cache_size:MySQL 8.0 已移除查询缓存,5.7 及更早版本中若应用以读为主且 SQL 高度重复可启用,但多数 OLTP 场景建议关闭(设为 0),避免缓存失效开销。安全与基础运行参数
这些参数保障服务基本可用性与最小安全边界:
bind_address:指定 MySQL 监听的 IP。设为 127.0.0.1 仅本地访问;设为 0.0.0.0 允许所有网络接入(需配合防火墙严格控制)。 skip_name_resolve:跳过 DNS 反向解析,加快连接建立,尤其在无内网 DNS 时必开。 sql_mode:定义 SQL 语法和数据校验严格程度。推荐使用 STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION,避免隐式类型转换导致的数据异常。 log_error 和 slow_query_log:必须开启错误日志;慢查询日志(slow_query_log_file + long_query_time=2)是性能分析的基础。配置生效与验证方法
修改配置后不会自动生效,必须重启或动态刷新(部分参数支持):
重启服务:systemctl restart mysqld(CentOS/RHEL)或 service mysql restart(Ubuntu/Debian) 验证是否加载:登录 MySQL 执行 SELECT @@version_compile_os, @@datadir; 并检查变量值是否符合预期 查看运行时参数:SHOW VARIABLES LIKE 'innodb_buffer_pool_size'; 或 SHOW GLOBAL VARIABLES; 确认参数是否被覆盖:执行 SELECT * FROM performance_schema.variables_info WHERE VARIABLE_NAME = 'max_connections';(MySQL 5.7+)可查来源配置文件