默认安装的 MariaDB 配置极其保守,仅适合本地测试。一旦上线网站、API、小程序、商城系统,会出现:CPU 占用高、查询缓慢、并发连接超时、数据库卡死、502 报错等问题。
本文基于 Ubuntu 26.04 + MariaDB 11.8 环境,提供一套通用生产级调优方案,包含内存缓冲优化、并发连接调整、慢查询日志、IO 优化、超时优化、安全参数优化,中小服务器直接套用即可大幅提升性能。
先确定已经安装了Mariadb数据库,没有安装请参考:Ubuntu 26.04 安装配置 MariaDB 教程
一、调优前置:查看默认状态
先进入数据库查看当前运行状态,方便调优前后对比:
sudo mariadb
常用查看命令:
-- 查看最大连接数
show variables like 'max_connections';
-- 查看当前连接数
show status like 'Threads_connected';
-- 查看慢查询是否开启
show variables like 'slow_query%';
-- 查看缓存参数
show variables like 'innodb_buffer_pool_size';
二、核心配置文件介绍
MariaDB 主要配置文件路径:
/etc/mysql/mariadb.conf.d/50-server.cnf
所有性能优化均修改此文件,修改后重启数据库生效:
sudo systemctl restart mariadb
三、生产级全套性能优化参数
根据 1核2G~4核8G 通用云服务器 编写,90% 个人/企业项目通用。
打开配置文件:
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
找到 [mysqld] 节点,清空原有自定义参数,添加以下全套优化配置:
# 基础字符集优化
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
skip-name-resolve
# 最大并发连接数
max_connections = 800
# 超时优化,解决Sleep连接堆积
wait_timeout = 600
interactive_timeout = 600
# InnoDB核心内存缓冲(最重要)
innodb_buffer_pool_size = 1G
innodb_log_file_size = 256M
innodb_log_buffer_size = 64M
innodb_flush_log_at_trx_commit = 1
# 并发线程优化
innodb_thread_concurrency = 8
innodb_read_io_threads = 8
innodb_write_io_threads = 8
# 关闭不必要日志、提升IO性能
slow_query_log = ON
slow_query_log_file = /var/log/mariadb/slow.log
long_query_time = 2
# 临时表优化
tmp_table_size = 64M
max_heap_table_size = 64M
# 排序与分组优化
sort_buffer_size = 2M
join_buffer_size = 2M
四、关键参数详细讲解(看懂才算会调优)
1、innodb_buffer_pool_size(最核心)
这是 MariaDB 最重要参数,决定数据库读取速度。
- 2G 内存服务器:设置 1G
- 4G 内存服务器:设置 2G
- 8G 内存服务器:设置 4G
原则:服务器内存的 50%~60% 分配给数据库。
2、max_connections 最大并发
默认仅 151,高并发瞬间爆满,导致网站 503/卡死。
中小项目设置 800~1000 足够使用。
3、超时时间 wait_timeout
默认 8小时,大量闲置 Sleep 连接占满连接池。优化为 10分钟自动释放无效连接。
4、慢查询日志
自动记录 执行超过2秒 的 SQL,方便后期排查网站卡顿原因。
五、针对不同配置服务器的适配方案
1、1核2G 低配机器(博客、小型站点)
innodb_buffer_pool_size = 512M
max_connections = 500
2、2核4G 主流机器(企业站、商城、API)
innodb_buffer_pool_size = 2G
max_connections = 800
3、4核8G 高配机器(高并发项目)
innodb_buffer_pool_size = 4G
max_connections = 1200
六、重启服务并验证调优效果
sudo systemctl restart mariadb
进入数据库验证参数是否生效:
show variables like '%max_connections%';
show variables like '%innodb_buffer_pool_size%';
七、日常运维:如何排查数据库卡顿
1、查看当前实时连接
show processlist;
2、查看慢查询日志
tail -f /var/log/mariadb/slow.log
3、清理卡死连接
找到异常 ID 执行 kill:
kill 连接ID;
八、生产环境最佳实践
- 禁止默认配置上线,低配参数会导致后期频繁卡顿
- 内存缓冲务必根据服务器内存调整,过大导致内存溢出
- 开启慢查询日志,定期优化低效 SQL
- 配合定时备份策略,性能与数据安全双重保障
- 高并发项目禁止频繁大事务、全表查询、无索引查询
九、常见问题解决
1、重启数据库失败 多半是内存设置过大,超出服务器承载,适当调小 innodb_buffer_pool_size。
2、网站偶尔超时 调整 wait_timeout,清理堆积睡眠连接,优化慢 SQL。
3、CPU 占用持续很高 90% 是 SQL 无索引、全表扫描,通过慢查询日志定位优化。
至此,本站完成了 MariaDB 完整运维专栏三部曲:安装部署、自动备份、性能调优。三套教程组合,可直接搭建一套安全、稳定、高性能、可自动容错的生产数据库环境,完全满足个人建站、企业项目、API 服务、中小型商城系统使用。
后续可配合索引优化、主从复制、读写分离进一步提升项目承载能力。