在 Oracle Linux 9.4 上编译 MySQL 9.1.0 源码

在 Oracle Linux 9.4 上编译 MySQL 9.1.0 源码

ShawnYan Lv.6

10月15日,MySQL 9.1.0 创新版本发布,带来了一系列创新特性,更新内容参考:MySQL 9.1.0 创新版发布!MySQL 8.0.40,8.4.3 小版本迭代

本文将详细介绍如何在 Oracle Linux 9.4 操作系统(以下简称 OL)编译安装 MySQL 9.1.0 数据库。

Oracle Linux

实验环境已安装 Oracle Linux 9.4,并更新内核至最新版本。以下是升级前后的系统信息对比。

  • 升级前:
1
2
3
4
5
6
7
8
[shawnyan@ol9 ~]$ hostname
ol9.shawnyan.cn
[shawnyan@ol9 ~]$ cat /etc/oracle-release
Oracle Linux Server release 9.4
[shawnyan@ol9 ~]$ uname -r
5.15.0-205.149.5.1.el9uek.x86_64
[shawnyan@ol9 ~]$ uname -v
#2 SMP Fri Apr 5 11:29:36 PDT 2024
  • 升级后:
1
2
3
4
[shawnyan@ol9 ~]$ uname -r
5.15.0-301.163.5.2.el9uek.x86_64
[shawnyan@ol9 ~]$ uname -v
#2 SMP Wed Oct 16 18:55:42 PDT 2024

安装依赖

MySQL 源码编译需要安装一些基础依赖包:

1
2
3
4
dnf install -y cmake \
gcc-toolset-13-gcc gcc-toolset-13-gcc-c++ gcc-toolset-13-annobin-annocheck gcc-toolset-13-annobin-plugin-gcc \
libcurl-devel zlib-devel lz4-devel protobuf ncurses-devel libaio-devel \
libtirpc-devel rpcgen

根据 MySQL 9.1.0 的 Release Notes 确认 cmake 的最低版本要求。

将 CMAKE_MINIMUM_REQUIRED 与正确的必需 CMake 版本 ( 3.14.6) 以及 MySQL 使用的第三方库的 CMake 策略保持一致。(Bug #36978193)

1
2
[shawnyan@ol9 ~]$ cmake --version
cmake version 3.26.5

编译源码

MySQL 9 的源码编译过程与之前版本类似,步骤简洁明了。

  1. 下载通用源码包。
1
https://dev.mysql.com/get/Downloads/MySQL-9.1/mysql-9.1.0.tar.gz
  1. 校验 MD5 指纹。
1
2
[shawnyan@ol9 ~]$ md5sum mysql-9.1.0.tar.gz
eb2c6bbd20569d2690bc7e34312f5210 mysql-9.1.0.tar.gz
  1. 解压缩源码包,并进行编译。
1
2
3
4
5
6
[shawnyan@ol9 ~]$ tar zxf mysql-9.1.0.tar.gz
[shawnyan@ol9 ~]$ cd mysql-9.1.0/
[shawnyan@ol9 mysql-9.1.0]$ mkdir build
[shawnyan@ol9 mysql-9.1.0]$ cd build/
[shawnyan@ol9 build]$ cmake .. -DEXTRA_VERSION="-ShawnYan"
[shawnyan@ol9 build]$ make

到此,MySQL 源码已编译完成,下面进行安装并运行 MySQL 服务器。

安装、运行 MySQL

  1. 安装 MySQL 到指定目录。
1
[shawnyan@ol9 build]$ sudo make install DESTDIR="/opt/mysql"
  1. 创建 mysql 用户,并赋权。
1
2
3
4
groupadd mysql
useradd -g mysql mysql
chmod 750 /opt/mysql
chown -R mysql:mysql /opt/mysql
  1. 初始化数据文件,并启动 MySQL 服务器。
1
2
mysqld --initialize --user=mysql
mysqld --user=mysql
  1. 连接到 MySQL 数据库,并查看服务器状态。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
[mysql@ol9 mysql]$ ./bin/mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 9.1.0-ShawnYan Source distribution

Copyright (c) 2000, 2024, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> \s
--------------
./bin/mysql Ver 9.1.0-ShawnYan for Linux on x86_64 (Source distribution)

Connection id: 9
Current database:
Current user: root@localhost
SSL: Not in use
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 9.1.0-ShawnYan Source distribution
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: utf8mb4
Db characterset: utf8mb4
Client characterset: utf8mb4
Conn. characterset: utf8mb4
UNIX socket: /tmp/mysql.sock
Binary data as: Hexadecimal
Uptime: 2 min 56 sec

Threads: 2 Questions: 13 Slow queries: 0 Opens: 147 Flush tables: 3 Open tables: 63 Queries per second avg: 0.073
--------------

mysql>

附:使用源码包构建 RPM 包

除了直接从源码编译之外,MySQL 官网还提供了 RPM 格式的源码包,方便构建整套 MySQL Server 社区版 RPM 包。

  1. 下载 RPM 源码包。
1
https://dev.mysql.com/get/Downloads/MySQL-9.1/mysql-community-9.1.0-1.el9.src.rpm
  1. 补充安装一些依赖。
1
2
3
4
5
6
dnf install -y cyrus-sasl-devel \
gcc-toolset-12-annobin-annocheck gcc-toolset-12-annobin-plugin-gcc gcc-toolset-12-binutils \
gcc-toolset-12-dwz gcc-toolset-12-gcc gcc-toolset-12-gcc-c++ \
gcc-toolset-13-dwz \
krb5-devel numactl-devel openldap-devel \
perl 'perl(English)' 'perl(Env)' 'perl(JSON)' 'perl(Memoize)' 'perl(Sys::Hostname)' 'perl(Time::HiRes)' 'perl(Time::localtime)'
  1. 从 RPM 源码包构建 MySQL Server。
1
rpmbuild --rebuild mysql-community-debugsource-9.1.0-1.el9.x86_64.rpm
  1. 构建完成后,可以使用如下命令查找生成的 RPM 包。
1
find ~/rpmbuild/RPMS -name "*.rpm"

后记

在编译过程中,你还可以根据需要添加一些定制化选项。例如,在 MySQL 9.1.0 中添加了 DISABLE_PERFSCHEMA 构建选项,启用后将所有 DISABLE_PSI_* 选项设置为 ON

Have a nice day ~

– / END / –

  • Title: 在 Oracle Linux 9.4 上编译 MySQL 9.1.0 源码
  • Author: ShawnYan
  • Created at: 2024-11-04 21:00:00
  • Updated at: 2024-11-04 21:00:00
  • Link: https://shawnyan.cn/2024/mysql/compile-mysql-9-1-0-source-code-on-oracle-linux-9-4/
  • License: This work is licensed under CC BY-NC-SA 4.0.
if (hexo-config('comment.enable') == true && hexo-config('comment.system') != "") { if (hexo-config('comment.system') == "waline") { @require "./waline.styl" } else if (hexo-config('comment.system') == "gitalk") { @require "./gitalk.styl" } else if (hexo-config('comment.system') == "twikoo") { @require "./twikoo.styl" } } .comments-container display inline-block margin-top $spacing-unit width 100% #comment-anchor width 100% height 10px .comment-area-title width 100% margin 10px 0 font-size 1.38rem color var(--default-text-color) font-family 'Consolas', '宋体', sans-serif font-weight bold i color var(--default-text-color) +redefine-tablet() margin 5px 0 font-size 1.2rem