MySQL配置文件
MySQL 配置文件详解:路径、优先级与核心参数
MySQL 的配置文件(通常名为 my.cnf 或 my.ini)用于设置数据库实例的运行参数(如端口、缓存大小、字符集等)。若未指定配置文件,MySQL 会使用编译时的默认参数启动。本文详细解析配置文件的查找路径、优先级及常用配置。
配置文件的查找路径与优先级
MySQL 启动时会按固定顺序查找配置文件,若多个文件中存在相同参数,后读取的文件会覆盖前面的配置。
查看配置文件路径
通过以下命令可查看当前 MySQL 实例查找配置文件的顺序:
mysql --help | grep "my.cnf" # Linux/Mac
或
mysqld --help --verbose | findstr "my.cnf" # Windows
典型输出(Linux 为例):
order of preference, my.cnf, $MYSQL_TCP_PORT,
/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf /usr/local/mysql/bin/my.cnf ~/.my.cnf
- 路径说明:
/etc/my.cnf:系统级配置(对所有用户生效)。/etc/mysql/my.cnf:MySQL 专用系统配置目录。/usr/local/mysql/etc/my.cnf:MySQL 安装目录下的配置(适用于源码安装)。~/.my.cnf:用户级配置(仅对当前用户生效)。
优先级规则
- 按列出的路径顺序依次读取,越靠后的文件优先级越高。
- 若参数在多个文件中重复,以最后一个文件的配置为准。
- 命令行参数(如
mysqld --port=3307)优先级最高,会覆盖配置文件中的同名参数。
配置文件的基本结构
配置文件采用 “分段式” 结构,不同模块的参数放在对应的 [分段名] 下:
# 全局配置(对所有模块生效)
[mysqld]
port = 3306 # 端口号
datadir = /var/lib/mysql # 数据文件存储目录
socket = /var/lib/mysql/mysql.sock # 套接字文件路径
character-set-server = utf8mb4 # 服务器默认字符集
# MySQL 客户端配置(如 mysql 命令行工具)
[mysql]
default-character-set = utf8mb4 # 客户端默认字符集
prompt = [\\u@\\h \\d]\\> # 命令行提示符格式(用户名@主机 数据库>)
# mysqld_safe 脚本配置(用于启动 MySQL 服务)
[mysqld_safe]
log-error = /var/log/mysqld.log # 错误日志路径
pid-file = /var/run/mysqld/mysqld.pid # 进程ID文件路径
- 常用分段:
[mysqld]:核心服务配置(最常用,设置服务器参数)。[mysql]:客户端工具配置(如mysql命令行)。[mysqld_safe]:与服务启动相关的配置(如日志、进程文件)。[client]:所有客户端工具的通用配置(如mysql、mysqldump)。
核心配置参数详解
基础服务参数
[mysqld]
port = 3306 # 服务端口(默认3306)
datadir = /var/lib/mysql # 数据目录(必须存在,权限为 mysql:mysql)
socket = /tmp/mysql.sock # 本地连接的套接字文件路径
pid-file = /var/run/mysqld/mysqld.pid # 进程ID文件
user = mysql # 运行MySQL的系统用户(通常为mysql)
字符集与校对规则
[mysqld]
character-set-server = utf8mb4 # 服务器默认字符集(支持emoji)
collation-server = utf8mb4_unicode_ci # 服务器默认校对规则(不区分大小写)
[mysql]
default-character-set = utf8mb4 # 客户端字符集
- 推荐使用
utf8mb4(兼容utf8,且支持 4 字节字符如 emoji),避免使用utf8(实际是 utf8mb3,不支持 4 字节字符)。
日志配置
[mysqld]
# 错误日志(记录启动、运行错误)
log-error = /var/log/mysql/error.log
# 慢查询日志(记录执行时间超过 long_query_time 的SQL)
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2 # 慢查询阈值(秒)
# 二进制日志(用于主从复制、数据恢复)
log_bin = /var/log/mysql/binlog
binlog_expire_logs_seconds = 604800 # 日志过期时间(7天,单位秒)
server-id = 1 # 服务器唯一ID(主从复制必需)
性能优化参数
[mysqld]
# 缓存设置
innodb_buffer_pool_size = 1G # InnoDB缓冲池大小(建议设为物理内存的50%-70%)
key_buffer_size = 64M # MyISAM索引缓存大小(若使用MyISAM表)
# 连接设置
max_connections = 1000 # 最大并发连接数
wait_timeout = 600 # 连接空闲超时时间(秒)
# 临时表设置
tmp_table_size = 64M # 内存临时表最大大小
max_heap_table_size = 64M # 内存表最大大小
配置文件的修改与生效
修改配置:
用文本编辑器(如vim)修改对应路径的配置文件,例如:sudo vim /etc/my.cnf重启服务使配置生效:
Linux(systemd) sudo systemctl restart mysqld Linux(sysvinit) sudo service mysqld restart Windows(命令提示符,管理员权限) net stop mysql net start mysql验证配置:
登录 MySQL 后查询参数值,确认修改是否生效:-- 查看端口号 SHOW VARIABLES LIKE 'port'; -- 查看字符集 SHOW VARIABLES LIKE 'character_set_server';
注意事项
权限问题:
配置文件及数据目录的权限需正确设置(通常为mysql:mysql),否则 MySQL 可能无法启动。参数兼容性:
部分参数(如query_cache_size)在 MySQL 8.0 中已废弃,需根据版本调整配置。备份配置:
修改配置前建议备份原文件(如cp /etc/my.cnf /etc/my.cnf.bak),以便出错时恢复。多实例配置:
若一台服务器运行多个 MySQL 实例,需为每个实例指定独立的配置文件(如my3307.cnf),启动时通过--defaults-file指定:mysqld --defaults-file=/etc/my3307.cnf &