不推荐源码编译安装mysql 8.0,因openeuler 22.03/24.03已提供适配良好的官方rpm包,源码编译易遇cmake依赖缺失、内存溢出、systemd集成困难及安全配置遗漏等问题,仅在需定制加密模块或打未合入补丁等特殊场景下才建议使用。

源码编译安装 MySQL 8.0 在 openEuler 上可行,但不推荐——除非你明确需要自定义构建(如启用特定加密模块、调试符号、或 patch 官方未合入的补丁)。官方 RPM 包已适配 openEuler 22.03/24.03,且依赖、SELinux 策略、systemd 单元都经过验证;源码编译反而容易卡在 cmake 阶段、缺失 libevent 或 protobuf 版本不匹配、生成的二进制无法被 systemctl 正确管理。
为什么 cmake .. 会报错“Could NOT find Curses”或“Could NOT find OpenSSL”
openEuler 默认不预装开发用头文件和静态库。MySQL 8.0 源码编译强依赖:
-
ncurses-devel(不是ncurses)——解决 Curses 错误 -
openssl-devel、zlib-devel、lz4-devel、zstd-devel—— OpenSSL 和压缩相关报错的根源 -
systemd-devel—— 否则mysqld无法集成 systemd 日志和 socket 激活 -
cmake3(非cmake)—— openEuler 22.03+ 自带的是cmake3,而 MySQL 8.0+ 要求 CMake ≥ 3.16.3
执行:dnf groupinstall "Development Tools" -y && dnf install ncurses-devel openssl-devel zlib-devel lz4-devel zstd-devel systemd-devel cmake3 -y
configure_file: mysql_version.h.in not found 错误怎么绕过
这不是配置错误,是源码包不完整。MySQL 官网提供的 mysql-8.0.xx.tar.gz 是「source tarball」,但它**不包含自动生成的构建中间文件**(如 mysql_version.h),必须先运行 ./configure 或 cmake 触发生成。但 MySQL 8.0 已弃用 ./configure,只支持 cmake。
正确做法:
- 确认你下载的是完整源码包(后缀为
.tar.gz,不是-debuginfo或-client) - 解压后进入目录,先建构建目录:
mkdir build && cd build - 运行:
cmake3 .. -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DDEFAULT_CHARSET=utf8mb4 -DDEFAULT_COLLATION=utf8mb4_0900_ai_ci -DWITH_SYSTEMD=ON -DWITH_SSL=system - 若仍报
mysql_version.h.in相关错误,说明你误用了二进制包(如mysql-8.0.xx-linux-glibc2.12-x86_64.tar.xz)——它不能用于编译
make 编译耗时超 2 小时且内存 OOM 怎么办
MySQL 8.0 的 C++ 模板和 InnoDB 模块导致编译峰值内存常超 4GB。openEuler 默认 swap 可能不足或未启用。
- 检查内存:
free -h,确保总可用内存(RAM + swap)≥ 6GB - 临时增加 swap:
dd if=/dev/zero of=/swapfile bs=1G count=4 && mkswap /swapfile && swapon /swapfile - 限制并发编译数,避免爆内存:
make -j$(nproc --ignore=2)(保留 2 核给系统) - 跳过文档和测试套件节省时间:
cmake3 .. -DINSTALL_DOC=OFF -DINSTALL_MAN=OFF -DWITH_UNIT_TESTS=OFF
即使成功编译,生成的 mysqld 二进制仍需手动处理用户、权限、日志路径、PID 文件等——这些在 RPM 安装中由 %post 脚本自动完成,源码安装全靠自己写 systemd service 文件,极易遗漏 ProtectHome=true 或 NoNewPrivileges=true 等安全配置。
真正需要源码编译的场景极少:比如你要向 sql/sql_parse.cc 插入审计日志逻辑,或把 MySQL 嵌入某个定制固件。否则,直接用 dnf install mysql-community-server 或离线 RPM 方式,省时、安全、可复现。











