MySQL 5.7起必须用cmake配置(最低2.8.12,推荐3.10+),在独立build目录中执行;必须显式指定-DCMAKE_INSTALL_PREFIX和-DMYSQL_DATADIR(后者须为空且有权限);启用系统OpenSSL需-DWITH_SSL=system;编译建议单核或限并行以避免OOM。

configure 阶段必须指定 cmake 而非旧版 ./configure
MySQL 5.7 起彻底弃用 Autotools,源码根目录下已没有 configure 脚本。直接运行会报错:no such file or directory: ./configure。必须用 cmake 配置构建环境,且最低要求 cmake 2.8.12(推荐 3.10+)。
常见错误是沿用老教程写法,在源码目录执行 ./configure --prefix=/usr/local/mysql,结果 bash 直接报错退出。
-
cmake命令必须在独立的build子目录中运行,不能在源码根目录直接执行 - 推荐命令:进入
mysql-source后,先mkdir build && cd build,再运行cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -
..表示上层源码目录,路径写错会导致CMake Error: The source directory does not appear to contain CMakeLists.txt
关键安装参数:DCMAKE_INSTALL_PREFIX 和 DMYSQL_DATADIR 必须显式指定
不指定 DCMAKE_INSTALL_PREFIX 时,默认装到 /usr/local/ 下,但多数人需要自定义路径;更关键的是 DMYSQL_DATADIR —— 它决定初始化后数据文件存放位置,若与后续 mysqld 启动时读取的路径不一致,服务根本起不来,日志里只有一句模糊的 Can't find file: './mysql/plugin.frm'。
-
DCMAKE_INSTALL_PREFIX控制二进制、配置、脚本等安装位置(如/usr/local/mysql) -
DMYSQL_DATADIR必须指向一个**空目录**,且mysqld进程有读写权限,例如-DMYSQL_DATADIR=/data/mysql - 如果同时用
DSYSCONFDIR指定配置文件位置(如-DSYSCONFDIR=/etc),记得后续my.cnf里datadir项要和DMYSQL_DATADIR一致
编译时加 -DWITH_SSL=system 才能真正用上系统 OpenSSL
默认 cmake 会静态链接 MySQL 自带的 yaSSL(轻量但功能受限),导致不支持 TLSv1.2+、无法验证客户端证书、甚至和某些 Java 客户端握手失败。现象是连接时报 SSL connection error: protocol version mismatch 或 Unknown SSL cipher in list。
- 显式加
-DWITH_SSL=system,让编译器去找系统openssl头文件和库(需提前装openssl-devel或libssl-dev) - 验证是否生效:编译完成后,运行
ldd /usr/local/mysql/bin/mysqld | grep ssl,应看到类似libssl.so.1.1 => /lib64/libssl.so.1.1 - 别用
-DWITH_SSL=bundled(这是默认值),也别漏掉=system的等号,写成-DWITH_SSL system会静默忽略
make 编译耗时长且易因内存不足中断
MySQL Server 源码含大量模板和复杂解析逻辑,make -j$(nproc) 在 4GB 内存机器上大概率 OOM,cc1plus 进程被 kill,终端只留一句 Killed,无任何错误提示。
- 保守做法:去掉并行,用
make(单核)或最多make -j2 - 检查内存:编译前运行
free -h,确保可用内存 ≥ 3GB;若不足,可临时加 swap:sudo fallocate -l 2G /swapfile && sudo mkswap /swapfile && sudo swapon /swapfile - 编译完成不要立刻
make install,先用./support-files/mysql.server start测试能否跑通初始化:bin/mysqld --initialize --user=mysql --datadir=/data/mysql
参数组合没标准答案,但 DCMAKE_INSTALL_PREFIX、DMYSQL_DATADIR、DWITH_SSL=system 这三项一旦漏掉或写错,后面所有操作都在给错误铺路。尤其是 datadir,它不像其他参数改完配置就能热生效——路径错一次,就得删库重来。











