ubuntu22.04源码编译mysql8.0.X详细流程【由deepseek提供】
以下是在 Ubuntu 22.04 上从源代码编译安装 MySQL 8.0.X(以 MySQL 8.0.37 为例)的详细操作流程:
一、准备工作
1. 更新系统
sudo apt update && sudo apt upgrade -y
sudo apt install -y build-essential cmake pkg-config libssl-dev libncurses5-dev libtinfo-dev \
libreadline-dev zlib1g-dev libicu-dev libaio1 libaio-dev libnuma-dev
2. 安装依赖库
- Boost 库(MySQL 8.0 依赖):
sudo apt install -y libboost-dev libboost-system-dev libboost-filesystem-dev
注意:MySQL 8.0.37 需要 Boost 1.77.0,Ubuntu 22.04 默认仓库提供兼容版本。
3. 创建专用用户和组
sudo groupadd mysql
sudo useradd -r -g mysql -s /bin/false mysql
二、下载并解压 MySQL 源码
1. 下载源码包
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.37.tar.gz
2. 解压源码
tar -zxvf mysql-8.0.37.tar.gz
cd mysql-8.0.37
三、配置编译参数
mkdir build
cd build
cmake .. \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DWITH_BOOST=../boost \
-DSYSCONFDIR=/etc \
-DEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_0900_ai_ci \
-DENABLED_LOCAL_INFILE=ON \
-DWITH_SSL=system \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITH_ZLIB=system \
-DWITH_LIBWRAP=0
参数说明:
CMAKE_INSTALL_PREFIX
: MySQL 安装目录MYSQL_DATADIR
: 数据存储目录WITH_BOOST
: 指定 Boost 库路径- 其他参数启用了常用存储引擎和 UTF8MB4 字符集。
四、编译与安装
make -j$(nproc) # 使用所有 CPU 核心加速编译
sudo make install
注意:编译时间取决于硬件配置(通常 15-60 分钟)。
五、配置 MySQL 环境
1. 设置目录权限
sudo chown -R mysql:mysql /usr/local/mysql
sudo chmod -R 750 /usr/local/mysql
2. 初始化数据库
cd /usr/local/mysql
sudo bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
- 记录输出的临时 root 密码(结尾类似
[Server] A temporary password is generated for root@localhost: ********
)
3. 创建配置文件
编辑 /etc/my.cnf
:
[mysqld]
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
socket=/tmp/mysql.sock
log-error=/usr/local/mysql/data/mysql.err
pid-file=/usr/local/mysql/data/mysql.pid
[client]
socket=/tmp/mysql.sock
六、启动 MySQL 服务
1. 创建 Systemd 服务文件
新建 /etc/systemd/system/mysql.service
:
[Unit]
Description=MySQL Server
After=network.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf
Restart=on-failure
[Install]
WantedBy=multi-user.target
2. 启动服务
sudo systemctl daemon-reload
sudo systemctl enable mysql
sudo systemctl start mysql
七、安全配置
1. 修改 root 密码
/usr/local/mysql/bin/mysql -u root -p
输入初始化时的临时密码后执行:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourNewPassword';
2. 运行安全脚本
sudo /usr/local/mysql/bin/mysql_secure_installation
按提示完成安全设置(删除测试数据库、禁用远程 root 登录等)。
八、验证安装
mysql -u root -p -e "SELECT VERSION();"
应输出类似:
+-----------+
| VERSION() |
+-----------+
| 8.0.37 |
+-----------+
版本说明
- MySQL: 8.0.37
- Ubuntu: 22.04.4 LTS
- 依赖库:
- OpenSSL 3.0.2
- Boost 1.77.0
- CMake 3.22.1
- GCC 11.4.0
常见问题
- 编译失败:检查依赖是否完整,清理构建目录后重新配置:
rm -rf CMakeCache.txt
- 权限问题:确保所有 MySQL 目录属于
mysql:mysql
用户组。 - 连接错误:检查
/tmp/mysql.sock
是否存在,或确认my.cnf
中 socket 路径一致。
通过以上步骤,您已在 Ubuntu 22.04 上成功编译安装了 MySQL 8.0.37。
出现的错误
CMake Error at cmake/boost.cmake:109 (MESSAGE):
You can download it with -DDOWNLOAD_BOOST=1 -DWITH_BOOST=<directory>
This CMake script will look for boost in <directory>. If it is not there,
it will download and unpack it (in that directory) for you.
You can also download boost manually, from
https://archives.boost.io/release/1.77.0/source/boost_1_77_0.tar.bz2
If you are inside a firewall, you may need to use an https proxy:
export https_proxy=http://example.com:80
Call Stack (most recent call first):
cmake/boost.cmake:207 (COULD_NOT_FIND_BOOST)
CMakeLists.txt:1563 (INCLUDE)
-- Configuring incomplete, errors occurred!
纠正
以下是针对该 CMake 编译错误的详细解决方案:
错误原因分析
MySQL 8.0 的编译依赖特定版本的 Boost 库(此处需要 Boost 1.77.0)。虽然你已通过 apt
安装了 Boost 库,但可能出现以下问题:
- 系统仓库中的 Boost 版本不符合 MySQL 要求
- CMake 未正确找到 Boost 库路径
- Boost 头文件未完全安装
解决方案一:让 CMake 自动下载 Boost(推荐)
1. 清理之前的构建目录
cd mysql-8.0.37/build
rm -rf *
2. 重新配置 CMake 并启用自动下载
cmake .. \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DWITH_BOOST=../boost \
-DDOWNLOAD_BOOST=1 \ # 新增关键参数
-DSYSCONFDIR=/etc \
-DEFAULT_CHARSET=utf8mb4 \
-DWITH_SSL=system \
-DWITH_INNOBASE_STORAGE_ENGINE=1
CMake 会自动下载 Boost 1.77.0 到
../boost
目录并验证 SHA256 校验和
解决方案二:手动下载并配置 Boost
1. 手动下载指定版本
wget https://archives.boost.io/release/1.77.0/source/boost_1_77_0.tar.bz2
tar -xvf boost_1_77_0.tar.bz2
mv boost_1_77_0 mysql-8.0.37/boost # 必须放在 MySQL 源码目录下的 boost 子目录
2. 重新配置 CMake
cd mysql-8.0.37/build
rm -rf *
cmake .. \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DWITH_BOOST=../boost \ # 指向包含 boost 的目录
... (其他参数保持原样)
验证 Boost 配置
成功配置后会显示以下信息:
-- Found Boost 1.77.0 at /path/to/boost
-- Boost headers: /path/to/boost
-- Boost version: 1.77.0
附加说明
- 网络问题:如果处于内网环境,需设置代理:
export https_proxy=http://your.proxy:port
- 完整性校验:自动下载会验证文件 SHA256 校验和,若失败需检查网络
- 磁盘空间:确保至少有 500MB 剩余空间存放 Boost 源码
完整修复流程示例(方案一)
# 进入构建目录
cd mysql-8.0.37/build
# 清理旧配置
rm -rf *
# 配置 CMake(启用自动下载)
cmake .. \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DWITH_BOOST=../boost \
-DDOWNLOAD_BOOST=1 \
-DSYSCONFDIR=/etc \
-DEFAULT_CHARSET=utf8mb4 \
-DWITH_SSL=system \
-DWITH_INNOBASE_STORAGE_ENGINE=1
# 继续编译安装
make -j$(nproc)
sudo make install
通过上述任一方案即可解决 Boost 依赖问题。推荐使用 方案一 自动下载,可避免手动操作的版本匹配问题。如果多次下载失败,可尝试更换网络环境或使用方案二手动下载。
出现警告
出警告了 CMake Warning:
Manually-specified variables were not used by the project:
EFAULT_CHARSET
-- Build files have been written to: /opt/mysql-8.0.37/build
CHATGPT给出解决方案
这个警告 Manually-specified variables were not used by the project: EFAULT_CHARSET
表示在你运行 cmake
时,手动指定的变量 EFAULT_CHARSET
并没有在 MySQL 的 CMake 配置文件中被使用到。
这种情况通常发生在你传递了某个 CMake 变量,但 MySQL 构建脚本并没有接收或使用这个变量。它可能是多余的,或者是因为某些原因被忽略了。
解决方法:
-
检查 CMake 参数:确保你指定的所有 CMake 变量是正确的并且被 MySQL 构建脚本支持。你可以查看 MySQL 官方文档或者 CMake 配置文件来确认
EFAULT_CHARSET
是否是一个有效的变量。 -
移除无效的变量:如果确认
EFAULT_CHARSET
并不是必需的,你可以尝试从命令中移除它,重新运行cmake
,看看警告是否消失。 -
检查变量拼写:确认你是否拼写错误。如果这个变量是 MySQL 编译过程中需要的参数,可能存在拼写错误的情况。
-
查看 CMake 输出:你可以通过仔细查看 CMake 输出的其他内容,找到是否有更多的信息或提示,可能帮助你找到问题的根源。
如果以上方法都没有解决问题,你可以考虑查阅 MySQL 官方的构建文档,看看是否有关于该变量的更多解释。