cmake版本必须≥3.11.2,debian 12系统源自带版本通常不满足,需手动下载二进制版安装;同时须装齐build-essential、libssl-dev等依赖,并正确配置dcmake_install_prefix、dmysql_datadir等关键参数,初始化数据目录后方可启动。

cmake 版本必须 ≥ 3.11,否则直接报错退出
Debian 12 自带的 cmake 通常低于 3.11(比如 3.25+ 是安全的,但旧镜像可能只有 3.20 或更低),而 MySQL 8.0.42 要求最低 CMAKE_MINIMUM_REQUIRED 为 3.11.2。遇到 CMake Error at CMakeLists.txt:110 (CMAKE_MINIMUM_REQUIRED): CMake 3.11.2 or higher is required 就说明版本不够。
不要用 apt install cmake 装系统源里的包 —— 它大概率不满足要求。推荐直接下载二进制版:
- 去 cmake.org/download 下载
cmake-3.31.7-linux-x86_64.tar.gz(当前最新稳定版) tar xf cmake-*.tar.gz -C /usr/local/ln -sf /usr/local/cmake-*/bin/cmake /usr/bin/cmake- 验证:
cmake --version应输出3.31.7
依赖库要提前装全,尤其 openssl 和 boost
Debian 12 默认不带编译 MySQL 所需的开发头文件和静态库,漏掉任何一个都可能在 cmake .. 阶段卡住或报 Could NOT find OpenSSL、Could NOT find Boost 类错误。
运行以下命令一次性装齐核心依赖:
apt update apt install -y build-essential libncurses-dev libssl-dev liblz4-dev libzstd-dev libsystemd-dev zlib1g-dev
注意两点:
-
libssl-dev提供OPENSSL_INCLUDE_DIR和OPENSSL_LIBRARY,MySQL 8.0 默认启用 SSL,不装它会 fallback 到DISABLED并警告 - Boost 不必手动下载:加
-DDOWNLOAD_BOOST=1参数让 CMake 自动拉取匹配版本;如果已有本地 Boost(比如解压在/usr/local/src/boost_1_77_0),就用-DWITH_BOOST=/path/to/boost
关键 CMake 参数含义与常见误配
参数顺序不重要,但值是否合理直接影响能否启动、是否支持远程、字符集是否生效。几个高频出问题的选项:
-
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql:安装根目录,后续mysqld启动时默认找这里;别写成/usr/local/mysql/(末尾斜杠会导致mysql_install_db找不到 bin 目录) -
-DMYSQL_DATADIR=/var/lib/mysql:数据目录,必须存在且mysql用户有读写权限;若用/data/mysql,得提前mkdir -p /data/mysql && chown mysql:mysql /data/mysql -
-DDEFAULT_CHARSET=utf8mb4和-DDEFAULT_COLLATION=utf8mb4_unicode_ci:这两个必须配对,只设 charset 不设 collation 会导致初始化失败 -
-DWITH_SSL=system:强制使用系统 OpenSSL,比内置更易维护;若设openssl或空值,可能链接失败 -
-DWITH_SYSTEMD=1:生成 systemd service 文件,Debian 12 必开;否则得手写 init script
完整常用命令示例(在 mysql-8.0.42/ 目录外新建 build/ 后执行):
cd build cmake .. \ -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ -DMYSQL_DATADIR=/var/lib/mysql \ -DDEFAULT_CHARSET=utf8mb4 \ -DDEFAULT_COLLATION=utf8mb4_unicode_ci \ -DWITH_SSL=system \ -DWITH_SYSTEMD=1 \ -DDOWNLOAD_BOOST=1 \ -DWITH_DEBUG=0
编译后必须初始化数据目录才能启动
make && make install 只是把二进制和配置文件放到位,/var/lib/mysql 还是空的。直接运行 mysqld 会报 Can't find file: './mysql/plugin.frm' 或卡在 Starting MySQL database server。
必须用安装目录下的脚本初始化:
- 确保
mysql用户存在:useradd -r -s /bin/false mysql - 切换到安装目录:
cd /usr/local/mysql - 执行初始化:
bin/mysqld --initialize --user=mysql --datadir=/var/lib/mysql - 查看临时 root 密码:
grep 'temporary password' /var/lib/mysql/error.log - 启动服务:
bin/mysqld_safe --user=mysql &或启用 systemd:systemctl daemon-reload && systemctl enable mysqld && systemctl start mysqld
初始化这一步最容易被跳过 —— 尤其当参考的是旧版教程(还用 mysql_install_db)时,MySQL 8.0 已彻底废弃该脚本。











