优化 Debian 上的 MySQL,通常可以从 系统层面、MySQL 配置、表结构、SQL 语句、监控与维护 几个方面入手。下面给你一套比较实用、可落地的优化方案(适用于 Debian 10/11/12,MySQL 5.7 / 8.0)。
free -h
swapon -s
ext4 或 xfsnoatime,nodiratime
vi /etc/sysctl.conf
vm.swappiness = 1
net.core.somaxconn = 65535
sysctl -p
配置文件路径:
/etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
# 基础
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
# 字符集
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
# 连接
max_connections = 300
max_connect_errors = 10000
# 缓存
innodb_buffer_pool_size = 1G # 建议物理内存的 50%-70%
innodb_log_file_size = 256M
innodb_flush_log_at_trx_commit = 2
innodb_flush_method = O_DIRECT
# 查询缓存(MySQL 8 已移除)
# query_cache_type = 0
# query_cache_size = 0
# 日志
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1
# 安全
sql_mode = STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION
⚠️ 修改后重启:
systemctl restart mysql
SHOW VARIABLES LIKE 'innodb_buffer_pool_size';
SET GLOBAL innodb_buffer_pool_size = 2147483648;
SELECT
table_schema,
SUM(data_length+index_length)/1024/1024 AS size_mb
FROM information_schema.tables
GROUP BY table_schema;
SHOW VARIABLES LIKE 'slow_query_log%';
mysqldumpslow -s t /var/log/mysql/slow.log
EXPLAIN SELECT * FROM orders WHERE user_id = 10;
✅ 优化原则:
SELECT *LIKE '%xxx%'| 场景 | 推荐 |
|---|---|
| 状态 | TINYINT |
| 金额 | DECIMAL(10,2) |
| 时间 | DATETIME / TIMESTAMP |
| 主键 | BIGINT + AUTO_INCREMENT |
ANALYZE TABLE user;
OPTIMIZE TABLE user;
Debian 默认可能是 MariaDB:
mysql -V
如需官方 MySQL:
wget https://dev.mysql.com/get/mysql-apt-config_0.8.28-1_all.deb
dpkg -i mysql-apt-config_*.deb
apt update
apt install mysql-server
chown -R mysql:mysql /var/lib/mysql
chmod 750 /var/lib/mysql
mysqladmin -u root -p status
mysqladmin -u root -p extended-status
mytoppt-query-digestPrometheus + GrafanaMySQL Enterprise Monitor(企业)| 问题 | 原因 |
|---|---|
| CPU 高 | 索引缺失 / 慢 SQL |
| 内存高 | buffer pool 太大 |
| IO 高 | 无索引 / 大量写 |
| 连接满 | max_connections 小 |
✅ 1. 调整 innodb_buffer_pool_size
✅ 2. 开启慢查询日志
✅ 3. 给常用查询加索引
✅ 4. 避免 SELECT *
✅ 5. 定期 ANALYZE TABLE
如果你愿意,可以告诉我:
我可以 直接给你一套定制化的 my.cnf 配置。