一、基础配置
[mysqld]
# 声明以下配置属于MySQL服务器(mysqld)
[mysqld]:配置文件的模块标识,表示这是 MySQL 服务器的配置段。
二、路径与基础设置
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
pid-file=/var/run/mysqld/mysqld.pid
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
datadir:数据库文件存储路径(表数据、索引等)。
socket:Unix 套接字文件路径(本地客户端通过此文件连接 MySQL)。
pid-file:MySQL 进程 ID 文件路径(用于管理 MySQL 服务)。
character-set-server:服务器默认字符集(utf8mb4支持所有 Unicode 字符,包括 emoji)。
collation-server:字符集排序规则(utf8mb4_unicode_ci表示不区分大小写)。
三、内存配置(最核心)
innodb_buffer_pool_size=5G
innodb_log_buffer_size=64M
key_buffer_size=64M
innodb_buffer_pool_size:InnoDB 存储引擎的缓存池大小(缓存数据和索引)。
建议:设为服务器内存的 50%-70%(示例中 8GB 内存分配 5GB)。值越大,磁盘 IO 越少,性能越好。
innodb_log_buffer_size:InnoDB 日志缓冲区大小(临时存储待写入磁盘的事务日志)。
建议:写操作频繁时调大(如 64M-128M),减少磁盘 IO。
key_buffer_size:MyISAM 引擎的索引缓存(InnoDB 用户可设小值)。
建议:若全用 InnoDB,设为 32M-64M(MySQL 5.7 + 默认 InnoDB,MyISAM 已淘汰)。
四、连接管理
max_connections=500
wait_timeout=300
interactive_timeout=300
max_user_connections=100
max_connections:允许的最大并发连接数。
建议:根据业务峰值调整(如电商秒杀场景可设 1000)。
注意:每个连接约占 1-4MB 内存,避免设置过大导致内存溢出。
wait_timeout/interactive_timeout:非交互式 / 交互式连接的空闲超时时间(秒)。
建议:设为 300 秒(5 分钟),避免空闲连接长期占用资源。
max_user_connections:单个用户的最大连接数。
建议:设为 100-200,防止单个用户耗尽连接资源。
五、InnoDB 引擎优化(重点)
innodb_flush_log_at_trx_commit=1
innodb_file_per_table=1
innodb_flush_method=O_DIRECT
innodb_io_capacity=2000
innodb_read_io_threads=4
innodb_write_io_threads=4
innodb_flush_log_at_trx_commit:事务日志刷新策略(影响安全性与性能)。
1(默认):每次事务提交立即刷盘(最安全,性能略低);
2:提交后写入操作系统缓存,每秒刷盘(性能好,断电可能丢 1 秒数据);
0:每秒刷盘(性能最好,风险最高)。
建议:生产环境优先选1,非核心场景可选2。
innodb_file_per_table:是否为每个表创建独立的.ibd文件。
建议:设为1(开启),方便单独管理表空间(如删除表释放磁盘空间)。
innodb_flush_method:日志 / 数据文件的刷盘方式。
建议:Linux 设为O_DIRECT(避免双重缓存),Windows 忽略此参数。
innodb_io_capacity:InnoDB 的 IO 吞吐量上限(影响后台刷盘效率)。
建议:机械硬盘设 1000,SSD 设 2000-20000(根据实际性能调整)。
innodb_read/write_io_threads:读写 IO 线程数(提升并发 IO 能力)。
建议:根据 CPU 核心数调整(如 4-8 核设为 4-8),默认值为 4。
六、查询优化
slow_query_log=1
long_query_time=1
slow_query_log_file=/var/log/mysql/slow.log
join_buffer_size=512K
sort_buffer_size=2M
slow_query_log:是否开启慢查询日志(记录执行时间超过阈值的 SQL)。
建议:必须开启(设为1),用于定位需要优化的 SQL。
long_query_time:慢查询阈值(秒)。
建议:设为 1 秒(敏感业务可设 0.5 秒)。
slow_query_log_file:慢查询日志存储路径。
建议:确保路径存在且 MySQL 有写入权限。
join_buffer_size/sort_buffer_size:表连接(JOIN)和排序(ORDER BY)的缓存大小。
建议:不宜过大(每个连接独立分配),避免内存溢出。
七、其他重要参数
max_allowed_packet=128M
table_open_cache=2048
thread_cache_size=32
log_error=/var/log/mysql/error.log
max_allowed_packet:单个 SQL 语句 / 数据包的最大大小。
建议:若有大字段(如 TEXT/BLOB)或批量插入,设为 128M-1G(避免 “Packet too large” 错误)。
table_open_cache:表缓存(缓存打开的表文件描述符)。
建议:根据数据库表数量调整(如 1000 张表设 2048),减少重复打开表的开销。
thread_cache_size:线程缓存(复用空闲线程,减少创建 / 销毁开销)。
建议:并发高时调大(如 32-64),可通过Threads_created状态值判断是否足够。
log_error:错误日志路径。
建议:必须开启,用于排查 MySQL 启动 / 运行错误(如崩溃、权限问题)。
八、配置验证命令
修改配置后,可通过以下命令验证参数是否生效:
-- 查看所有配置(模糊搜索)
SHOW VARIABLES LIKE '参数名';
-- 示例:查看innodb_buffer_pool_size
SHOW VARIABLES LIKE 'innodb_buffer_pool_size';
-- 查看MySQL状态(如连接数、缓存命中率)
SHOW STATUS;
九、注意事项
重启生效:修改配置文件后需重启 MySQL 服务(systemctl restart mysqld)。
动态调整:部分参数支持在线修改(无需重启),例如:
SET GLOBAL max_connections=500;(仅临时生效,重启后恢复配置文件值)。
监控与迭代:定期分析慢查询日志(用pt-query-digest工具),优化高频低效 SQL。
通过理解每个参数的作用,你可以根据服务器硬件和业务特点灵活调整配置,实现 MySQL 性能的最大化。