可行,但需满足CMake≥3.11.2(推荐3.31.7)、显式指定boost路径、配置-DDEFAULT_COLLATION=utf8mb4_0900_ai_ci等刚性参数,否则cmake静默失败或初始化后乱码。

直接编译 MySQL 8.0 在 Debian 12 上可行,但必须避开几个硬性门槛:CMake 版本不能低于 3.11.2、make 必须可用、boost 路径必须显式指定,否则 cmake 会静默失败或报错退出。
cmake 版本太低导致 CMakeLists.txt 报错
Debian 12 默认源里的 cmake 是 3.25.x,看似够用,但某些 MySQL 8.0.x(如 8.0.42)仍会因内部检查逻辑拒绝低微小版本(比如 3.25.1 被判为不满足 “≥3.25.2”)。最稳妥做法是手动安装官方二进制版:
- 卸载系统自带:
sudo apt remove --purge cmake - 下载并解压(以 3.31.7 为例):
wget https://github.com/Kitware/CMake/releases/download/v3.31.7/cmake-3.31.7-linux-x86_64.tar.gz && tar -xf cmake-3.31.7-linux-x86_64.tar.gz -C /usr/local/ - 建立软链:
sudo ln -sf /usr/local/cmake-3.31.7-linux-x86_64/bin/cmake /usr/bin/cmake - 验证:
cmake --version输出应为cmake version 3.31.7
若跳过这步,你会看到类似 CMake Error at CMakeLists.txt:110 (CMAKE_MINIMUM_REQUIRED): CMake 3.11.2 or higher is required 的错误,且不会告诉你当前版本只差 0.01 —— 它就卡在这儿不动。
boost 路径未指定或指向错误目录
MySQL 8.0+ 不再自带 boost,必须提前下载并告知 cmake 其位置。常见错误是误用系统级 /usr/include/boost,这会导致编译中途报 undefined reference to `boost::system::generic_category()` 等链接失败。
- 正确做法:进入 MySQL 源码根目录(如
mysql-8.0.42/),运行./configure --help | grep boost确认是否支持-DWITH_BOOST; - 下载对应版本(如官方推荐的
boost_1_77_0)到本地某处(例如/usr/local/src/boost_1_77_0/); - cmake 命令中必须写全路径:
-DWITH_BOOST=/usr/local/src/boost_1_77_0/(末尾斜杠不能少); - 切勿用
-DDOWNLOAD_BOOST=1:它在离线环境或代理受限时大概率失败,且下载的 boost 版本未必匹配当前 MySQL 补丁号。
关键 CMake 参数组合与常见遗漏项
以下参数不是可选“锦上添花”,而是影响启动、连接、字符集、安全性的刚性配置:
-
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql:安装路径,必须与后续mysqld启动脚本中的路径一致; -
-DMYSQL_DATADIR=/var/lib/mysql:数据目录,确保该路径存在且mysql用户有读写权限; -
-DDEFAULT_CHARSET=utf8mb4和-DDEFAULT_COLLATION=utf8mb4_0900_ai_ci:MySQL 8.0 默认排序规则已变更,不设则初始化后客户端可能乱码; -
-DWITH_SSL=system:复用系统 OpenSSL,避免自己编译 OpenSSL 引发 ABI 冲突; -
-DWITH_SYSTEMD=1:生成 systemd service 文件,否则得手写启动脚本; -
-DENABLED_LOCAL_INFILE=1:禁用此项会导致LOAD DATA INFILE报错ERROR 1148 (42000): The used command is not allowed with this MySQL version。
漏掉其中任一,都可能让服务跑起来却无法正常使用——比如没开 LOCAL_INFILE,业务导入就卡死;没设 DEFAULT_COLLATION,新建库表默认用 utf8mb4_general_ci,跟 8.0 新默认不兼容。
make 编译失败:找不到 Unix Makefiles 或 missing: git_executable
这类报错往往不是真的缺 Git,而是构建环境不完整:
-
cmake error: cmake was unable to find a build program corresponding to "Unix Makefiles":说明make未安装或不在$PATH中。执行which make,若无输出,装:sudo apt install build-essential(它含make、gcc、g++); -
could not find git (missing: git_executable):只是警告,不影响编译,可忽略;但若你希望mysqld --version显示 commit hash,需装git并确保在源码根目录下(即mysql-8.0.42/内有.git目录); - 编译耗时长(单核约 30–60 分钟),建议加
-j$(nproc)加速:make -j$(nproc); - 若中途中断,不要直接
make继续,先make clean或删掉整个 build 目录重来,否则残留 object 文件易引发奇怪链接错误。
编译完成后,make install 前务必确认 /usr/local/mysql 下没有残留旧文件;初始化前先运行 sudo /usr/local/mysql/bin/mysqld --initialize --user=mysql --datadir=/var/lib/mysql,日志里会输出临时 root 密码——这个密码只显示一次,错过就得删 data 目录重来。


















