当前位置: 首页 > article >正文

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

常见问题

  1. 编译失败:检查依赖是否完整,清理构建目录后重新配置:
    rm -rf CMakeCache.txt
    
  2. 权限问题:确保所有 MySQL 目录属于 mysql:mysql 用户组。
  3. 连接错误:检查 /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 库,但可能出现以下问题:

  1. 系统仓库中的 Boost 版本不符合 MySQL 要求
  2. CMake 未正确找到 Boost 库路径
  3. 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

附加说明

  1. 网络问题:如果处于内网环境,需设置代理:
    export https_proxy=http://your.proxy:port
    
  2. 完整性校验:自动下载会验证文件 SHA256 校验和,若失败需检查网络
  3. 磁盘空间:确保至少有 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 构建脚本并没有接收或使用这个变量。它可能是多余的,或者是因为某些原因被忽略了。

解决方法:

  1. 检查 CMake 参数:确保你指定的所有 CMake 变量是正确的并且被 MySQL 构建脚本支持。你可以查看 MySQL 官方文档或者 CMake 配置文件来确认 EFAULT_CHARSET 是否是一个有效的变量。

  2. 移除无效的变量:如果确认 EFAULT_CHARSET 并不是必需的,你可以尝试从命令中移除它,重新运行 cmake,看看警告是否消失。

  3. 检查变量拼写:确认你是否拼写错误。如果这个变量是 MySQL 编译过程中需要的参数,可能存在拼写错误的情况。

  4. 查看 CMake 输出:你可以通过仔细查看 CMake 输出的其他内容,找到是否有更多的信息或提示,可能帮助你找到问题的根源。

如果以上方法都没有解决问题,你可以考虑查阅 MySQL 官方的构建文档,看看是否有关于该变量的更多解释。


http://www.kler.cn/a/535845.html

相关文章:

  • 从零开始:OpenCV 图像处理快速入门教程
  • import { Component, Vue, Prop, Watch } from ‘vue-property-decorator‘
  • Win32 学习笔记目录
  • 通过Python编写的中国象棋小游戏
  • c++11总结26——std::regex
  • 在残差网络(ResNet)中,如何避免学习到原始映射
  • spring aop失效场景
  • 本地化部署 AI 的第一步,认识和使用 ollama
  • 【DeepSeek青桔系列】Ollama 部署 DeepSeek:AI 界的“拼多多”!
  • leetcode——只出现一次的数字(java)
  • 阿里云与腾讯云 DDoS 防御价格大比拼
  • vue组件和插件的区别与联系
  • 【前端】【面试】【经典一道题】前端 Vue、React 采用单向数据流的原因
  • 基于离散浣熊优化算法(Discrete Coati Optimization Algorithm,DCOA)的骑手配送路径规划研究,MATLAB代码
  • Java 面试之结束问答
  • .net知识点4
  • 【Linux】冯诺依曼体系结构和操作系统概念理解
  • 如果$nextTick内部抛出错误,如何处理?
  • 发布:大彩科技DB系列1.6寸圆形UI串口屏发布!
  • 树莓派卷积神经网络实战车牌检测与识别
  • Linux 内核源码can相关配置项
  • 每日Attention学习21——Cascade Multi-Receptive Fields
  • 华为od 勾股数元组
  • 如何在 FastAPI 中使用本地资源自定义 Swagger UI
  • ElasticSearch 学习课程入门(二)
  • 【2024华为OD-E卷-100分-箱子之字形摆放】((题目+思路+JavaC++Python解析)