在 CentOS 上调优 MySQL(通常指 MySQL / MariaDB)参数,一般分为系统层面和MySQL 配置层面。下面给你一份实战向、循序渐进的调优指南,适用于 CentOS 7/8、MySQL 5.7/8.0、MariaDB 10.x。
cat /etc/redhat-release
mysql -V
# 或
mariadb -V
MySQL 配置文件位置一般是:
/etc/my.cnf 或 /etc/my.cnf.d/*.cnf/etc/my.cnf.d/server.cnfswapoff -a
永久关闭:注释 /etc/fstab 中 swap 行
ulimit -n 65535
永久生效:
vim /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
vm.swappiness = 1
sysctl -p
innodb_buffer_pool_size = 4G
innodb_log_file_size = 512M
key_buffer_size = 64M
max_connections = 500
thread_cache_size = 100
查看当前连接:
SHOW STATUS LIKE 'Threads_%';
MySQL 5.7:
query_cache_type = 0
query_cache_size = 0
高并发下建议关闭
innodb_flush_log_at_trx_commit = 2
innodb_flush_method = O_DIRECT
innodb_file_per_table = 1
若要求强一致性(金融),
trx_commit=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
[mysqld]
innodb_buffer_pool_size = 2G
innodb_log_file_size = 256M
max_connections = 300
thread_cache_size = 50
innodb_flush_log_at_trx_commit = 2
innodb_flush_method = O_DIRECT
slow_query_log = 1
long_query_time = 1
修改后重启:
systemctl restart mysqld
SHOW GLOBAL STATUS;
SHOW ENGINE INNODB STATUS;
SHOW PROCESSLIST;
工具推荐:
mysqltuner.plpt-query-digestprometheus + grafana❌ buffer pool 设太大导致 OOM
❌ 开了 swap 导致 MySQL 卡死
❌ max_connections 过高拖垮 CPU
❌ 忽略慢查询日志
如果你能告诉我:
我可以帮你直接给出一份定制 my.cnf。