1. 核心配置项说明与优化建议
[mysqld] 部分
这是 mysql 服务端的主要配置段。
| 配置项 | 说明 | 推荐值/建议 |
|---|---|---|
datadir | 数据库文件存储路径(如 /var/lib/mysql)。 | 根据磁盘空间和性能需求选择 ssd 或高iops磁盘。 |
socket | mysql 的 unix socket 文件路径。 | 默认 /var/run/mysqld/mysqld.sock(linux)。 |
port | mysql 服务监听的端口。 | 默认 3306,如需多实例需修改。 |
bind-address | 允许连接的 ip 地址。 | 0.0.0.0 允许所有远程连接;127.0.0.1 仅允许本地连接。 |
character-set-server | 默认字符集。 | utf8mb4(支持 emoji 和更多 unicode 字符)。 |
collation-server | 默认字符排序规则。 | utf8mb4_unicode_ci(通用排序规则)。 |
内存与性能优化
| 配置项 | 说明 | 推荐值/建议 |
|---|---|---|
innodb_buffer_pool_size | innodb 缓冲池大小,缓存数据和索引。直接影响性能。 | 设置为物理内存的 50%~70%(如 16gb 内存可设为 8g)。独立服务器可更高,但需预留系统和其他进程内存。 |
innodb_log_file_size | innodb 重做日志文件大小。 | 推荐 1g~4g,需权衡崩溃恢复时间。大日志提高写入性能,但恢复时间变长。 |
innodb_flush_method | 控制 innodb 数据文件刷新方式。 | o_direct(直接写入磁盘,避免双缓存)。 |
innodb_flush_log_at_trx_commit | 事务提交时日志刷新策略:0(每秒刷新,性能高,可能丢失1秒数据)1(默认,完全持久化,安全但性能低)2(写入os缓存,系统崩溃可能丢数据) | 高并发写入场景可设为 2,但需权衡数据安全。金融类应用建议 1。 |
key_buffer_size | myisam 表的索引缓存(若使用 myisam)。 | 若仅用 innodb,可设为 16m 或更低。 |
tmp_table_sizemax_heap_table_size | 内存临时表的最大大小。 | 设为相同值(如 64m)。避免过大导致内存溢出,过小导致磁盘临时表。 |
query_cache_type | 查询缓存(mysql 8.0 已废弃)。 | 禁用(0),8.0 中已移除查询缓存。 |
连接与线程
| 配置项 | 说明 | 推荐值/建议 |
|---|---|---|
max_connections | 允许的最大并发连接数。 | 根据应用需求调整(默认 151)。过高可能导致内存不足(每个连接约占用 256kb~几mb)。结合 thread_cache_size 优化。 |
thread_cache_size | 缓存线程数,避免频繁创建/销毁线程。 | 建议 max_connections 的 10%(如 200)。 |
wait_timeoutinteractive_timeout | 非交互/交互连接的空闲超时时间(秒)。 | 建议 300(5分钟),避免长时间空闲连接占用资源。 |
日志与监控
| 配置项 | 说明 | 推荐值/建议 |
|---|---|---|
log_error | 错误日志文件路径。 | 默认 /var/log/mysql/error.log,建议开启并定期清理。 |
slow_query_log | 是否启用慢查询日志。 | 1(开启),结合 long_query_time(如 2秒)记录慢查询。 |
log-bin | 二进制日志路径(用于主从复制/时间点恢复)。 | 主从复制必开,路径需足够磁盘空间。 |
binlog_expire_logs_seconds | 二进制日志过期时间(秒)。 | 默认 2592000(30天),根据备份策略调整。 |
general_log | 是否记录所有查询日志(慎用,影响性能)。 | 默认 0(关闭),调试时临时开启。 |
2. 其他重要配置项
| 配置项 | 说明 |
|---|---|
innodb_file_per_table | 每个 innodb 表使用独立表空间(.ibd 文件),便于管理。建议 on。 |
skip-name-resolve | 禁用 dns 解析,加速连接。需用 ip 或本地主机名访问。 |
transaction_isolation | 事务隔离级别(如 read-committed)。 |
innodb_lock_wait_timeout | innodb 行锁等待超时时间(秒),默认 50。 |
3. 示例配置文件(参考)
[mysqld] # 基础配置 datadir = /var/lib/mysql socket = /var/run/mysqld/mysqld.sock port = 3306 bind-address = 0.0.0.0 character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci # 内存优化 innodb_buffer_pool_size = 8g innodb_log_file_size = 2g innodb_flush_method = o_direct tmp_table_size = 64m max_heap_table_size = 64m # 连接管理 max_connections = 500 thread_cache_size = 50 wait_timeout = 300 interactive_timeout = 300 # 日志与监控 log_error = /var/log/mysql/error.log slow_query_log = 1 slow_query_log_file = /var/log/mysql/mysql-slow.log long_query_time = 2 log-bin = /var/log/mysql/mysql-bin.log binlog_expire_logs_seconds = 2592000 # innodb 高级配置 innodb_file_per_table = on innodb_flush_log_at_trx_commit = 2 # 高并发写入场景 transaction_isolation = read-committed
4. 调优建议
分场景优化:
小型应用:降低
innodb_buffer_pool_size(如 1g)。高并发写入:调整
innodb_flush_log_at_trx_commit=2和sync_binlog=0(需权衡数据安全)。大型数据库:增加
innodb_buffer_pool_size并启用innodb_buffer_pool_instances(如 8 实例)。
监控工具:
使用
show global status和show engine innodb status查看运行状态。工具:
mysqltuner.pl、percona monitoring and management (pmm)。
测试与验证:
修改配置后重启 mysql:
systemctl restart mysql。使用
sysbench或实际业务负载测试性能。
5. 注意事项
备份配置:修改前备份
my.cnf。逐步调整:每次仅修改一个参数并观察效果。
硬件依赖:ssd 可显著提升
innodb_io_capacity相关参数。
总结
到此这篇关于mysql 8.0版本配置my.cnf / my.ini各项配置的文章就介绍到这了,更多相关mysql8.0版本my.cnf/my.ini配置内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论