
本实操指南,完整记录了在申威(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
- 编译工作需要消耗大量 CPU 资源,根据机器配置不同,可能需要的时间也不同,请耐心等待。在普通的 16 核 PC 工作机上约耗时10分钟。
- 以服务器上有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 机器上安装完成:)