源码编译安装mysql 8.0不支持运行时热加载自定义模块,所有功能(如存储引擎、ssl库、memcached接口)必须在cmake编译阶段通过参数静态启用或禁用,且需严格满足cmake≥3.16、boost路径准确等前提条件。

源码编译安装 MySQL 8.0 本身不支持“自定义模块”像插件那样热加载,但你可以通过 CMake 编译选项控制哪些存储引擎、功能组件被静态链接进二进制文件。所谓“自定义模块”,实际是指在编译阶段启用/禁用特定功能(如 rocksdb、memcached、innodb_memcached),或集成第三方 SSL 库(如 wolfssl)。直接修改源码添加新模块属于深度二次开发,不在常规部署范畴内。
必须先解决 CMake 和 Boost 版本兼容性
CentOS 8 自带的 cmake 是 3.12+,看似够用,但 MySQL 8.0.31+ 实际依赖 CMake 3.16+ 的某些特性(比如 find_package(Threads) 行为变更)。若 cmake --version 显示 3.12.x 或更低,编译中途大概率报错 CMake Error: The source directory does not appear to contain CMakeLists.txt 或卡在 Boost 检测。
- 下载二进制版
cmake-3.24.2-linux-x86_64.tar.gz,解压后软链到/usr/bin/cmake -
Boost必须用官方推荐版本(如boost_1_70_0),且路径需绝对准确;若使用-DDOWNLOAD_BOOST=1,需确保构建机可联网,否则会卡死在Downloading boost... - 不要混用
boost源码和预编译包:MySQL 8.0.31 要求boost解压后目录下有boost/version.hpp,否则cmake ..直接失败
编译时启用/禁用模块的关键 CMake 参数
MySQL 不提供运行时动态加载任意模块的能力,所有“模块”行为由编译期开关决定。核心参数如下:
-
-DWITH_INNOBASE_STORAGE_ENGINE=1:必须开启,InnoDB 是默认引擎,禁用则无法初始化 -
-DWITH_ROCKSDB_STORAGE_ENGINE=1:启用 RocksDB 引擎(需额外 patch 和依赖librocksdb,非官方主线支持) -
-DWITH_INNODB_MEMCACHED=1:启用 memcached 接口(依赖libevent,CentOS 8 需dnf install libevent-devel) -
-DWITHOUT_PARTITION_STORAGE_ENGINE=1:禁用分区表支持(减小二进制体积,但会影响已有业务) -
-DWITH_SSL=system:优先用系统 OpenSSL(CentOS 8 默认装openssl-libs-1.1.1k),比-DWITH_SSL=bundled更安全且省空间
示例完整命令(含模块控制):
MySQL 9.6.0是面向Linux平台的2026年创新版本,核心架构迎来重大革新。其将外键约束与级联操作从InnoDB引擎层上移至SQL层,确保所有数据变更均被完整记录至Binlog,彻底解决了CDC(变更数据捕获)与主从复制中的数据不一致难题。此外,该版本引入container_aware启动选项以原生适配容器环境,并对审计日志进行了组件化重构,为追求极致数据一致性与云原生体验的开发者提供了全新选择。
cmake .. \ -DCMAKE_INSTALL_PREFIX=/opt/mysql \ -DDEFAULT_CHARSET=utf8mb4 \ -DDEFAULT_COLLATION=utf8mb4_0900_ai_ci \ -DWITH_INNODB_MEMCACHED=1 \ -DWITH_SSL=system \ -DWITH_BOOST=/usr/local/src/boost_1_70_0 \ -DBUILD_CONFIG=mysql_release
常见模块相关编译失败现象与修复
编译过程报错往往不是语法问题,而是模块依赖未满足或参数冲突:
-
Could NOT find LibLZ4:启用rocksdb时缺失,需dnf install lz4-devel -
Cannot find bison:即使已装bison,也可能是路径未加入$PATH,检查which bison输出是否为/usr/bin/bison -
SSL libraries not found:指定-DWITH_SSL=system但系统 OpenSSL 开发包未装全,补dnf install openssl-devel -
relocation R_X86_64_32 against `.rodata':常见于低内存虚拟机(make 过程触发 OOM,必须加 Swap 或升级内存
初始化后验证模块是否生效
编译安装完成不等于模块可用,必须在数据库启动后手动确认:
- 启动前确保
my.cnf中未禁用对应功能,例如启用 memcached 需加:loose-innodb_memcached_enable=ON - 登录后执行:
SHOW ENGINES;查看ROCKSDB或MEMCACHED是否状态为SUPPORT - 检查插件:
SELECT * FROM information_schema.PLUGINS WHERE PLUGIN_NAME LIKE '%memcache%'; - 若看到
DISABLED,说明编译时未启用,或配置文件中被显式关闭,需重新编译
真正容易被忽略的是:MySQL 8.0 的模块启用是“编译期绑定 + 配置文件激活”双条件,缺一不可;而且部分模块(如 rocksdb)需要额外 patch,官方源码树默认不包含,不能仅靠 CMake 参数打开。










