0%

MySQL配置文件

MySQL 配置文件详解:路径、优先级与核心参数

MySQL 的配置文件(通常名为 my.cnfmy.ini)用于设置数据库实例的运行参数(如端口、缓存大小、字符集等)。若未指定配置文件,MySQL 会使用编译时的默认参数启动。本文详细解析配置文件的查找路径、优先级及常用配置。

配置文件的查找路径与优先级

MySQL 启动时会按固定顺序查找配置文件,若多个文件中存在相同参数,后读取的文件会覆盖前面的配置

查看配置文件路径

通过以下命令可查看当前 MySQL 实例查找配置文件的顺序:

1
2
3
mysql --help | grep "my.cnf"  # Linux/Mac
#
mysqld --help --verbose | findstr "my.cnf" # Windows

典型输出(Linux 为例)

1
2
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)优先级最高,会覆盖配置文件中的同名参数。

配置文件的基本结构

配置文件采用 “分段式” 结构,不同模块的参数放在对应的 [分段名] 下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 全局配置(对所有模块生效)
[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]:所有客户端工具的通用配置(如 mysqlmysqldump)。

核心配置参数详解

基础服务参数

1
2
3
4
5
6
[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)

字符集与校对规则

1
2
3
4
5
6
[mysqld]
character-set-server = utf8mb4 # 服务器默认字符集(支持emoji)
collation-server = utf8mb4_unicode_ci # 服务器默认校对规则(不区分大小写)

[mysql]
default-character-set = utf8mb4 # 客户端字符集
  • 推荐使用 utf8mb4(兼容 utf8,且支持 4 字节字符如 emoji),避免使用 utf8(实际是 utf8mb3,不支持 4 字节字符)。

日志配置

1
2
3
4
5
6
7
8
9
10
11
12
13
[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(主从复制必需)

性能优化参数

1
2
3
4
5
6
7
8
9
10
11
12
[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 # 内存表最大大小

配置文件的修改与生效

  1. 修改配置
    用文本编辑器(如 vim)修改对应路径的配置文件,例如:

    1
    sudo vim /etc/my.cnf
  2. 重启服务使配置生效

    1
    2
    3
    4
    5
    6
    7
    8
    9
    # Linux(systemd)
    sudo systemctl restart mysqld

    # Linux(sysvinit)
    sudo service mysqld restart

    # Windows(命令提示符,管理员权限)
    net stop mysql
    net start mysql
  3. 验证配置
    登录 MySQL 后查询参数值,确认修改是否生效:

    1
    2
    3
    4
    5
    -- 查看端口号
    SHOW VARIABLES LIKE 'port';

    -- 查看字符集
    SHOW VARIABLES LIKE 'character_set_server';

注意事项

  1. 权限问题
    配置文件及数据目录的权限需正确设置(通常为 mysql:mysql),否则 MySQL 可能无法启动。

  2. 参数兼容性
    部分参数(如 query_cache_size)在 MySQL 8.0 中已废弃,需根据版本调整配置。

  3. 备份配置
    修改配置前建议备份原文件(如 cp /etc/my.cnf /etc/my.cnf.bak),以便出错时恢复。

  4. 多实例配置
    若一台服务器运行多个 MySQL 实例,需为每个实例指定独立的配置文件(如 my3307.cnf),启动时通过 --defaults-file 指定:

    1
    mysqld --defaults-file=/etc/my3307.cnf &

欢迎关注我的其它发布渠道

表情 | 预览
快来做第一个评论的人吧~
Powered By Valine
v1.3.10