Mysql

关注公众号 jb51net

关闭
首页 > 数据库 > Mysql > MySQL my.conf配置文件优化

MySQL中my.conf配置文件的优化技巧分享

作者:网硕互联的小客服

优化 MySQL 的 my.cnf 配置文件,可以显著提升数据库性能,特别是在高并发或大数据量场景下,以下是优化 my.cnf 的方法和建议,涵盖 常见配置项、参数说明 和 优化技巧,需要的朋友可以参考下

1. 优化前的准备工作

在修改 my.cnf 之前,需了解以下内容:

1.1 确认 MySQL 当前版本和存储引擎

查看 MySQL 版本:

mysql --version

确认使用的存储引擎(推荐 InnoDB):

SHOW ENGINES;

1.2 确定服务器资源

CPU 核心数:决定并发能力。

nproc

内存大小:用于设置缓存参数。

free -h

磁盘 IO 性能:决定读写速度。

hdparm -Tt /dev/sda

1.3 备份 MySQL 配置

在编辑 my.cnf 前,备份原始配置以防止误操作:

sudo cp /etc/my.cnf /etc/my.cnf.bak

2. 常见优化参数

以下是一些常见的 my.cnf 配置项及优化建议,按功能模块分类。

2.1 基本配置

[mysqld]
bind-address = 0.0.0.0      # 允许远程连接(根据需要设置为具体 IP 或 127.0.0.1)
port = 3306                 # MySQL 默认端口
max_connections = 500       # 最大连接数(根据业务需求调整)
wait_timeout = 28800        # 连接超时时间(秒)
interactive_timeout = 28800 # 交互式连接超时时间(秒)

2.2 缓存与内存优化

key_buffer_size = 128M        # 针对 MyISAM 表的索引缓存(InnoDB 可忽略)
query_cache_size = 0          # 查询缓存大小(MySQL 8.0 已废弃,建议禁用)
query_cache_type = 0          # 禁用查询缓存
tmp_table_size = 64M          # 临时表大小
max_heap_table_size = 64M     # 内存中的临时表最大大小
table_open_cache = 1024       # 打开表的缓存数量
thread_cache_size = 16        # 缓存的线程数

2.3 InnoDB 存储引擎优化

innodb_buffer_pool_size = 4G      # InnoDB 缓存池大小(建议占用总内存的 50%-70%)
innodb_buffer_pool_instances = 8 # 缓存池实例数(适合大内存服务器)
innodb_log_file_size = 256M      # 日志文件大小
innodb_log_buffer_size = 16M     # 日志缓存大小
innodb_flush_log_at_trx_commit = 1 # 日志刷新策略(1 最安全,2/0 性能更高)
innodb_file_per_table = 1        # 每个表使用独立的表空间,便于管理
innodb_flush_method = O_DIRECT   # 避免双缓存,提高 IO 性能

2.4 日志与调试

log_error = /var/log/mysql/error.log   # 错误日志路径
slow_query_log = 1                    # 启用慢查询日志
slow_query_log_file = /var/log/mysql/slow.log # 慢查询日志文件
long_query_time = 2                   # 慢查询阈值(秒)
log_queries_not_using_indexes = 1     # 记录未使用索引的查询

2.5 连接与网络优化

max_allowed_packet = 64M         # 单次查询允许的最大数据包大小
net_read_timeout = 30            # 网络读取超时时间(秒)
net_write_timeout = 30           # 网络写入超时时间(秒)
skip-name-resolve = 1            # 禁用主机名解析,加快连接速度

3. 调优的核心原则

根据业务需求调整参数

逐步调整参数

监控性能

查看连接数:

SHOW STATUS LIKE 'Threads_connected';

查看缓冲区命中率:

SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_hit%';

查看慢查询:

SHOW GLOBAL STATUS LIKE 'Slow_queries';

定期清理与维护

OPTIMIZE TABLE table_name;

4. 示例优化后的 my.cnf 文件

以下是一个适用于中小型业务场景的优化示例:

[mysqld]
bind-address = 0.0.0.0
port = 3306
max_connections = 500
wait_timeout = 28800
interactive_timeout = 28800

# 缓存与内存
key_buffer_size = 16M
query_cache_size = 0
query_cache_type = 0
tmp_table_size = 64M
max_heap_table_size = 64M
table_open_cache = 1024
thread_cache_size = 16

# InnoDB 优化
innodb_buffer_pool_size = 4G
innodb_buffer_pool_instances = 8
innodb_log_file_size = 256M
innodb_log_buffer_size = 16M
innodb_flush_log_at_trx_commit = 1
innodb_file_per_table = 1
innodb_flush_method = O_DIRECT

# 日志与调试
log_error = /var/log/mysql/error.log
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2
log_queries_not_using_indexes = 1

# 网络与连接
max_allowed_packet = 64M
net_read_timeout = 30
net_write_timeout = 30
skip-name-resolve = 1

5. 总结

根据业务需求调整 my.cnf,可以有效提升 MySQL 的性能和稳定性。

以上就是MySQL中my.conf配置文件的优化技巧分享的详细内容,更多关于MySQL my.conf配置文件优化的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文