CentOS或Ubuntu系统下,1核2G服务器如何精简配置MySQL 8.0以正常运行?

在 1 核 2G 的服务器上运行 MySQL 8.0,核心思路是限制内存占用、减少并发连接、关闭非必要功能。以下是针对 CentOS/Ubuntu 的精简配置方案:


一、系统层面优化(通用)

# 关闭 Swap(避免频繁交换导致卡顿,仅当物理内存充足时建议开启,否则可保留小 swap)
sudo swapoff -a
# 若必须使用 swap,限制为最小值
echo "vm.swappiness=10" | sudo tee -a /etc/sysctl.conf

二、MySQL 配置文件精简(/etc/my.cnf 或 /etc/mysql/mysql.conf.d/mysqld.cnf)

[mysqld]
# 基础设置
basedir=/usr
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
pid-file=/var/run/mysqld/mysqld.pid
user=mysql
log-error=/var/log/mysqld.log

# 字符集(推荐 utf8mb4,但避免过大的索引)
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci

# 关键性能参数(适配 1C2G)
max_connections = 50          # 默认 151,大幅降低
innodb_buffer_pool_size = 256M # 占物理内存约 12%,避免 OOM
innodb_log_file_size = 64M     # 减小日志文件大小
innodb_flush_log_at_trx_commit = 2 # 牺牲少量持久性换取速度(生产环境慎用)
query_cache_size = 0           # MySQL 8.0 已废弃查询缓存,必须设为 0
tmp_table_size = 32M
max_heap_table_size = 32M
thread_cache_size = 16
table_open_cache = 200
sort_buffer_size = 256K
read_buffer_size = 256K
read_rnd_buffer_size = 256K
join_buffer_size = 256K

# 禁用不必要功能
skip-name-resolve              # 禁用 DNS 反向解析,提升连接速度
skip-symbolic-links            # 禁用符号链接
local-infile = 0               # 禁用本地文件导入(安全加固)

# 日志策略(生产环境需调整)
slow_query_log = 1
long_query_time = 2
log_output = FILE
general_log = 0                # 一般日志关闭,除非调试

# 其他
sync_binlog = 1                # 保证主从同步安全
innodb_flush_method = O_DIRECT # 避免双重缓冲

✅ 注意:

  • innodb_buffer_pool_size 不要超过 512M(留空间给 OS 和其他进程)
  • max_connections 根据实际业务调整,Web 应用通常 30~50 足够
  • 若为纯读场景,可考虑只读实例;写多读少则优先调优连接池

三、启动与验证

# 重启服务
sudo systemctl restart mysql    # Ubuntu
# 或
sudo systemctl restart mysqld   # CentOS 7+

# 检查关键参数
mysql -u root -p -e "SHOW VARIABLES LIKE 'innodb_buffer_pool_size'; 
                    SHOW VARIABLES LIKE 'max_connections';
                    SHOW STATUS LIKE 'Threads_connected';"

四、额外建议

  1. 定期清理慢查询:分析 /var/log/slow-query.log 优化 SQL。
  2. 监控资源:安装 htop 或 glances 实时观察内存/CPU。
  3. 备份策略:使用 mysqldump --single-transaction 避免锁表。
  4. 考虑替代方案:若负载持续较高,可尝试:
    • 降级到 MariaDB 10.6(更轻量)
    • 使用 SQLite(单文件、无网络开销)
    • 迁移至云数据库(如 AWS RDS t3.micro)

通过以上配置,MySQL 8.0 可在 1C2G 环境下稳定运行中小型应用(如博客、CMS、API 后端)。若出现 OOM,优先检查 innodb_buffer_pool_size 和 max_connections。

云服务器