在 Linux(以 CentOS 7/Stream 8/9 为例)上源码编译安装 MySQL 8.0是一个相对复杂的过程,因为它需要大量的依赖库、较高的内存(建议 4GB 以上,否则编译可能失败)以及较新的 CMake 版本。
以下是基于最新环境整理的MySQL 8.0 源码编译安装完整实战指南。
⚠️ 编译前重要提示
- 硬件要求:编译过程非常消耗内存和 CPU。建议至少 2核 CPU 和 4GB 内存。如果内存只有 2GB,必须增加 Swap 分区,否则 make 过程中会被系统杀掉(OOM)。
- 时间成本:编译过程可能需要 30 分钟到 2 小时,取决于机器性能。
- Boost 库:MySQL 8.0 强依赖 Boost 库,且对版本要求严格。通常推荐下载包含 Boost 的源码包(文件名带 boost)。
第一步:系统环境准备
1. 卸载冲突软件
确保系统中没有安装 MariaDB 或旧版 MySQL。- # 停止服务
- systemctl stop mariadb
- systemctl disable mariadb
- # 卸载
- yum remove -y mariadb-libs mariadb mysql mysql-libs
- rm -rf /etc/my.cnf /etc/mysql
复制代码 2. 安装编译依赖工具
MySQL 8.0 编译需要 gcc, gcc-c++, cmake, ncurses, bison, openssl 等开发包。- yum install -y gcc gcc-c++ cmake make ncurses-devel bison openssl-devel openssl libaio-devel libtirpc-devel rpcgen libxcrypt-devel perl wget tar vim
复制代码 3. 升级 CMake (关键步骤)
CentOS 7 自带的 CMake 版本通常过低(2.8.x),而 MySQL 8.0 需要 CMake 3.5+(建议 3.16+)。
如果 cmake --version 显示版本低于 3.5,请执行以下操作升级:- # 下载较新版本的 cmake (例如 3.24.2)
- cd /usr/local/src
- wget https://github.com/Kitware/CMake/releases/download/v3.24.2/cmake-3.24.2-linux-x86_64.tar.gz
- # 或者编译安装源码版 cmake (如果上面的二进制包不可用)
- # wget https://cmake.org/files/v3.24/cmake-3.24.2.tar.gz
- # 解压二进制包直接可用
- tar -zxvf cmake-3.24.2-linux-x86_64.tar.gz
- mv cmake-3.24.2-linux-x86_64 cmake-3.24.2
- ln -s /usr/local/src/cmake-3.24.2/bin/cmake /usr/bin/cmake
- ln -s /usr/local/src/cmake-3.24.2/bin/ccmake /usr/bin/ccmake
- # 验证版本
- cmake --version
- # 应显示 3.24.2 或更高
复制代码 4. 创建用户和目录
- # 创建 mysql 用户和组
- groupadd mysql
- useradd -r -g mysql -s /bin/false mysql
- # 创建安装目录和数据目录
- mkdir -p /usr/local/mysql
- mkdir -p /data/mysql
- chown -R mysql:mysql /data/mysql
- chown -R mysql:mysql /usr/local/mysql
复制代码 第二步:下载源码包
强烈建议下载带有 Boost 的源码包(文件名包含 boost),这样可以避免手动下载匹配版本的 Boost 库的麻烦。
前往官网或使用 wget 下载(版本号可根据需要调整,这里以 8.0.36 为例):- cd /usr/local/src
- # 下载带 boost 的源码包 (约 200MB+)
- wget https://downloads.mysql.com/archives/get/p/23/file/mysql-boost-8.0.36.tar.gz
- # 解压
- tar -zxvf mysql-boost-8.0.36.tar.gz
- cd mysql-8.0.36
复制代码 第三步:配置 CMake (核心步骤)
创建一个 build 目录进行编译(推荐 out-of-source 编译),然后运行 cmake 配置。- mkdir build
- cd build
- cmake .. \
- -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
- -DMYSQL_DATADIR=/data/mysql \
- -DSYSCONFDIR=/etc \
- -DWITH_BOOST=../boost/boost_1_81_0 \
- -DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
- -DDEFAULT_CHARSET=utf8mb4 \
- -DDEFAULT_COLLATION=utf8mb4_general_ci \
- -DWITH_INNOBASE_STORAGE_ENGINE=1 \
- -DWITH_ARCHIVE_STORAGE_ENGINE=1 \
- -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
- -DWITH_PARTITION_STORAGE_ENGINE=1 \
- -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
- -DWITHOUT_MROONGA_STORAGE_ENGINE=1 \
- -DWITH_DEBUG=0 \
- -DWITH_SSL=system \
- -DWITH_ZLIB=bundled \
- -DENABLED_LOCAL_INFILE=1 \
- -DWITH_EMBEDDED_SERVER=0
复制代码 参数解释:
- -DCMAKE_INSTALL_PREFIX: 安装路径。
- -DMYSQL_DATADIR: 数据文件存放路径。
- -DWITH_BOOST: 指定 Boost 库的路径(解压后的源码包内自带,路径需对应实际文件夹名,如 boost_1_81_0)。
- -DDEFAULT_CHARSET: 默认字符集,推荐 utf8mb4。
- -DWITH_SSL=system: 使用系统安装的 OpenSSL。
注意:如果 cmake 报错,请仔细阅读错误信息,通常是缺少某个开发包(如 rpcgen 或 libtirpc),安装后重新运行 cmake 命令即可。
第四步:编译与安装
这一步最耗时。建议使用 make -j 开启多线程编译(nproc 查看 CPU 核数)。- # 编译 (根据 CPU 核数调整 -j 后面的数字,例如 4 核就用 -j 4)
- make -j $(nproc)
- # 安装
- make install
复制代码 如果在 make 过程中卡死或报错 Killed,说明内存不足,请立即增加 Swap 分区。
第五步:初始化与配置
1. 环境变量配置
- echo 'export PATH=/usr/local/mysql/bin:$PATH' >> /etc/profile
- source /etc/profile
复制代码 2. 编写配置文件 /etc/my.cnf
- [mysqld]
- basedir = /usr/local/mysql
- datadir = /data/mysql
- port = 3306
- socket = /tmp/mysql.sock
- pid-file = /data/mysql/mysqld.pid
- user = mysql
- character-set-server = utf8mb4
- collation-server = utf8mb4_general_ci
- skip-name-resolve
- sql_mode = NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
- [client]
- socket = /tmp/mysql.sock
- default-character-set = utf8mb4
复制代码 3. 初始化数据库
MySQL 8.0 推荐使用 --initialize-insecure 生成空密码,方便首次登录,或者使用 --initialize 生成随机密码。- # 确保数据目录权限正确
- chown -R mysql:mysql /data/mysql
- chown -R mysql:mysql /usr/local/mysql
- # 初始化 (不安全模式,root 无密码)
- /usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql
- # 如果要用安全模式(生成临时密码),请看日志末尾
- # /usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql
复制代码 4. 启动服务
编译安装不会自动注册 systemd 服务,需要手动复制脚本或创建 service 文件。
方法 A:使用官方提供的启动脚本(简单)- cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
- chmod +x /etc/init.d/mysqld
- # 启动
- /etc/init.d/mysqld start
- # 设置开机自启
- chkconfig --add mysqld
- chkconfig mysqld on
复制代码 方法 B:使用 Systemd (推荐 CentOS 7+)
创建 /etc/systemd/system/mysqld.service:- [Unit]
- Description=MySQL Server
- After=network.target
- [Service]
- Type=forking
- User=mysql
- Group=mysql
- ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf
- ExecReload=/bin/kill -HUP $MAINPID
- KillMode=process
- Restart=on-failure
- LimitNOFILE=65535
- [Install]
- WantedBy=multi-user.target
复制代码 然后执行:- systemctl daemon-reload
- systemctl start mysqld
- systemctl enable mysqld
复制代码 第六步:登录与安全加固
- 登录数据库
- 如果是 --initialize-insecure:
- 如果是 --initialize:
- grep 'temporary password' /data/mysql/error.log
- mysql -u root -p
- # 输入上面查到的临时密码
复制代码
- 修改密码与配置
首次登录后(特别是安全初始化),必须修改密码:- -- 修改 root 密码
- ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourStrongPassword123!';
- -- 允许远程连接 (可选)
- CREATE USER 'root'@'%' IDENTIFIED BY 'YourStrongPassword123!';
- GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
- FLUSH PRIVILEGES;
- -- 退出
- EXIT;
复制代码 - 验证安装
- mysql -V
- # 输出应包含 "Ver 8.0.xx"
- netstat -tlnp | grep 3306
- # 确认端口监听
复制代码 常见问题排查
- 内存不足 (OOM): 编译时进程被杀。
- 解决: dd if=/dev/zero of=/swapfile bs=1M count=4096 && mkswap /swapfile && swapon /swapfile (增加 4G Swap)。
- Boost 版本不匹配: CMake 报错 Boost 版本不对。
- 解决: 务必下载带 boost 的源码包,并且 -DWITH_BOOST 路径要指向解压出来的具体 boost 文件夹(如 boost_1_81_0)。
- SSL 错误: 编译找不到 SSL。
- 解决: 确保安装了 openssl-devel,并在 CMake 中使用 -DWITH_SSL=system。
按照以上步骤,您就可以成功从源码编译并安装一个定制的 MySQL 8.0 数据库了。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |