翼度科技»论坛 编程开发 mysql 查看内容

openEuler、龙蜥Anolis、统信UOS系统下编译GreatSQL二进制包

7

主题

7

帖子

21

积分

新手上路

Rank: 1

积分
21

  • GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。
  • GreatSQL是MySQL的国产分支版本,使用上与MySQL一致。
  • 作者:  Yejinrong/叶金荣
  • 文章来源:GreatSQL社区投稿


  • 背景介绍
  • 编译环境
  • 编译前准备工作
  • 编译GreatSQL
  • 初始化并启动GreatSQL数据库
  • 运行sysbench测试
  • 附录:编译sysbench
1. 背景介绍

为了能更好地支持更多操作系统及相关生态,我们决定发布openEuler、龙蜥Anolis、统信UOS三个操作系统下的GreatSQL二进制包。相应的二进制包可以访问gitee.com上的 GreatSQL项目 https://gitee.com/GreatSQL/GreatSQL/releases/tag/GreatSQL-8.0.25-17下载。
本文简要记录在这三个操作系统下编译GreatSQL二进制包的过程。
2. 编译环境

本次编译都是采用鲲鹏916这个型号的CPU(泰山2280服务器系列):
  1.     $ lscpu
  2.     Architecture:          aarch64
  3.     Byte Order:            Little Endian
  4.     CPU(s):                64
  5.     On-line CPU(s) list:   0-63
  6.     Thread(s) per core:    1
  7.     Core(s) per socket:    32
  8.     Socket(s):             2
  9.     NUMA node(s):          4
  10.     Model:                 2
  11.     BogoMIPS:              100.00
  12.     L1d cache:             32K
  13.     L1i cache:             48K
  14.     L2 cache:              1024K
  15.     L3 cache:              16384K
  16.     NUMA node0 CPU(s):     0-15
  17.     NUMA node1 CPU(s):     16-31
  18.     NUMA node2 CPU(s):     32-47
  19.     NUMA node3 CPU(s):     48-63
  20.     Flags:                 fp asimd evtstrm aes pmull sha1 sha2 crc32 cpuid
复制代码
上述 lscpu 是在物理机上执行的,实际编译环境则是在这个物理机上运行的虚机中,分配了8个CPU、16G内存。
查看操作系统发行版本
openEuler
  1.     $ cat /etc/os-release
  2.     NAME="openEuler"
  3.     VERSION="22.03 LTS"
  4.     ID="openEuler"
  5.     VERSION_ID="22.03"
  6.     PRETTY_NAME="openEuler 22.03 LTS"
  7.     ANSI_COLOR="0;31"
复制代码
龙蜥Anolis
  1.     $ cat /etc/os-release
  2.     NAME="Anolis OS"
  3.     VERSION="8.6"
  4.     ID="anolis"
  5.     ID_LIKE="rhel fedora centos"
  6.     VERSION_ID="8.6"
  7.     PLATFORM_ID="platform:an8"
  8.     PRETTY_NAME="Anolis OS 8.6"
  9.     ANSI_COLOR="0;31"
  10.     HOME_URL="https://openanolis.cn/"
复制代码
统信UOS
  1.     $ cat /etc/os-release
  2.     PRETTY_NAME="UnionTech OS Server 20"
  3.     NAME="UnionTech OS Server 20"
  4.     VERSION_ID="20"
  5.     VERSION="20"
  6.     ID="uos"
  7.     HOME_URL="https://www.chinauos.com/"
  8.     BUG_REPORT_URL="https://bbs.chinauos.com/"
  9.     VERSION_CODENAME="kongzi"
  10.     PLATFORM_ID="platform:uelc20"
  11.     [root@yejr-uos-aarch64 ~]#
  12.     [root@yejr-uos-aarch64 ~]#
  13.     $ cat /etc/uos-release
  14.     UnionTech OS Server release 20 (kongzi)
复制代码
并且都采用OS中预设的默认YUM源
  1.     $ cat openEuler.repo
  2.     #generic-repos is licensed under the Mulan PSL v2.
  3.     #You can use this software according to the terms and conditions of the Mulan PSL v2.
  4.     #You may obtain a copy of Mulan PSL v2 at:
  5.     #    http://license.coscl.org.cn/MulanPSL2
  6.     #THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
  7.     #IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
  8.     #PURPOSE.
  9.     #See the Mulan PSL v2 for more details.
  10.     [OS]
  11.     name=OS
  12.     baseurl=http://repo.openeuler.org/openEuler-22.03-LTS/OS/$basearch/
  13.     enabled=1
  14.     gpgcheck=1
  15.     gpgkey=http://repo.openeuler.org/openEuler-22.03-LTS/OS/$basearch/RPM-GPG-KEY-openEuler
  16.     [everything]
  17.     name=everything
  18.     baseurl=http://repo.openeuler.org/openEuler-22.03-LTS/everything/$basearch/
  19.     enabled=1
  20.     gpgcheck=1
  21.     gpgkey=http://repo.openeuler.org/openEuler-22.03-LTS/everything/$basearch/RPM-GPG-KEY-openEuler
  22.     ...
复制代码
龙蜥Anolis
  1.     $ cat AnolisOS-AppStream.repo
  2.     [AppStream]
  3.     name=AnolisOS-$releasever - AppStream
  4.     baseurl=http://mirrors.openanolis.cn/anolis/$releasever/AppStream/$basearch/os
  5.     enabled=1
  6.     gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ANOLIS
  7.     gpgcheck=1
复制代码
统信UOS
  1.     $ cat UniontechOS.repo
  2.     [UniontechOS-$releasever-AppStream]
  3.     name = UniontechOS $releasever AppStream
  4.     baseurl = https://enterprise-c-packages.chinauos.com/server-enterprise-c/kongzi/1050/AppStream/$basearch
  5.     enabled = 1
  6.     username=$auth_u
  7.     password=$auth_p
  8.     gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-uos-release
  9.     gpgcheck = 0
  10.     skip_if_unavailable = 1
  11.     [UniontechOS-$releasever-BaseOS]
  12.     name = UniontechOS $releasever BaseOS
  13.     baseurl = https://enterprise-c-packages.chinauos.com/server-enterprise-c/kongzi/1050/BaseOS/$basearch
  14.     enabled = 1
  15.     username=$auth_u
  16.     password=$auth_p
  17.     gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-uos-release
  18.     gpgcheck = 0
  19.     skip_if_unavailable = 1
  20.     ...
复制代码
3. 编译前准备工作

参考文档 麒麟OS+龙芯环境编译GreatSQL,提前安装必要的一些基础包
  1.     $ dnf makecache
  2.     $ dnf install --skip-broken -y automake bison bison-devel boost-devel bzip2 bzip2-devel clang \
  3.     cmake cmake3 diffutils expat-devel file flex gcc gcc-c++ git jemalloc jemalloc-devel \
  4.     graphviz libaio-devel libarchive libcurl-devel libevent libevent-devel libverto-libevent libevent-doc libffi-devel libicu-devel libssh \
  5.     libtirpc libtirpc-devel libtool libxml2-devel libzstd libzstd-devel lz4-devel \
  6.     lz4-static make ncurses-devel ncurses-libs net-tools numactl numactl-devel numactl-libs openldap-clients \
  7.     openldap-devel openssl openssl-devel pam pam-devel perl perl-Env perl-JSON perl-Memoize \
  8.     perl-Time-HiRes pkg-config psmisc re2-devel readline-devel \
  9.     snappy-devel tar time unzip vim wget zlib-devel
复制代码
openEuler下就可以根据安装文档麒麟OS+龙芯环境编译GreatSQL中列出的所有包,包括 jemalloc 包。
下载安装jemalloc rpm包(rpm包依赖glibc版本,可能无法直接使用,可以自行下载源码包编译)

  • https://fedora.pkgs.org/36/fedora-aarch64/jemalloc-5.2.1-7.fc36.aarch64.rpm.html
  • https://fedora.pkgs.org/36/fedora-aarch64/jemalloc-devel-5.2.1-7.fc36.aarch64.rpm.html
  • 源码包 https://sourceforge.net/projects/jemalloc.mirror/files/
当然了,jemalloc并库不是必须的,用它的好处是可以优化内存管理性能等。有条件的话尽量启用,实在搞不定就放弃。
如果需要手动编译安装jemalloc,参考下面的方法即可:
  1.     $ tar zxf jemalloc-5.2.1.tar.gz
  2.     $ mv jemalloc-jemalloc-886e40b/
  3.     $ ./autogen.sh
  4.     $ ./configure --prefix=/usr && make && make install
复制代码
分别下载几个编译过程中需要的依赖包:

  • boost, https://boostorg.jfrog.io/artifactory/main/release/1.73.0/source/boost_1_73_0.tar.gz
  • patchelf, https://github.com/NixOS/patchelf/archive/refs/tags/0.14.tar.gz, 下载后重命名为 patchelf-0.14.tar.gz
  • rpcsvc-proto, https://github.com/thkukuk/rpcsvc-proto/releases/download/v1.4/rpcsvc-proto-1.4.tar.gz
下载GreatSQL源码包:https://product.greatdb.com/GreatSQL-8.0.25-17/greatsql-8.0.25-17.tar.gz
将所有的源码包都放在 /opt 目录下。
编译安装patchelf:
  1.     $ cd /opt && tar zxvf patchelf-0.14.tar.gz && cd patchelf-0.14 && ./bootstrap.sh && ./configure && make && make install
复制代码
编译安装rpcsvc-proto:
  1.     $ cd /opt && tar zxvf rpcsvc-proto-1.4.tar.gz && cd rpcsvc-proto-1.4/ && ./configure && make && make install
复制代码
编译安装rpcsvc-proto:
  1.     [root@ky10 ~]# cd /opt && tar zxvf rpcsvc-proto-1.4.tar.gz && cd rpcsvc-proto-1.4/ && ./configure && make && make install
复制代码
确认glibc版本:
  1.     $ ldd --version
  2.     ldd (GNU libc) 2.28
  3.     Copyright (C) 2018 Free Software Foundation, Inc.
  4.     This is free software; see the source for copying conditions.  There is NO
  5.     warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  6.     Written by Roland McGrath and Ulrich Drepper.
复制代码
在本次编译过程中,openEuler 2203的glibc版本是2.34。
4. 编译GreatSQL

接下来编译GreatSQL二进制包
  1.     $ cat /opt/greatsql-build-tarball.sh
  2.     #!/bin/bash
  3.     MAJOR_VERSION=8
  4.     MINOR_VERSION=0
  5.     PATCH_VERSION=25
  6.     RELEASE=17
  7.     REVISION="4733775f703"
  8.     GLIBC=`ldd --version | grep ldd | tail -n 1 | awk '{print $NF}'`
  9.     ARCH=aarch64
  10.     OS=openEuler
  11.     PKG_NAME=GreatSQL-${MAJOR_VERSION}.${MINOR_VERSION}.${PATCH_VERSION}-${RELEASE}-${OS}-glibc${GLIBC}-${ARCH}BASE_DIR=/usr/local/${PKG_NAME}
  12.     SRC_DIR=/opt
  13.     BOOST_SOURCE_DIR=boost_1_73_0
  14.     GREATSQL_SOURCE_DIR=greatsql-8.0.25-17
  15.     JOBS=`nproc`
  16.     # 如果你的OS环境下已安装jemalloc,建议也启用jemalloc编译选项
  17.     # 如果没有安装jemalloc,则将本行参数注释掉
  18.     CMAKE_EXE_LINKER_FLAGS=" -ljemalloc "
  19.     cd ${SRC_DIR}/${GREATSQL_SOURCE_DIR} && \
  20.     rm -fr bld && \
  21.     mkdir bld && \
  22.     cd bld && \
  23.     cmake .. -DBOOST_INCLUDE_DIR=${SRC_DIR}/${BOOST_SOURCE_DIR} \
  24.     -DLOCAL_BOOST_DIR=${SRC_DIR}/${BOOST_SOURCE_DIR} \
  25.     -DCMAKE_INSTALL_PREFIX=${BASE_DIR} -DWITH_ZLIB=bundled \
  26.     -DWITH_NUMA=ON -DCMAKE_EXE_LINKER_FLAGS="${CMAKE_EXE_LINKER_FLAGS}" \
  27.     -DCMAKE_BUILD_TYPE=RelWithDebInfo -DBUILD_CONFIG=mysql_release \
  28.     -DWITH_TOKUDB=OFF -DWITH_ROCKSDB=OFF \
  29.     -DCOMPILATION_COMMENT="GreatSQL (GPL), Release ${RELEASE}, Revision ${REVISION}" \
  30.     -DMAJOR_VERSION=${MAJOR_VERSION} -DMINOR_VERSION=${MINOR_VERSION} -DPATCH_VERSION=${PATCH_VERSION} \
  31.     -DWITH_UNIT_TESTS=OFF -DWITH_NDBCLUSTER=OFF -DWITH_SSL=system -DWITH_SYSTEMD=ON \
  32.     -DWITH_LIBEVENT=system \
  33.     && make -j${JOBS} && make -j${JOBS} install
复制代码
不出意外的话,就可以编译生成二进制文件了。
5. 初始化并启动GreatSQL数据库

GreatSQL初始化,my.cnf可以参考这份模板:https://gitee.com/GreatSQL/GreatSQL-Doc/blob/master/docs/my.cnf-example-greatsql-8.0.25-17
  1.     $ groupadd mysql && useradd -g mysql mysql -s /sbin/nologin -d /dev/null
  2.     $ echo '/usr/local/GreatSQL-8.0.25-17-openEuler-glibc2.34-aarch64/lib/' > /etc/ld.so.conf.d/greatsql.conf
  3.     $ ldconfig -p | grep -i percona
  4.      libperconaserverclient.so.21 (libc6,AArch64) => /usr/local/GreatSQL-8.0.25-17-openEuler-glibc2.34-aarch64/lib/libperconaserverclient.so.21
  5.      libperconaserverclient.so (libc6,AArch64) => /usr/local/GreatSQL-8.0.25-17-openEuler-glibc2.34-aarch64/lib/libperconaserverclient.so
  6.      
  7.      
  8.     # 确保没有找不到的动态库
  9.     $ ldd /usr/local/GreatSQL-8.0.25-17-openEuler-glibc2.34-aarch64/bin/mysqld | grep -i not
  10.     $ ./bin/mysqld --defaults-file=/etc/my.cnf --initialize-insecure
  11.     $ ./bin/mysqld --defaults-file=/etc/my.cnf &
  12.     $ lsof -p `pidof mysqld` | grep -i jemalloc
  13.     mysqld  85204 mysql  mem       REG                8,3     471696   3329101 /usr/lib64/libjemalloc.so.2
复制代码
6. 运行sysbench测试

准备跑一轮sysbench测试
  1.     #先设置PATH
  2.     $ export PATH=$PATH:/usr/local/GreatSQL-8.0.25-17-openEuler-glibc2.34-aarch64/bin
  3.     $ mysqladmin create sbtest
  4.     $ cd /usr/local/share/sysbench/
  5.     $ sysbench /usr/local/share/sysbench/oltp_read_write.lua --mysql-host=localhost --mysql-user=root --mysql-password="" --mysql-socket=/usr/local/GreatSQL-8.0.25-17-openEuler-glibc2.34-aarch64/data/mysql.sock --mysql-db=sbtest --db-driver=mysql --tables=10 --table_size=10000 prepare
  6.     $ for i in $(seq 1 3);do sysbench /usr/local/share/sysbench/oltp_read_write.lua --mysql-host=localhost --mysql-user=root --mysql-password="" --mysql-socket=/usr/local/GreatSQL-8.0.25-17-openEuler-glibc2.34-aarch64/data/mysql.sock --mysql-db=sbtest --db-driver=mysql --tables=10 --table_size=10000 --report-interval=1 --threads=8 --rand-type=uniform --db-ps-mode=disable  --time=900 run > greatsql-802517-$i.log; sleep 300; done
复制代码
附录:编译sysbench
  1.     #先做个动态库软链接
  2.     $ cd /usr/local/GreatSQL-8.0.25-17-openEuler-glibc2.34-aarch64/lib/
  3.     $ ln -s libperconaserverclient.so libmysqlclient.so
  4.     $ cd /tmp/sysbench/
  5.     $ ./autogen.sh
  6.     $ ./configure --with-mysql-includes=/usr/local/GreatSQL-8.0.25-17-openEuler-glibc2.34-aarch64/include/ --with-mysql-libs=/usr/local/GreatSQL-8.0.25-17-openEuler-glibc2.34-aarch64/lib/ && make && make install
复制代码
全文完。

Enjoy GreatSQL
来源:https://www.cnblogs.com/greatsql/p/17317299.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具