在 Debian 上优化 MySQL(通常是 MySQL / MariaDB),一般可以从系统层面、MySQL 配置、Schema 与 SQL、监控与维护四个方面入手。下面给你一个比较实用、可落地的优化清单。
sysctl vm.swappiness=10
写入 /etc/sysctl.conf 持久化
ext4 或 xfsnoatime,nodiratime
编辑 /etc/fstab
sysctl -w net.core.somaxconn=65535
sysctl -w net.ipv4.tcp_max_syn_backlog=65535
配置文件一般在:
/etc/mysql/my.cnf
/etc/mysql/mysql.conf.d/mysqld.cnf
innodb_buffer_pool_size = 物理内存的 60%~70%
例如 8G 内存:
innodb_buffer_pool_size = 5G
innodb_log_file_size = 256M
innodb_flush_log_at_trx_commit = 2 # 性能优先
sync_binlog = 0 # 性能优先(有风险)
若要求数据安全,请保持默认(1 / 1)
max_connections = 500
thread_cache_size = 50
查看当前连接:
SHOW STATUS LIKE 'Threads_%';
MySQL 8.0 已移除
query_cache_type = 0
query_cache_size = 0
(高并发下通常建议关闭)
innodb_file_per_table = ON
LIKE '%xxx'查看慢查询:
SHOW VARIABLES LIKE 'slow_query_log';
开启慢查询:
slow_query_log = ON
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1
INT 而非 BIGINT)TEXT/BLOB 过多OPTIMIZE TABLE table_name;
ANALYZE TABLE table_name;
SHOW PROCESSLIST;
SHOW ENGINE INNODB STATUS;
SHOW GLOBAL STATUS;
mysqldumpslow -s t /var/log/mysql/slow.log
pt-query-digestmysqltunerapt install mysqltuner
mysqltuner
systemd 限制资源(可选):[Service]
LimitNOFILE=65535
[mysqld]
innodb_buffer_pool_size = 5G
innodb_log_file_size = 256M
max_connections = 500
innodb_flush_log_at_trx_commit = 2
sync_binlog = 0
slow_query_log = ON
long_query_time = 1
如果你愿意,可以告诉我:
mysql -V)我可以给你更精确的 my.cnf 配置。