温馨提示×

centos mysql怎么优化

小樊
53
2026-09-29 21:42:04
栏目: 云计算

在 CentOS 上优化 MySQL,可以从 系统层面、MySQL 配置、SQL 与索引、监控与维护 四个方面来做。下面给你一套实用、可落地的优化方案(以 CentOS 7/8 + MySQL 5.7/8.0 为例)。


一、系统层面优化(CentOS)

1. 关闭或调整 Swap

free -h
swapon -s

建议:

  • 内存充足时 减少 swap 使用
sysctl vm.swappiness=10

写入:

echo "vm.swappiness=10" >> /etc/sysctl.conf

2. 文件描述符限制

ulimit -n

修改:

vi /etc/security/limits.conf
mysql soft nofile 65535
mysql hard nofile 65535

3. 磁盘与文件系统

  • 使用 SSD
  • 文件系统推荐 xfs
  • 挂载参数:
defaults,noatime,nodiratime

4. 内核参数

vi /etc/sysctl.conf
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
sysctl -p

二、MySQL 配置文件优化(核心)

配置文件位置:

/etc/my.cnf
或
/etc/my.cnf.d/mysql-server.cnf

1. 基础内存配置(示例:8G 内存)

[mysqld]
innodb_buffer_pool_size = 4G
innodb_log_file_size = 512M
innodb_flush_log_at_trx_commit = 2
sync_binlog = 0

2. 连接与线程

max_connections = 500
thread_cache_size = 50
wait_timeout = 300
interactive_timeout = 300

3. InnoDB 优化(最重要)

innodb_file_per_table = 1
innodb_flush_method = O_DIRECT
innodb_io_capacity = 2000
innodb_read_io_threads = 8
innodb_write_io_threads = 8

4. 查询缓存(MySQL 8 已移除)

MySQL 5.7:

query_cache_type = 0
query_cache_size = 0

三、SQL 与索引优化(见效最快)

1. 慢查询日志

slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1

分析:

mysqldumpslow -s t /var/log/mysql/slow.log

2. 索引优化原则

  • WHERE / JOIN / ORDER BY 字段加索引
  • 联合索引遵循 最左前缀
  • 避免:
WHERE DATE(create_time) = ...
LIKE '%abc'

3. EXPLAIN 分析

EXPLAIN SELECT * FROM user WHERE name='tom';

关注:

  • type(避免 ALL)
  • rows(越小越好)
  • Extra(避免 Using filesort)

四、日常维护与监控

1. 表优化

OPTIMIZE TABLE table_name;

或

mysqlcheck -o -A

2. 定期分析

ANALYZE TABLE table_name;

3. 监控工具

  • top, iostat, vmstat
  • mysqladmin status
  • Prometheus + Grafana
  • pt-query-digest

五、常见场景建议

场景 建议
读多写少 加大 buffer pool
写多 调整 redo log、关闭双写
高并发 调大 max_connections
主从 开启 binlog,优化复制线程

六、快速自检清单 ✅

  • [ ] 内存是否够用
  • [ ] buffer pool 是否合理
  • [ ] 慢查询是否开启
  • [ ] 是否有全表扫描
  • [ ] 磁盘 IO 是否瓶颈

如果你愿意,可以告诉我:

  • CentOS 版本
  • MySQL 版本
  • 内存大小
  • 应用场景(Web / 报表 / 高并发)

我可以直接给你一份 可复制的 my.cnf 配置。

0 踩