2G内存编译 mysql 8.0?

服务器

2GB 内存的机器上编译 MySQL 8.0 是非常具有挑战性的,但并非完全不可能。MySQL 8.0 的源码编译对系统资源(尤其是内存)要求较高,在默认配置下通常建议至少 4GB 或更多内存,否则很容易出现:

  • 编译过程因内存不足而被 OOM Killer 终止
  • g++ 编译器占用大量内存导致系统卡死或崩溃
  • 链接阶段(linking)耗尽内存

✅ 是否可行?

可以尝试,但需要优化编译方式和环境配置,以降低内存使用。


?️ 在 2G 内存环境下成功编译 MySQL 8.0 的建议方案

1. 添加交换空间(Swap)

这是最关键的一步!2G 物理内存不够,必须添加足够的 Swap 空间来防止 OOM。

# 创建一个 2GB 的 swap 文件
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

# 查看 swap 是否启用
free -h

推荐总虚拟内存(RAM + Swap)≥ 4GB。即:2G RAM + 2G~4G Swap。


2. 使用轻量级构建选项(CMake 配置)

使用最小化编译选项,减少组件数量和优化级别。

cmake . 
  -DCMAKE_BUILD_TYPE=Release 
  -DWITH_BOOST=/tmp/boost 
  -DDOWNLOAD_BOOST=1 
  -DENABLED_PROFILING=OFF 
  -DENABLE_DEBUG_SYNC=OFF 
  -DMYSQL_MAINTAINER_MODE=OFF 
  -DWITH_UNIT_TESTS=OFF 
  -DWITHOUT_ARCHIVE_STORAGE_ENGINE=1 
  -DWITHOUT_BLACKHOLE_STORAGE_ENGINE=1 
  -DWITHOUT_FEDERATED_STORAGE_ENGINE=1 
  -DWITHOUT_INNOBASE_MEMCACHE=1 
  -DWITHOUT_PERF_SCHEMA=1 
  -DWITHOUT_MRG_MYISAM=1 
  -DWITHOUT_NDBCLUSTER=1 
  -DWITH_SSL=bundled 
  -DWITH_ZLIB=bundled 
  -DCMAKE_C_FLAGS="-O2 -g0" 
  -DCMAKE_CXX_FLAGS="-O2 -g0"

关键点:

  • -g0:不生成调试符号,节省内存和磁盘空间
  • -O2 而非 -O3:避免高优化带来的内存暴涨
  • 移除不需要的存储引擎和功能
  • 不编译单元测试

3. 减少并行编译线程数

不要使用 -j$(nproc),这会瞬间耗尽内存。

推荐使用单线程或双线程编译:

make -j1    # 最安全,内存最少
# 或
make -j2    # 如果你有 swap 且想快一点

⚠️ 使用 -j4 或更高几乎必然导致 OOM。


4. 增加系统限制

确保没有 ulimit 限制影响编译:

ulimit -u 65535
ulimit -d unlimited
ulimit -v unlimited

5. 使用更轻的发行版或容器环境

  • 使用最小化安装的 Ubuntu Server、Debian 等
  • 关闭不必要的服务(如 GUI、systemd-units)
  • 使用 Docker 构建时分配足够 swap

6. 监控内存使用

实时监控内存和 swap 使用情况:

watch -n 1 'free -h && echo "---" && ps aux --sort=-%mem | head -10'

一旦发现内存紧张,立即终止编译。


? 其他建议

建议 说明
使用 SSD 提升 swap 性能,减少 I/O 卡顿
编译前清理内存 关闭其他应用,释放缓存 echo 3 > /proc/sys/vm/drop_caches
分阶段编译 make mysql_server,再逐步构建其他模块
考虑预编译包 若非必须自定义编译,建议用官方二进制包或系统仓库安装

❌ 不推荐的做法

  • 在无 Swap 的 2G 内存机器上直接 cmake && make -j4
  • 开启调试模式(-DDEBUG=ON)或 Profiling
  • 编译所有插件和测试用例

✅ 成功案例参考

一些用户在 2G RAM + 4G Swap 的 VPS 上成功编译了 MySQL 8.0,耗时约 30~60 分钟,关键就是:

  • 启用足够 Swap
  • -j1 编译
  • 精简 CMake 选项

✅ 替代方案(推荐)

如果你只是想运行 MySQL 8.0,而不是深度定制,建议:

# Ubuntu/Debian
sudo apt install mysql-server

# 或下载官方预编译二进制包
https://dev.mysql.com/downloads/mysql/

这些是已经编译好的,无需自己从源码构建。


总结

条件 是否可行
2G 内存 + 无 Swap ❌ 极大概率失败
2G 内存 + 2G~4G Swap + 精简配置 + -j1 ✅ 可行,但慢
2G 内存 + 高并行 + 默认配置 ❌ 必崩

结论
可以在 2G 内存 + 足够 Swap + 优化配置 + 低并行度 的条件下编译 MySQL 8.0,但过程缓慢且需耐心。如果不是必须定制,强烈建议使用官方预编译版本。

如需帮助写完整的编译脚本,也可以告诉我你的操作系统版本,我可以提供一键编译方案。

未经允许不得转载:CDNK博客 » 2G内存编译 mysql 8.0?