跳至内容

MySQL配置

本文提供一份生产可用的 MySQL 配置参考(my.cnf / mysqld 段),并逐一解释各关键参数的含义与推荐值。

[mysqld]
# 基础设置
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

# 二进制日志配置
server-id=1
log-bin=mysql-bin
binlog_format=ROW
binlog_row_image=MINIMAL
binlog_row_value_options=PARTIAL_JSON
expire_logs_days=7
max_binlog_size=500M

# 网络和数据包设置
max_allowed_packet=1G
max_connections=200
wait_timeout=600
interactive_timeout=600

# InnoDB 引擎优化
innodb_buffer_pool_size=12G
innodb_log_file_size=1G
innodb_log_buffer_size=64M
innodb_flush_log_at_trx_commit=1
innodb_flush_method=O_DIRECT
innodb_file_per_table=ON
innodb_buffer_pool_instances=8

# 其他优化
skip_name_resolve=ON
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
transaction_isolation=READ-COMMITTED
query_cache_type=0
query_cache_size=0
tmp_table_size=256M
max_heap_table_size=256M
参数含义
datadir数据库的数据文件目录,默认路径 /var/lib/mysql。所有的 .frm.ibd.ib_logfile 文件均存储于此。
socket指定 Unix Socket 文件路径,供本地连接 MySQL 使用,适用于性能敏感场景。
log-error错误日志输出文件路径。记录服务器启动、关闭、运行过程中的错误信息,便于排错。
pid-file存放进程 ID 的文件路径,MySQL 启动后会将主进程 PID 写入此文件。
server-id服务器唯一标识,主从复制必须设置不同的 server-id
log-bin启用二进制日志并指定日志文件前缀,用于主从同步、数据恢复、审计。
binlog_format设置 binlog 格式。ROW 表示记录每一行数据的变更,更精确。
binlog_row_imageMINIMAL 表示只记录变更字段,减少日志体积。
binlog_row_value_optionsPARTIAL_JSON 是 8.0.21+ 的新功能,只记录被修改的 JSON 字段路径,优化 binlog 存储。
expire_logs_days二进制日志保留天数,过期自动清理。建议设置避免占满磁盘。
max_binlog_size单个 binlog 文件最大大小,超过后自动切换到新文件。
max_allowed_packet客户端/服务器能处理的最大数据包大小,防止传输大型 BLOB 或 JSON 时失败。默认 64MB,这里设置为 1G。
max_connections最大并发连接数。设置为 200,避免服务器过载。
wait_timeout非交互连接的空闲超时时间(秒),超过后自动断开。
interactive_timeout交互式连接(如 MySQL CLI)的超时设置。
innodb_buffer_pool_sizeInnoDB 缓冲池大小,决定了数据和索引缓存空间,建议设置为系统内存的 60~80%。
innodb_log_file_size每个 redo log 文件的大小,增大可减少 checkpoint 频率。
innodb_log_buffer_sizeRedo log 缓冲区大小,事务较多时可适当增大。
innodb_flush_log_at_trx_commit设置为 1,表示每次提交事务时都将日志刷新到磁盘,最安全但影响性能。
innodb_flush_method=O_DIRECT避免双缓存(OS Cache + InnoDB Cache),提升写入效率。
innodb_file_per_table每个表使用独立的 .ibd 文件,便于表空间管理。
innodb_buffer_pool_instances缓冲池分区个数,提高并发性能,适用于多核机器。
skip_name_resolve禁用 DNS 解析,避免连接延迟,要求用户权限中使用 IP 而非主机名。
character-set-server设置服务器默认字符集为 utf8mb4,支持 Emoji。
collation-server设置默认排序规则为 utf8mb4_unicode_ci,大小写不敏感,兼容性强。
transaction_isolation设置事务隔离级别为 READ-COMMITTED,防止脏读,兼顾性能。
query_cache_type禁用查询缓存(已废弃),防止性能问题。
query_cache_size查询缓存大小设为 0。
tmp_table_size / max_heap_table_size控制内存临时表最大大小,超出将写入磁盘。
最后更新于