环境准备
系统:Kylin V10
源码安装官方文档:https://dev.mysql.com/doc/refman/8.4/en/source-installation.html
官网源码下载地址:https://downloads.mysql.com/archives/community/

8.0 源码命令直接下载:wget https://downloads.mysql.com/archives/get/p/23/file/mysql-boost-8.0.20.tar.gz
8.0.20 源码下载:wget https://downloads.mysql.com/archives/get/p/23/file/mysql-boost-8.0.20.tar.gz
cmake(我下载的 4.0 版本):https://cmake.org/files/
依赖相关说明
依赖库
Cmake 作用?
CMake 是一个跨平台的构建系统生成器,是编译大型C/C++项目(如MySQL 8.0)的核心工具。您可以把它理解为一个“项目构建的总工程

Boost 作用?
Boost 是一个免费、开源的 C++ 标准库扩展集,它提供了大量高质量、可移植的 C++ 工具类和函数,填补了 C++ 标准库的功能空白,同时也是很多大型开源项目的核心依赖。
对于 MySQL 来说,Boost 不是可选依赖,而是编译必需的核心库,主要用于以下功能:
1. 异步 I/O 操作:支撑 MySQL 的高性能并发处理能力;
2. 正则表达式处理:用于 SQL 语句中的正则匹配逻辑;
3. 智能指针、容器扩展:补充 C++ 标准库的容器和内存管理能力;
4. 线程与并发控制:助力 MySQL 多线程架构的稳定运行。
cmake 参数说明
部署流程
下载依赖及软件包
#cmake安装
tar xf cmake-4.0.0-linux-x86_64.tar.gz -C /opt
ln -s /opt/cmake-4.0.0-linux-x86_64/bin/cmake /usr/local/bin/cmake
cmake --version #应显示4.0.0版本
#更新缓存
yum clean all && yum makecache fast
#安装依赖库
yum install -y lrzsz curl telnet wget tar vim unzip zip gcc gcc-c++ git openssl-devel perl ncurses-devel bison-devel libaio libaio-devel libtirpc-devel rpcsvc-proto-devel rpcgen openssl make bison flex pkg-config zlib-devel numactl-devel perl-Data-Dumper perl-JSON perl-Test-Simple boost-devel libtirpc libtirpc-devel
[root@db777 ~]# gcc --version
gcc (GCC) 7.3.0
#下载mysql8.0.20源码包
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-boost-8.0.20.tar.gz
解压与依赖检查
#解压mysql8.0.20源码包
tar xf mysql-boost-8.0.20.tar.gz -C /usr/local/
cd /usr/local/mysql-8.0.20/
#创建编译目录
mkdir build && cd build
tips:编译mysql-boost-8.0.20时,为什么要单独创建编译文件夹build?
答:编译过程中会产生大量的临时文件和对象文件。
将这些文件与源代码分开,可以保持源代码目录的整洁,
使得管理和维护变得更加容易。当你需要清理编译过程中产生的所有文件时,
只需要删除这个单独的编译目录即可,而不会影响到源代码文件。
#执行cmake检查依赖
cmake .. \
-DDOWNLOAD_BOOST=1 \
-DWITH_BOOST=../boost \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql-8.0.20 \
-DMYSQL_DATADIR=/app/data \
-DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
-DCMAKE_CFLAGS="-I/usr/include/tirpc" \
-DCMAKE_CXX_FLAGS="-I/usr/include/tirpc" \
-DCMAKE_LDFLAGS="-ltirpc" \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DMYSQL_TCP_PORT=3306 \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci \
-DWITH_SYSTEMD=1 \
-DLOWER_CASE_TABLE_NAMES=1 \
-DMYSQL_USER=mysql \
-DWITH_SSL=system \
-DDISABLE_SHARED=OFF \
-DWITH_ZLIB=system
#以上依赖在我部署中的环境已足够,如果还是遇到缺少依赖问题
#安装所缺少的依赖,清除Cmake缓存与脚本,重新执行cmake检查
rm -rf CMakeCache.txt CMakeFiles/
#检查直到无报错就表示依赖已经准备好了(警告没关系),可以进行编译
编译与安装
# 编译(-j后跟CPU核心数,比如4核写-j4,提升速度)
make -j $(nproc)
# 安装(将编译后的文件复制到指定安装目录)
make install
ll /usr/local/mysql-8.4.0/bin/mysqld
#创建虚拟用户
useradd -M -s /sbin/nologin mysql
# 创建数据目录并授权
mkdir -p /app/data
chown -R mysql:mysql /app/data
chmod -R 755 /app/data初始化与配置 mysql
# 进入MySQL的bin目录
cd /usr/local/mysql-8.0.20/bin
#创建安装目录
mkdir -p /usr/local/mysql
# 执行初始化
bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/app/data --lower-case-table-names=1
#生成临时密码:twgkVi=e4Kg 你也可以选择不加密方式初始化
# 编写配置文件
vim /etc/my.cnf
[mysqld]
basedir=/usr/local/mysql-8.0.20
datadir=/app/data
socket=/tmp/mysql.sock
port=3306
user=mysql
log-error=/app/data/mysqld.log
pid-file=/app/data/mysqld.pid
lower_case_table_names=1
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
[client]
socket=/tmp/mysql.sock
cp /usr/local/mysql-8.0.20/support-files/mysql.server /etc/init.d/mysqld
# 修改配置文件(大概在45-55行左右)
vim /etc/init.d/mysqld
basedir=/usr/local/mysql-8.0.20
datadir=/app/data
# 添加执行权限并设置开机自启
chmod +x /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig mysqld on
# 启动:
service mysqld start
service mysqld status
# 配置环境变量
echo 'export PATH=/usr/local/mysql-8.0.20/bin:$PATH' >> /etc/profile
# 生效环境变量
source /etc/profile
# 验证
mysql --version
# 登录验证
mysql -u root -p
密码:twgkVi=e4Kg
# 修改密码
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;
EXIT;




所遇问题总结
CMake 版本过旧 (Compatibility with CMake < 3.5 has been removed)
根因:CMake 版本为 4.0.0,但 MySQL 8.0.20 的extra/zstd组件 CMake 脚本版本声明格式老旧,触发高版本 CMake 的兼容性校验。
解决方案:
方案一:强制指定最低兼容版本(我用的这个方案,已添加到cmake检查参数)
在 CMake 命令中添加参数-DCMAKE_POLICY_VERSION_MINIMUM=3.5,强制指定最低兼容版本。
方案二:更新Cmake(非常耗时)
# 1. 安装编译依赖
sudo yum install -y gcc gcc-c++ make openssl-devel
# 2. 下载较新的CMake源码包
cd /tmp
wget https://github.com/Kitware/CMake/releases/download/v3.28.3/cmake-3.28.3.tar.gz
tar -xzf cmake-3.28.3.tar.gz
cd cmake-3.28.3
# 3. 编译安装
./bootstrap
make -j$(nproc)
sudo make install
# 4. 验证新版本(默认安装到 /usr/local/bin)
/usr/local/bin/cmake --version
# cmake version 3.28.3
# 创建软链接覆盖旧版本
sudo ln -sf /usr/local/bin/cmake /usr/bin/cmake
Boost 版本不匹配 (Boost minor version found is 77 we need 70)
根因:之前为 MySQL 8.4.0 准备的 Boost 1.77.0 用于 8.0.20,后要求 Boost 1.70.0。
MySQL 与 Boost 库存在版本强绑定关系,不同 MySQL 主版本 / 次版本要求固定的 Boost 版本,
MySQL 8.0.19-8.0.21 → 必须 Boost 1.70.0
MySQL 8.4.x → 必须 Boost 1.77.0
解决方案:
方案一:启用自动下载 Boost 库的功能(我用的这个方案,已添加到cmake检查参数)
-DDOWNLOAD_BOOST=1
方案二:提前下好Boost1.70.0依赖(我不推荐,国外的地址,下载慢,网络不稳定容易中断)
地址:https://www.boost.org/users/history/version_1_70_0.html
#创建Boost工具目录
mkdir -p /opt/boost
tar xf boost_1_70_0.tar.gz -C /opt/boost --strip-components=1
# 验证Boost解压结果(有bootstrap.sh则正确)
ls /opt/boost | grep bootstrap.sh
#使用此方案,需要在cmake检查时,指定Boost目录
-DBOOST_ROOT=/opt/boost缺少系统库 (Could not find rpc/rpc.h)
根因:现代 Linux 将部分 RPC 函数移入单独的 libtirpc 库。缺少其开发包(libtirpc-devel)导致编译找不到头文件和库。
解决:
yum -y install libtirpc-devel内存/交换空间不足 (ld 以信号 9 [已杀死] 退出)
现象:编译到最后链接阶段被系统强制终止。
根因:链接器 (ld) 合并所有目标文件时内存需求激增,超过物理内存(1.9GiB)。内核 OOM Killer 为保护系统而终止了最耗内存的进程。
我刚开始用的 2c2g,在编译快结束时报错,内存溢出系统主动中断编译,破大防!!!
所以还是推荐内存高一点:2c4g

评论交流
欢迎留下你的想法