MySQL配置

MySQL配置文件参数完全指南

MySQL 8.0 MySQL 5.7

MySQL 8.0

关系型数据库管理系统

配置文件 my.cnf / my.ini
参数数量 500+
最后更新 2024-01-15

配置文件位置

/etc/my.cnf
/etc/mysql/my.cnf
~/.my.cnf

配置类别

常规 内存 InnoDB 复制 安全 性能 日志

相关工具

找到 0 个配置参数

常规配置

MySQL服务基本配置,包括端口、数据目录、字符集等

port 常规 所有版本

MySQL服务监听端口

默认: 3306 类型: 整数

说明

MySQL服务监听的TCP端口。可以更改为其他端口以避免冲突或增强安全性。

配置示例

[mysqld]
# 默认端口
port = 3306

# 自定义端口
port = 3307
高影响
需要重启生效
datadir 常规 所有版本

MySQL数据文件存储目录

默认: /var/lib/mysql 类型: 路径

说明

指定MySQL数据文件的存储位置,包括数据库、表、索引等。生产环境建议使用高性能存储(如SSD)并确保有足够的磁盘空间。

重要: 修改此参数需要迁移现有数据,操作前请备份!

配置示例

[mysqld]
# Linux默认路径
datadir = /var/lib/mysql

# Windows默认路径
datadir = C:/ProgramData/MySQL/MySQL Server 8.0/Data

# 自定义路径(使用SSD)
datadir = /ssd/mysql/data
高影响
需要重启生效
max_connections 性能 常规 所有版本

最大客户端连接数

默认: 151 类型: 整数

说明

设置MySQL服务器允许的最大并发连接数。需要根据服务器内存和应用需求进行调整。每个连接会占用一定内存(约256KB-几MB)。

计算: 连接数 × 每个连接内存 ≈ 总连接内存占用

配置示例

[mysqld]
# 默认值
max_connections = 151

# 小型应用
max_connections = 300

# 大型应用
max_connections = 1000

# 监控当前连接数
SHOW STATUS LIKE 'Threads_connected';
内存占用估算
约300MB (1000连接)

假设每个连接占用300KB内存

高影响
需要重启生效

内存配置

MySQL内存分配和缓存配置

InnoDB缓冲池 50%
查询缓存 15%
排序缓冲区 10%
连接缓冲区 10%
操作系统 15%
innodb_buffer_pool_size 内存 InnoDB 所有版本

InnoDB缓冲池大小

默认: 128M 类型: 字节

说明

InnoDB缓冲池是InnoDB存储引擎的核心内存区域,用于缓存数据和索引。设置合理的缓冲池大小对性能有极大影响。通常设置为系统内存的50-80%。

最重要: 这是MySQL性能调优中最重要的参数!

配置示例

[mysqld]
# 系统内存为8GB时,设置为6GB
innodb_buffer_pool_size = 6G

# 系统内存为16GB时,设置为12GB
innodb_buffer_pool_size = 12G

# 动态调整(MySQL 5.7+)
innodb_buffer_pool_size = 4G
innodb_buffer_pool_chunk_size = 128M
innodb_buffer_pool_instances = 4

内存分配建议

系统内存 推荐值 百分比 说明
2GB 1GB 50% 小内存服务器
8GB 6GB 75% 中等服务器
16GB 12GB 75% 生产服务器
32GB 24GB 75% 大型数据库
64GB+ 48GB+ 75% 高端服务器
高影响
需要重启生效
key_buffer_size 内存 所有版本

MyISAM索引缓冲区大小

默认: 8M 类型: 字节

说明

MyISAM存储引擎的索引缓冲区大小。如果主要使用InnoDB引擎,此参数可以设置较小值。如果使用MyISAM表,建议设置为可用内存的25%。

注意: MyISAM已过时,新项目应使用InnoDB引擎。

配置示例

[mysqld]
# 纯InnoDB环境,设置较小值
key_buffer_size = 16M

# MyISAM环境,系统内存8GB时
key_buffer_size = 2G
中影响
需要重启生效
query_cache_size 内存 性能 所有版本

查询缓存大小

默认: 1M 类型: 字节

说明

MySQL查询缓存存储SELECT查询结果。在MySQL 8.0中已移除。对于MySQL 5.7及以下版本,在写多读少的场景中,查询缓存可能降低性能。

MySQL 8.0: 查询缓存功能已完全移除!

配置示例

[mysqld]
# MySQL 5.7:禁用查询缓存
query_cache_type = 0
query_cache_size = 0

# MySQL 5.7:启用查询缓存(256MB)
query_cache_type = 1
query_cache_size = 256M
中影响
需要重启生效

InnoDB配置

InnoDB存储引擎核心配置

InnoDB优势

  • 支持ACID事务
  • 行级锁,高并发
  • 外键约束支持
  • 崩溃恢复能力

默认存储引擎

MySQL 5.5+

从MySQL 5.5开始,InnoDB成为默认存储引擎

innodb_log_file_size InnoDB 所有版本

InnoDB重做日志文件大小

默认: 48M 类型: 字节

说明

每个InnoDB重做日志文件的大小。较大的日志文件可以减少checkpoint频率,提高写性能,但会增加崩溃恢复时间。通常设置为缓冲池大小的25%左右。

配置示例

[mysqld]
# 缓冲池为6GB时,设置日志文件为1.5GB
innodb_log_file_size = 1536M

# 缓冲池为12GB时,设置日志文件为3GB
innodb_log_file_size = 3G
高影响
需要重启生效
innodb_flush_log_at_trx_commit InnoDB 所有版本

事务提交时日志刷新策略

默认: 1 类型: 0/1/2

说明

控制事务提交时InnoDB日志刷新到磁盘的方式,影响性能和数据安全性。

参数值说明

说明 性能 数据安全 适用场景
0 每秒写入并刷新日志到磁盘 最高 最低 可容忍数据丢失
1 每次事务提交都写入并刷新(默认) 最低 最高 金融交易等
2 每次事务提交都写入,每秒刷新 中等 中等 推荐,平衡

配置示例

[mysqld]
# 默认:最高数据安全,较低性能
innodb_flush_log_at_trx_commit = 1

# 推荐:平衡性能和数据安全
innodb_flush_log_at_trx_commit = 2

# 高性能:可容忍少量数据丢失
innodb_flush_log_at_trx_commit = 0
高影响
无需重启

性能调优

优化MySQL性能的关键参数

性能指标

QPS (查询/秒) 5,000+
TPS (事务/秒) 1,000+
连接响应时间 < 10ms

调优建议

  • 合理设置innodb_buffer_pool_size
  • 使用连接池减少连接开销
  • 优化查询语句和索引
  • 定期分析慢查询日志
sort_buffer_size 性能 内存 所有版本

排序缓冲区大小

默认: 256K 类型: 字节

说明

每个需要进行排序的线程分配的缓冲区大小。如果有很多复杂排序操作,可以适当增加此值。但设置过大会导致内存浪费。

配置示例

[mysqld]
# 默认值
sort_buffer_size = 256K

# 有大量排序操作时
sort_buffer_size = 2M

# 查看排序状态
SHOW STATUS LIKE 'Sort%';
低影响
需要重启生效
read_buffer_size 性能 所有版本

顺序读取缓冲区大小

默认: 128K 类型: 字节

说明

MyISAM表顺序扫描时分配的缓冲区大小。对于InnoDB表影响较小。如果有很多顺序扫描操作,可以适当增加。

配置示例

[mysqld]
# 默认值
read_buffer_size = 128K

# 有大量顺序扫描时
read_buffer_size = 1M
低影响
需要重启生效

配置示例

完整的MySQL配置文件示例

生产环境配置示例 (8GB内存)

适用于高并发、高可用的生产环境

# ================================ 生产环境MySQL配置 (8GB内存) ================================

[mysqld]

# 常规配置
port = 3306
bind-address = 0.0.0.0
datadir = /var/lib/mysql
socket = /var/lib/mysql/mysql.sock

# 字符集配置
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect = 'SET NAMES utf8mb4'

# 连接配置
max_connections = 500
max_connect_errors = 1000
connect_timeout = 10
wait_timeout = 28800
interactive_timeout = 28800

# 内存配置 (8GB系统内存)
innodb_buffer_pool_size = 6G
innodb_buffer_pool_instances = 4
innodb_log_file_size = 1G
innodb_log_buffer_size = 64M
key_buffer_size = 32M
query_cache_size = 0
query_cache_type = 0

# InnoDB配置
innodb_file_per_table = 1
innodb_flush_log_at_trx_commit = 2
innodb_flush_method = O_DIRECT
innodb_lock_wait_timeout = 50

# 性能调优
sort_buffer_size = 2M
read_buffer_size = 1M
read_rnd_buffer_size = 1M
join_buffer_size = 2M
tmp_table_size = 64M
max_heap_table_size = 64M

# 日志配置
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2
log_queries_not_using_indexes = 1
log_error = /var/log/mysql/error.log

# 安全配置
skip-name-resolve
# 注意:requirepass在my.cnf中使用时要注意安全,建议通过其他方式设置密码

[mysqld_safe]
log-error = /var/log/mysql/error.log
pid-file = /var/run/mysqld/mysqld.pid

配置说明

  • 针对8GB内存服务器优化
  • 使用utf8mb4字符集,支持完整Unicode
  • 设置500个最大连接数
  • InnoDB缓冲池设置为6GB(系统内存的75%)
  • 禁用查询缓存(MySQL 5.7)
  • 平衡性能和数据安全(innodb_flush_log_at_trx_commit=2)
  • 启用慢查询日志,便于性能分析

开发环境配置示例 (4GB内存)

适用于本地开发和测试环境

# ================================ 开发环境MySQL配置 (4GB内存) ================================

[mysqld]

# 常规配置
port = 3306
bind-address = 127.0.0.1
datadir = /usr/local/mysql/data
socket = /tmp/mysql.sock

# 字符集配置
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

# 连接配置
max_connections = 200
connect_timeout = 10
wait_timeout = 28800
interactive_timeout = 28800

# 内存配置 (4GB系统内存)
innodb_buffer_pool_size = 2G
key_buffer_size = 16M
query_cache_size = 0
query_cache_type = 0

# InnoDB配置
innodb_file_per_table = 1
innodb_flush_log_at_trx_commit = 1

# 性能调优
sort_buffer_size = 256K
read_buffer_size = 128K
read_rnd_buffer_size = 256K
join_buffer_size = 256K

# 日志配置
slow_query_log = 1
slow_query_log_file = /usr/local/mysql/data/slow.log
long_query_time = 5

# 其他配置
skip-external-locking
skip-name-resolve

[mysqldump]
quick
max_allowed_packet = 16M

[mysql]
no-auto-rehash

配置说明

  • 针对4GB内存开发机优化
  • 仅绑定到localhost,安全性足够
  • 使用utf8mb4字符集
  • 设置200个最大连接数
  • InnoDB缓冲池设置为2GB(系统内存的50%)
  • 禁用查询缓存
  • 启用慢查询日志,阈值5秒
  • 简化配置,便于开发调试