申威架构编译安装GreatSQL指南

4 阅读3分钟

image.png

本实操指南,完整记录了在申威(SW_64)架构的统信(UOS)V20操作系统上,从源码编译并安装 GreatSQL 8.4.4-4 数据库的全过程。这项工作本身是数据库软件在国产化硬件平台上的重要适配实践,具有实际参考意义。

准备工作

基础环境与权限确认

# 切换为 root 用户,后续步骤需要最高权限
$ sudo su -

# 确认操作系统和架构
cat /etc/os-release
PRETTY_NAME="UOS Server 20"
NAME="UOS Server 20"

$ uname -m 
sw_64

# 确认 GLIBC 版本
$ ldd --version
ldd (GNU libc) 2.34

# 确认 gcc版本
$ gcc --version
gcc (GCC) 10.3.1

检查资源

# 检查内存
$ free -h
               total        used        free      shared  buff/cache   available
Mem:           507Gi        19Gi       482Gi       798Mi       5.6Gi       484Gi
Swap:           31Gi          0B        31Gi

# 检查磁盘空间
$ df -h
文件系统              容量  已用  可用 已用% 挂载点
devtmpfs              4.0M     0  4.0M    0% /dev
tmpfs                 254G     0  254G    0% /dev/shm
tmpfs                 102G  792M  101G    1% /run
tmpfs                 4.0M     0  4.0M    0% /sys/fs/cgroup
/dev/mapper/uos-root   69G   11G   54G   17% /
tmpfs                 254G   72K  254G    1% /tmp
/dev/sda2             974M  117M  790M   13% /boot
/dev/sda1             599M   22M  578M    4% /boot/efi
/dev/mapper/uos-home  778G   28K  738G    1% /home
tmpfs                  51G   16K   51G    1% /run/user/0
/dev/sde              7.3T   28K  6.9T    1% /run/media/root/dfe1ed7b-7ef2-4271-9db7-c8d0bcbf85e5

配置yum软件源与安装所需软件包

更新 yum 源

$ yum clean all
$ yum makecache
$ yum update

安装所需软件包

$ yum install -y automake bison bison-devel.sw_64 boost-devel.sw_64 bzip2 bzip2-devel clang cmake diffutils expat-devel.sw_64 file flex gcc gcc-c++ git jemalloc.sw_64 jemalloc-devel.sw_64 graphviz.sw_64 libaio-devel.sw_64 libarchive libcurl-devel.sw_64 libevent-devel.sw_64 libffi-devel libicu-devel libssh libtirpc libtirpc-devel.sw_64 libtool libxml2-devel zstd.sw_64 lz4.sw_64 make ncurses-devel.sw_64 ncurses-libs.sw_64 net-tools numactl numactl-devel.sw_64 openldap-clients.sw_64 openldap-devel.sw_64 openssl openssl-devel pam pam-devel perl perl-Env perl-JSON perl-Time-HiRes psmisc re2-devel.sw_64 readline-devel.sw_64 snappy-devel.sw_64 tar time unzip wget zlib-devel numactl-libs.sw_64 protobuf.sw_64 protobuf-lite protobuf-devel

部分软件包已做 sw_64 兼容适配并标注对应标识,相关替换操作已全部完成。若仍存在软件包未找到的情况,请自行进行替换或删除处理。

创建文件夹

$ mkdir -p /opt/greatsql_sw_build
$ cd /opt/greatsql_sw_build

下载 GreatSQL、boost、patchelf 源码包

# 分别下载各个源码包
curl -kOL -o greatsql-8.4.4-4.tar.xz https://product.greatdb.com/GreatSQL-8.4.4-4/greatsql-8.4.4-4.tar.xz
curl -kOL -o boost_1_77_0.tar.bz2 https://sourceforge.net/projects/boost/files/boost/1.77.0/boost_1_77_0.tar.bz2
curl -kOL -o patchelf-0.14.5.tar.gz https://gitee.com/GreatSQL/GreatSQL-Docker/raw/master/deppkgs/patchelf-0.14.5.tar.gz

# 统一解压
tar xf greatsql-8.4.4-4.tar.xz
tar xf patchelf-0.14.5.tar.gz
tar xf boost_1_77_0.tar.bz2

编译安装 patchelf

$ cd /opt/greatsql_sw_build/patchelf-0.14.5 && ./bootstrap.sh && ./configure && make && make install

#验证是否编译安装完成
$ patchelf --version
patchelf 0.14.5

编译安装 rpcgen

用 yum search rpcgen 查找,若 rpcgen.sw_64 包存在则直接安装即可

下载源码并解压

# 下载源码
curl -kOL -o rpcsvc-proto-1.4.4.tar.xz https://github.com/thkukuk/rpcsvc-proto/releases/download/v1.4.4/rpcsvc-proto-1.4.4.tar.xz
# 解压
tar xf rpcsvc-proto-1.4.4.tar.xz

进入源码目录

$ cd /opt/greatsql_sw_build/rpcsvc-proto-1.4.4

因为是申威机器config.sub文件未识别sw_64架构,需要修改

$ vim confing.sub

在245行添加sw_64标识

# 在245行
case $basic_machine in
        # Recognize the basic CPU types without company name.
        # Some are omitted here because they have special meanings below.
        1750a | 580 \
        # 添加这行 | sw_64 \
        | sw_64 \
        | a29k \
        | aarch64 | aarch64_be \
        | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
        | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
        | am33_2.0 \

接着可以编译安装了

$ ./configure --build=sw_64
$ make
$ make install

验证安装成功

$ rpcgen --version
rpcgen (rpcsvc-proto) 1.4.4

编译GreatSQL

在开始编译GreatSQL前,需要修改GreatSQL源码以适配申威架构平台:

因为GreatSQL 本身适配sw_64,所以只需要修改一个文件即可

$ vim /opt/greatsql_sw_build/greatsql-8.4.4-4/storage/ndb/include/portlib/mt-asm.h +127

在第 127 行附近,或可通过搜索 defined(aarch64) 定位待修改的位置

补充以下内容,并保存退出

#elif defined(__aarch64__) || defined(__sw_64__)
/**
 * Use generic defaults for mb(), rmb(), wmb() see further down.
 */
// #define NDB_HAVE_XCNG
#define NDB_HAVE_CPU_PAUSE
#define cpu_pause() __asm__ __volatile__("yield")

接下来备份修改后的源码

$ tar zcf greatsql-8.4.4-4.tar.gz greatsql-8.4.4-4

开始编译

export MAJOR_VERSION=8 && \
MINOR_VERSION=4 && \
PATCH_VERSION=4 && \
RELEASE=4 && \
REVISION=d73de75905d && \
OPT_DIR=/opt/greatsql_sw_build && \
GLIBC=`ldd --version | head -n 1 | awk '{print $NF}'` && \
ARCH=`uname -p` && \
GREATSQL=GreatSQL-${MAJOR_VERSION}.${MINOR_VERSION}.${PATCH_VERSION}-${RELEASE}-UOS-glibc${GLIBC}-${ARCH} && \
MAKELOG=/tmp/greatsql-make.log && \
BOOST="boost_1_77_0" && \
DEST_DIR=${OPT_DIR}/${GREATSQL} && \
cd /opt/greatsql_sw_build/greatsql-8.4.4-4/ && \
rm -fr bld && \
mkdir bld && \
cd bld && \
cmake .. \
-DBUILD_CONFIG=mysql_release \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DCOMPILATION_COMMENT="GreatSQL, Release ${RELEASE}, Revision ${REVISION}" \
-DMAJOR_VERSION=${MAJOR_VERSION} -DMINOR_VERSION=${MINOR_VERSION} -DPATCH_VERSION=${PATCH_VERSION} \
-DBOOST_INCLUDE_DIR=${OPT_DIR}/${BOOST} \
-DLOCAL_BOOST_DIR=${OPT_DIR}/${BOOST} \
-DCMAKE_INSTALL_PREFIX=${DEST_DIR} \
-DWITH_ZLIB=bundled \
-DWITH_NUMA=OFF \
-DWITH_TOKUDB=OFF \
-DWITH_ROCKSDB=OFF \
-DROCKSDB_DISABLE_AVX2=1 \
-DROCKSDB_DISABLE_MARCH_NATIVE=1 \
-DGROUP_REPLICATION_WITH_ROCKSDB=OFF \
-DALLOW_NO_SSE42=ON \
-DMYSQL_MAINTAINER_MODE=OFF \
-DFORCE_INSOURCE_BUILD=1 \
-DWITH_NDB=OFF \
-DWITH_NDBCLUSTER_STORAGE_ENGINE=OFF \
-DWITH_NDBCLUSTER=OFF \
-DWITH_UNIT_TESTS=OFF \
-DWITH_SSL=system  \
-DOPENSSL_ROOT_DIR=/usr \
-DWITH_SYSTEMD=ON \
-DWITH_AUTHENTICATION_LDAP=OFF \
-DWITH_PAM=OFF \
-DWITH_LIBEVENT=bundled \
-DWITH_LDAP=system \
-DWITH_SYSTEM_LIBS=ON \
-DWITH_LZ4=bundled \
-DWITH_RAPIDJSON=bundled \
-DWITH_ICU=bundled \
-DWITH_ZSTD=bundled \
-DWITH_FIDO=bundled \
-DWITH_KEYRING_VAULT=ON \
-DWITH_PROTOBUF=system \
>> ${MAKELOG} 2>&1 && \
make -j200 >> ${MAKELOG} 2>&1 && \
make -j200 install >> ${MAKELOG} 2>&1
  1. 编译工作需要消耗大量 CPU 资源,根据机器配置不同,可能需要的时间也不同,请耐心等待。在普通的 16 核 PC 工作机上约耗时10分钟。
  2. 以服务器上有16核 CPU 为例,建议指定 "make -j14" 参数,不要把所有CPU都跑满。

完成后会将 GreatSQL 二进制包生成在 /opt/greatsql_sw_build 目录下:

$ ls
GreatSQL-8.4.4-4-UOS-glibc2.34-sw_64

这就完成 GreatSQL 二进制包的编译工作了。

如果编译过程中发生错误,则会将所有日志记录到/tmp/greatsql-make.log 文件中,可以打开该文件分析具体原因再解决。

安装GreatSQL

安装GreatSQL 参考 GreatSQL 用户手册 [统信UOS系统中安装GreatSQL]


#初次进入要修改密码
greatsql> ALTER USER USER() IDENTIFIED BY 'GreatSQL@2026';
greatsql> SELECT VERSION();
+-----------+
| VERSION() |
+-----------+
| 8.4.4-4   |
+-----------+
1 row in set (0.00 sec)

到此 GreatSQL 在 sw_64 机器上安装完成:)