麒麟V10系统编译MySQL8.0.37软件

文档背景

部分客户的环境有限制,需要对 MySQL 8.0 社区版本进行源码编译、并自定义一些显示内容。

文档示例所用 Linux 环境和版本如下。

  • CPU架构:X86_64

  • MySQL版本: MySQL 8.0.37

  • OS 版本:Kylin V10 sp3

  • 服务器规格:虚拟机 6c8g

安装依赖环境

安装基础依赖库

  • 更新系统软件包版本
yum update -y

# 有条件建议重启 Linux Server (非必要)
reboot
  • 安装开发工具
yum groupinstall -y "Development Tools"
  • 安装 MySQL 编译所需依赖库
yum install -y cmake make gcc gcc-c++ \
 perl perl-Data-Dumper ncurses ncurses-devel ncurses-base ncurses-libs \
 openssl openssl-devel openssl-libs rpcgen readline readline-devel \
 bzip2 bzip2-devel bison boost-devel numactl-devel gettext-devel \
 libtirpc libtirpc-devel libaio-devel libcurl-devel libevent-devel libzstd-devel \
 numactl-devel numactl-libs numactl numad doxygen
  • 确认特定依赖库的版本

    • MySQL 8.0.37的编译需要某些特定工具满足指定版本
# make 必须 3.75 及以上
make --version

# bison 必须 2.1 及以上
bison --version
  • 创建MySQL安装所需目录
# 提前创建好安装目录和数据存储目录
mkdir -p /usr/local/mysql
mkdir -p /data/mysql

安装gcc10版本

编译 MySQL 8.0.37 官网要求需要 gcc 版本为 10 以上。Kylin V10 默认的 gcc 版本为 7.3,需要安装 gcc 10 版本,步骤如下文。

cd /root/
wget https://ftp.gnu.org/gnu/gcc/gcc-10.5.0/gcc-10.5.0.tar.xz
tar xJf gcc-10.5.0.tar.xz
cd gcc-10.5.0
./contrib/download_prerequisites
mkdir build && cd build
./configure --prefix=$HOME/opt/gcc-10 --enable-languages=c,c++,fortran,go --disable-multilib
make
make install
  • 编译完成需要配置环境才能使用(为了避免影响OS全局GCC使用,我们配置为Session级别的)
vim /root/opt/gcc-10/enable
# 添加如下内容 
export MAIN_PATH=/root/opt/gcc-10
export PATH=${MAIN_PATH}/bin${PATH:+:${PATH}}
export MANPATH=${MAIN_PATH}/share/man:${MANPATH}
export INFOPATH=${MAIN_PATH}/share/info${INFOPATH:+:${INFOPATH}}
export PCP_DIR=${MAIN_PATH}
export LD_LIBRARY_PATH=${MAIN_PATH}/lib64:{LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
export PKG_CONFIG_PATH=${MAIN_PATH}/lib64/pkgconfig${PKG_CONFIG_PATH:+:${PKG_CONFIG_PATH}}

:wq
# 保存退出

chmod +x  /root/opt/gcc-10/enable
  • 将当前终端设置为使用 GCC 10版本
source  /root/opt/gcc-10/enable

# 通过如下命令检查确认
gcc -v

准备MySQL源码包

下载MySQL源码包

  • 官网供下载的列表
https://downloads.mysql.com/archives/community/

[图片上传失败...(image-82e53-1734084099567)]

  • 源码包列表会出现两个选择

    • 第一个(mysql-8.0.37.tar.gz)是不带boost的源码包。

    • 第二个(mysql-boost-8.0.37.tar.gz)是带boost的源码包,这里我们直接选择第二个,省去单独安装boost的繁琐操作。

  • 下载 MySQL 8.0.37 源码包

wget https://downloads.mysql.com/archives/get/p/23/file/mysql-boost-8.0.37.tar.gz

解压MySQL源码包

将下载好的 MySQL 8.0.37 源码包上传到 Linux服务器上的指定路径下。

# 本示例中上传到了 /root/ 目录下
cd /root/
tar xfz mysql-boost-8.0.37.tar.gz
cd mysql-8.0.37/

编译MySQL源码包

CMake 预编译

执行 CMake 步骤,生成构建脚本。

cd /root/mysql-8.0.37/

cmake . \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql-8.0.37 \
-DWITH_SYSTEMD=1 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_INNODB_MEMCACHED=ON \
-DWITH_SSL=system \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DWITH_BOOST=/root/mysql-8.0.37/boost \
-DSYSCONFDIR=/usr/local/mysql-8.0.37 \
-DMYSQL_DATADIR=/data/mysql \
-DFORCE_INSOURCE_BUILD=1 \
-DCMAKE_CXX_COMPILER=/root/opt/gcc-10/bin/g++ \
-DCMAKE_C_COMPILER=/root/opt/gcc-10/bin/gcc \
-DWITH_NUMA=1 
  • 注意:-DWITH_NUMA=1 参数是否需要指定取决于Linux服务器是否开启了 NUMA。

    • 若服务器未开启,需要删除 WITH_NUMA=1 参数(本示例服务器未开启 NUMA ,已去除该参数)
# 如下命令的输出结果为 0 表示服务器的NUMA没有开启。
cat /proc/sys/kernel/numa_balancing

# 或者如下命令的输出结果为 "available: 1 nodes" 表示关闭了 NUMA 。如果存在 > 1 的 nodes,表示已开启 NUMA。
numactl --hardware

CMake 参数解释

image.png

image.png

自定义显示内容

  • 以修改 MySQL 客户端连接时显示内容为例
vim client/mysql.cc

# 修改 1367 -1370 行左右内容
put_info("Welcome to the ActionDB monitor.  Commands end with ; or \\g.",
           INFO_INFO);
  snprintf(glob_buffer.ptr(), glob_buffer.alloced_length(),
           "Your ActionDB connection id is %lu\nServer version: %s\n",

# 修改 1265 行左右内容为
      getenv("MYSQL_PS1") ? getenv("MYSQL_PS1") : "ActionDB> ", MYF(MY_WME));
  • 如有其它需求,可自行查阅文档修改

Make 编译安装

  • 指定多个线程进行编译
make -j $(nproc)
  • 安装MySQL到指定路径
make -j $(nproc) install
  • 完成后检查MySQL程序文件是否生成
ls /usr/local/mysql-8.0.37/bin/

运行MySQL程序

编译完成后,即可基于编译后的MySQL安装包初始化并运行mysqld程序。

/usr/local/mysql-8.0.37/bin/mysqld --defaults-file=/usr/local/mysql-8.0.37/my.cnf.3306 --initialize-insecure

/usr/local/mysql-8.0.37/bin/mysqld --defaults-file=/usr/local/mysql-8.0.37/my.cnf.3306 --user=mysql &

/usr/local/mysql-8.0.37/bin/mysql  -uroot -S /data/mysql/3306/data/mysqld.sock
  • 最终显示结果
image.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容