diff --git a/GreatSQL-Build/CHANGELOG.md b/GreatSQL-Build/CHANGELOG.md index 8cbfdd1..85c977d 100644 --- a/GreatSQL-Build/CHANGELOG.md +++ b/GreatSQL-Build/CHANGELOG.md @@ -1,20 +1,8 @@ -# 8.0.32-25 更新日志 +# 8.4.4-4 更新日志 -## 2024.6.2 -* 修复lscpu指令在部分OS下执行结果正则表达 +## 2025.10.16 +* 更新到GreatSQL 8.4.4-4 +* 修改boost下载源 +* 安装依赖增加libatomic,libicu,perl,protobuf-lite等 -## 2024.2.22 -* 继续简化Dockerfile,使其构建更快。 -* 把大部分实际工作放在自定义脚本里运行。 -* 构建Docker镜像时只做基础工作。 -* rpcgen安装改在 docker-entrypoint.sh 中,并判断x86/arm,不再在Dockerfile中处理 - -## 2024.2.20 -* 版本更新到GreatSQL 8.0.32-25。 -* 支持x86_64/aarch64。 -* 支持从服务器上下载boost和rpcgen包。 -* 支持从服务器上下载GreatSQL包。 -* 支持全自动化编译GreatSQL源码。 -* 编译完成后,清理不必要的文件目录。 - -[8.0.32-25]: https://gitee.com/GreatSQL/GreatSQL-Docker/tree/greatsql-8.0.32-25/GreatSQL-Build +[8.4.4-4]: https://gitee.com/GreatSQL/GreatSQL-Docker/tree/greatsql-8.4.4-4/GreatSQL-Build diff --git a/GreatSQL-Build/Dockerfile b/GreatSQL-Build/Dockerfile index e972000..580b4cf 100644 --- a/GreatSQL-Build/Dockerfile +++ b/GreatSQL-Build/Dockerfile @@ -1,48 +1,28 @@ -FROM centos:8 -ENV LANG en_US.utf8 +FROM oraclelinux:8-slim +#FROM registry.cn-beijing.aliyuncs.com/greatsql/oraclelinux:8-slim +#FROM ccr.ccs.tencentyun.com/greatsql/oraclelinux:8-slim LABEL maintainer="greatsql.cn" \ email="greatsql@greatdb.com" \ forum="https://greatsql.cn/forum.php" \ gitee="https://gitee.com/GreatSQL/GreatSQL-Docker" -ARG OPT_DIR=/opt \ +ARG TARGETARCH +ENV OPT_DIR=/opt \ MYSQL_UID=3306 \ MYSQL_USER=mysql \ -GREATSQL_BUILD_DOWNLOAD_URL="https://gitee.com/GreatSQL/GreatSQL-Docker/raw/greatsql-8.0.32-25/GreatSQL-Build" \ +GREATSQL_BUILD_DOWNLOAD_URL="https://gitee.com/GreatSQL/GreatSQL-Docker/raw/greatsql-8.4.4-4/GreatSQL-Build" \ GREATSQL_ENV="greatsql-setenv.sh" \ -ENTRYPOINT="docker-entrypoint.sh" \ -DEPS="autoconf automake binutils bison cmake cyrus-sasl-devel cyrus-sasl-scram gcc-c++ \ -gcc-toolset-11 gcc-toolset-11-annobin-plugin-gcc jemalloc jemalloc-devel krb5-devel libaio-devel \ -libcurl-devel libtirpc-devel libudev-devel m4 make ncurses-devel numactl-devel openldap-devel \ -openssl openssl-devel pam-devel readline-devel wget zlib-devel" +GREATSQL_BUILD_INIT="greatsql_build_init.sh" -RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == \ -systemd-tmpfiles-setup.service ] || rm -f $i; done); \ -rm -f /lib/systemd/system/multi-user.target.wants/*;\ -rm -f /etc/systemd/system/*.wants/*;\ -rm -f /lib/systemd/system/local-fs.target.wants/*; \ -rm -f /lib/systemd/system/sockets.target.wants/*udev*; \ -rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \ -rm -f /lib/systemd/system/basic.target.wants/*;\ -rm -f /lib/systemd/system/anaconda.target.wants/*; \ -rm -f /etc/yum.repos.d/CentOS-Linux-* ; \ -curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo > /dev/null 2>&1 && \ -sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo > /dev/null 2>&1 && \ -rm -f /etc/yum.repos.d/CentOS-Linux-* ; \ -dnf clean all > /dev/null 2>&1 && \ -dnf makecache > /dev/null 2>&1 && \ -dnf update -y > /dev/null 2>&1 && \ -rm -f /etc/yum.repos.d/CentOS-Linux-* ; \ -dnf install -y epel-release > /dev/null 2>&1 && \ -dnf install -y ${DEPS} > /dev/null 2>&1 && \ -source /opt/rh/gcc-toolset-11/enable > /dev/null 2>&1 && \ -echo 'source /opt/rh/gcc-toolset-11/enable' >> /root/.bash_profile; \ +RUN curl -OL -o /${GREATSQL_ENV} ${GREATSQL_BUILD_DOWNLOAD_URL}/${GREATSQL_ENV} && \ +curl -OL -o /${GREATSQL_BUILD_INIT} ${GREATSQL_BUILD_DOWNLOAD_URL}/${GREATSQL_BUILD_INIT} && \ +mv /${GREATSQL_ENV} ${OPT_DIR} && \ +chmod +x /*sh ${OPT_DIR}/*sh && \ /usr/sbin/groupadd -g ${MYSQL_UID} ${MYSQL_USER} && \ /usr/sbin/useradd -u ${MYSQL_UID} -g ${MYSQL_UID} -s /sbin/nologin ${MYSQL_USER} && \ -curl -o ${OPT_DIR}/${GREATSQL_ENV} ${GREATSQL_BUILD_DOWNLOAD_URL}/${GREATSQL_ENV} > /dev/null 2>&1 && \ -curl -o /${ENTRYPOINT} ${GREATSQL_BUILD_DOWNLOAD_URL}/${ENTRYPOINT} > /dev/null 2>&1 && \ -chmod +x /*sh ${OPT_DIR}/*sh +echo '[main]' > /etc/dnf/dnf.conf && \ +microdnf install -y util-linux oracle-epel-release-el8 && \ +microdnf clean all -ENTRYPOINT ["/docker-entrypoint.sh"] -CMD ["bash"] +ENTRYPOINT ["sh"] diff --git a/GreatSQL-Build/README.md b/GreatSQL-Build/README.md index de3fa1d..b33ebbc 100644 --- a/GreatSQL-Build/README.md +++ b/GreatSQL-Build/README.md @@ -1,61 +1,141 @@ # GreatSQL-Build Docker --- +## 简介 + 全自动编译GreatSQL源码,生成二进制包。 -适用于CentOS 8 x86_64/aarch64 环境,更多环境适配请自行修改Dockerfile及相关脚本中的参数。 +适用于 OracleLinux/CentOS x86_64/aarch64 环境,更多环境适配请自行修改Dockerfile及相关脚本中的参数。 + +**提示**:本项目将不再更新,如果有需要编译 GreatSQL 源码,请参考文档 [编译源码安装](https://greatsql.cn/docs/4-install-guide/6-install-with-source-code.html)。 + +## 基本信息 +- 维护者: GreatSQL(greatsql@greatdb.com) +- 联系我们:greatsql@greatdb.com +- 最新版本:GreatSQL 8.4.4-4 +- 最后更新时间:2025-10-16 + +## 支持哪些tag + +- [latest](https://hub.docker.com/repository/docker/greatsql/greatsql_build/tags/latest/sha256:8b2a40a07efaafca05ed966f38745f612393ad6febeb81e8f4df4e3f6346589e) +- [8.4.4-4](https://hub.docker.com/repository/docker/greatsql/greatsql_build/tags/8.4.4-4/sha256:8b2a40a07efaafca05ed966f38745f612393ad6febeb81e8f4df4e3f6346589e) +- [8.0.32-27](https://hub.docker.com/repository/docker/greatsql/greatsql_build/tags/8.0.32-27/sha256:16c3b1f7336578e9ad96593d8e3b02de032ede456a5f4681f11cff538673bdd8) +- [8.0.32-26](https://hub.docker.com/repository/docker/greatsql/greatsql_build/tags/8.0.32-26/sha256:2402086558d5913b2f8774c2fe39690237bb90175a22efb022471f0f62c9ac9c) + +拉取GreatSQL-Build镜像 + +```shell +docker pull greatsql/greatsql_build +``` + +还可以指定具体版本号 + +```shell +docker pull greatsql/greatsql_build:8.4.4-4 +``` + +如果无法从hub.docker.com拉取,可以尝试从阿里云ACR或腾讯云TCR拉取,例如: + +```shell +# 阿里云ACR +docker pull registry.cn-beijing.aliyuncs.com/greatsql/greatsql_build + +# 腾讯云TCR +docker pull ccr.ccs.tencentyun.com/greatsql/greatsql_build +``` + +> 如果提示 timeout 连接超时错误,多重试几次应该就好了。 + +## GreatSQL Build Docker镜像构建 -## 1. GreatSQL Build Docker镜像构建 +在开始前,需要先准备好一个Docker builx环境,这是为了支持多平台构建。 + +如果不需要支持多平台,则可以自行修改Dockerfile中的第10-11行,将原来的内容 + +```ini + 10 ARG TARGETARCH \ + 11 OPT_DIR=/opt \ +``` + +修改成下面这样 + +```ini + 10 ARG OPT_DIR=/opt \ +``` + +也就是去掉`TARGETARCH`参数即可。 + +关于Docker buildx环境的配置,可以参考这篇文章:[使用 buildx 构建跨平台镜像](https://zhuanlan.zhihu.com/p/622399482) 或 [Multi-platform builds](https://docs.docker.com/build/building/multi-platform/),这里不赘述。 + +```shell +docker buildx build --platform linux/arm64,linux/amd64 -t greatsql/greatsql_build . --push +``` + +上述命令会查找当前目录下的 `Dockerfile` 文件,并构建名为 `greatsql/greatsql_build` 的Docker镜像,并最终会push到`greatsql/greatsql_build`镜像仓库。这里需要修改成您自己的仓库名,例如改成我自己个人的: ```shell -$ docker build -t greatsql/greatsql_build . +docker buildx build --platform linux/arm64,linux/amd64 -t yejr/greatsql_build . --push ``` -上述命令会查找当前目录下的 `Dockerfile` 文件,并构建名为 `greatsql/greatsql_build` 的Docker镜像。 在构建镜像时,会自动从服务器上下载相应的源码包文件、初始化脚本等文件,并全自动化方式完成镜像构建工作。 -## 2. GreatSQL Build Docker镜像使用 +如果无法从hub.docker.com拉取OracleLinux镜像,则修改`Dockerfile`文件的前几行,将镜像资源修改为阿里云或腾讯云: + +```ini + 1 #FROM oraclelinux:8-slim as builder + 2 FROM registry.cn-beijing.aliyuncs.com/greatsql/oraclelinux:8-slim as builder + 3 #FROM ccr.ccs.tencentyun.com/greatsql/oraclelinux:8-slim as builder +``` + +## GreatSQL Build Docker镜像使用 ```shell # 创建新容器 -$ docker run -itd --hostname greatsql_build --name greatsql_build greatsql/greatsql_build bash +docker run -itd --hostname greatsql_build --name greatsql_build greatsql/greatsql_build -# 查看自动编译进展 -$ docker logs greatsql_build +# 进入容器,手动启动编译工作 +docker exec -it greatsql_build sh +sh-4.4# pwd +/ +sh-4.4# +sh-4.4# ls +bin boot dev etc greatsql_build_init.sh home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var -0. touch logfile /tmp/greatsql-automake.log +sh-4.4# sh ./greatsql_build_init.sh + +0. GreatSQL-Build INIT 1. downloading sourcecode tarballs and extract 1.1 downloading sourcecode tarballs ... - 1.2 extract tarballs ... - -2. compile patchelf - +... 3. compile GreatSQL 3.1 compiling GreatSQL 3.2 remove mysql-test from GreatSQL 3.3 make dynamic link for GreatSQL 4. greatsql build completed! -drwxrwxr-x 13 mysql mysql 293 Feb 22 01:33 GreatSQL-8.0.32-25-centos-glibc2.28-x86_64 -/opt/GreatSQL-8.0.32-25-centos-glibc2.28-x86_64/bin/mysqld Ver 8.0.32-25 for Linux on x86_64 (GreatSQL, Release 25, Revision 79f57097e3f) +drwxrwxr-x 13 mysql mysql 293 Oct 11 11:54 GreatSQL-8.4.4-4-ol-glibc2.28-x86_64 +/opt/GreatSQL-8.4.4-4-ol-glibc2.28-x86_64/bin/mysqld Ver 8.4.4-4 for Linux on x86_64 (GreatSQL, Release 4, Revision d73de75905d) -5. remove files and clean up +5. remove files and clean up ``` -可以看到已经完成编译,如果需要的话,可以将Docker容器中的二进制包文件拷贝到宿主机上,例如: +可以看到已经完成编译,可以将容器中编译好的二进制包文件拷贝到宿主机上,例如: + ```shell -$ docker cp greatsql_build:/opt/GreatSQL-8.0.32-25-centos-glibc2.28-x86_64 /usr/local/ +docker cp greatsql_build:/opt/GreatSQL-8.4.4-4-ol-glibc2.28-x86_64 /usr/local/ ``` -如果宿主机环境也是CentOS 8 x86_64的话,这就可以在宿主机环境下直接使用该二进制文件包了。 +如果宿主机环境也是 OracleLinux/CentOS x86_64 的话,这就可以在宿主机环境下直接使用该二进制文件包了。 + +> 编译过程中,可能会遇到网络问题(DNS解析失败、网络连接超时等)导致失败的话,多重试几次即可。 ## 文件介绍 - CHANGELOG.md,更新历史 -- docker-entrypoint.sh,镜像初始化脚本,该脚本中再调用greatsql-automake.sh实现自动编译。 -- Dockerfile,用于构建GreatSQL编译环境 -- greatsql-automake.sh,GreatSQL自动编译脚本 +- Dockerfile,用于构建初始化 GreatSQL 编译环境。 +- greatsql-automake.sh,GreatSQL自动编译脚本,编译过程中产生的日志默认输出到 /tmp/greatsql-automake.log 中。 - greatsql-setenv.sh,通用环境变量设置脚本 +- greatsql_build_init.sh,GreatSQL 编译调度入口脚本,该脚本中完成编译环境所需的软件包安装,并调用 greatsql-automake.sh 实现自动编译。 ## 联系我们 扫码关注微信公众号 diff --git a/GreatSQL-Build/docker-entrypoint.sh b/GreatSQL-Build/docker-entrypoint.sh deleted file mode 100755 index b5fb734..0000000 --- a/GreatSQL-Build/docker-entrypoint.sh +++ /dev/null @@ -1,41 +0,0 @@ -#!/bin/bash - -. /opt/greatsql-setenv.sh - -echo "0. touch logfile ${MAKELOG}" -touch ${MAKELOG} && \ -chown ${MYSQL_USER}:${MYSQL_USER} ${MAKELOG} && \ -chmod 0777 ${MAKELOG} && \ -echo && \ -echo "1. downloading sourcecode tarballs and extract" -cd ${OPT_DIR} && \ -echo " 1.1 downloading sourcecode tarballs ..." && \ -wget -c -O ${GREATSQL_ENV} ${GREATSQL_MAKESH_DOWNLOAD_URL}/${GREATSQL_ENV} >> ${MAKELOG} 2>&1 && \ -wget -c -O ${GREATSQL_MAKESH} ${GREATSQL_MAKESH_DOWNLOAD_URL}/${GREATSQL_MAKESH} >> ${MAKELOG} 2>&1 && \ -wget -c -O ${RPCGEN} ${GREATSQL_BUILD_DOWNLOAD_URL}/${RPCGEN} >> ${MAKELOG} 2>&1 && \ -wget -c -O ${PATCHELF}.tar.gz ${GREATSQL_BUILD_DOWNLOAD_URL}/${PATCHELF}.tar.gz >> ${MAKELOG} 2>&1 && \ -wget -c -O ${BOOST}.tar.gz ${BOOST_SRC_DOWNLOAD_URL}/${BOOST}.tar.gz >> ${MAKELOG} 2>&1 && \ -wget -c -O ${GREATSQL_SRC}.tar.xz ${GREATSQL_SRC_DOWNLOAD_URL}/${GREATSQL_SRC}.tar.xz >> ${MAKELOG} 2>&1 && \ -echo " 1.2 extract tarballs ..." && \ -tar xf ${OPT_DIR}/${PATCHELF}*z && \ -tar xf ${OPT_DIR}/${BOOST}*z && \ -tar xf ${OPT_DIR}/${GREATSQL_SRC}*z && \ -chown -R ${MYSQL_USER}:${MYSQL_USER} ${OPT_DIR} && \ -dnf install -y ${RPCGEN} >> ${MAKELOG} 2>&1 && \ -chmod +x ${OPT_DIR}/*sh && \ -echo && \ -echo "2. compile patchelf"; \ -cd ${OPT_DIR}/${PATCHELF} && ./bootstrap.sh >> ${MAKELOG} > /dev/null 2>&1 && \ -./configure >> ${MAKELOG} > /dev/null 2>&1 && \ -make >> ${MAKELOG} > /dev/null 2>&1 && \ -make install >> ${MAKELOG} > /dev/null 2>&1 && \ -echo && \ -echo "3. compile GreatSQL"; \ -su - ${MYSQL_USER} -s /bin/bash -c "cd /opt; /bin/sh /opt/greatsql-automake.sh" && \ -echo && \ -echo "4. greatsql build completed!" ; \ -ls -la ${OPT_DIR} | grep GreatSQL.*glibc.* && ${OPT_DIR}/GreatSQL*glibc*/bin/mysqld --verbose --version && \ -echo && \ -echo "5. remove files and clean up" ;\ -cd ${OPT_DIR} && rm -rf ${BOOST} ${GREATSQL_SRC} ${PATCHELF} -/bin/bash diff --git a/GreatSQL-Build/greatsql-automake.sh b/GreatSQL-Build/greatsql-automake.sh index 3aa65d9..6f604ff 100755 --- a/GreatSQL-Build/greatsql-automake.sh +++ b/GreatSQL-Build/greatsql-automake.sh @@ -4,11 +4,6 @@ echo " 3.1 compiling GreatSQL" -if [ ${ARCH} = "loongarch64" ] ; then - cd ${OPT_DIR}/${GREATSQL_SRC} - sed -i 's/\(.*defined.*mips.*\) \\/\1 defined(__loongarch__) || \\/ig' extra/icu/source/i18n/double-conversion-utils.h -fi - LIBLIST="libcrypto.so libssl.so libreadline.so libtinfo.so libsasl2.so libbrotlidec.so libbrotlicommon.so libgssapi_krb5.so libkrb5.so libkrb5support.so libk5crypto.so librtmp.so libgssapi.so libssl3.so libsmime3.so libnss3.so libnssutil3.so libplc4.so libnspr4.so libssl3.so libplds4.so libncurses.so libjemalloc.so" DIRLIST="bin lib lib/private lib/plugin lib/mysqlrouter/plugin lib/mysqlrouter/private" @@ -179,7 +174,7 @@ make -j${MAKE_JOBS} >> ${MAKELOG} 2>&1 && \ make -j${MAKE_JOBS} install >> ${MAKELOG} 2>&1 echo " 3.2 remove mysql-test from GreatSQL" -rm -fr ${DEST_DIR}/mysql-test 2 > /dev/null +rm -fr ${DEST_DIR}/mysql-test echo " 3.3 make dynamic link for GreatSQL" # strip binaries to get minimal package diff --git a/GreatSQL-Build/greatsql-setenv.sh b/GreatSQL-Build/greatsql-setenv.sh index b4b5c1b..113d2bf 100755 --- a/GreatSQL-Build/greatsql-setenv.sh +++ b/GreatSQL-Build/greatsql-setenv.sh @@ -1,6 +1,8 @@ -#/bin/bash +#/bin/sh -. ~/.bash_profile +if [ -f ~/.bash_profile ] ; then + . ~/.bash_profile +fi MAKE_JOBS=`lscpu | grep '^CPU(s):'|awk '{print $NF}'` if [ ${MAKE_JOBS} -ge 16 ] ; then @@ -10,10 +12,10 @@ else fi MAJOR_VERSION=8 -MINOR_VERSION=0 -PATCH_VERSION=32 -RELEASE=25 -REVISION=79f57097e3f +MINOR_VERSION=4 +PATCH_VERSION=4 +RELEASE=4 +REVISION=d73de75905d OPT_DIR=/opt GLIBC=`ldd --version | head -n 1 | awk '{print $NF}'` ARCH=`uname -p` @@ -23,10 +25,11 @@ MAKELOG=/tmp/greatsql-automake.log MYSQL_USER=mysql DEST_DIR=${OPT_DIR}/${GREATSQL} GREATSQL_SRC=greatsql-${MAJOR_VERSION}.${MINOR_VERSION}.${PATCH_VERSION}-${RELEASE} -GREATSQL_BUILD_DOWNLOAD_URL="https://gitee.com/GreatSQL/GreatSQL-Docker/raw/greatsql-8.0.32-25/deppkgs" -GREATSQL_MAKESH_DOWNLOAD_URL="https://gitee.com/GreatSQL/GreatSQL-Docker/raw/greatsql-8.0.32-25/GreatSQL-Build" -GREATSQL_SRC_DOWNLOAD_URL="https://product.greatdb.com/GreatSQL-8.0.32-25" -BOOST_SRC_DOWNLOAD_URL="https://boostorg.jfrog.io/artifactory/main/release/1.77.0/source" +GREATSQL_BUILD_DOWNLOAD_URL="https://gitee.com/GreatSQL/GreatSQL-Docker/raw/greatsql-${MAJOR_VERSION}.${MINOR_VERSION}.${PATCH_VERSION}-${RELEASE}/deppkgs" +GREATSQL_MAKESH_DOWNLOAD_URL="https://gitee.com/GreatSQL/GreatSQL-Docker/raw/greatsql-${MAJOR_VERSION}.${MINOR_VERSION}.${PATCH_VERSION}-${RELEASE}/GreatSQL-Build" +GREATSQL_SRC_DOWNLOAD_URL="https://product.greatdb.com/GreatSQL-${MAJOR_VERSION}.${MINOR_VERSION}.${PATCH_VERSION}-${RELEASE}" +#BOOST_SRC_DOWNLOAD_URL="https://archives.boost.io/release/1.77.0/source/" +BOOST_SRC_DOWNLOAD_URL="https://sourceforge.net/projects/boost/files/boost/1.77.0/" BOOST="boost_1_77_0" PATCHELF="patchelf-0.14.5" GREATSQL_ENV="greatsql-setenv.sh" @@ -41,3 +44,9 @@ CMAKE_EXE_LINKER_FLAGS="" if [ ${ARCH} = "x86_64" ] ; then CMAKE_EXE_LINKER_FLAGS=" -ljemalloc " fi + +DEPS="autoconf automake binutils bison bzip2 cmake cyrus-sasl-devel cyrus-sasl-scram \ +gcc-c++ gcc-toolset-11 gcc-toolset-11-annobin-plugin-gcc gcc-toolset-11-libatomic-devel \ +jemalloc jemalloc-devel krb5-devel libaio-devel libatomic libcurl-devel libicu libicu-devel libtirpc-devel \ +libudev-devel m4 make ncurses-devel numactl-devel openldap-devel openssl openssl-devel \ +pam-devel patchelf perl protobuf-lite readline-devel zlib-devel findutils procps-ng xz" diff --git a/GreatSQL-Build/greatsql_build_init.sh b/GreatSQL-Build/greatsql_build_init.sh new file mode 100755 index 0000000..254d079 --- /dev/null +++ b/GreatSQL-Build/greatsql_build_init.sh @@ -0,0 +1,51 @@ +#!/bin/sh + +. /opt/greatsql-setenv.sh + +echo "0. GreatSQL-Build INIT" && \ +microdnf install -y oracle-epel-release-el8 && \ +microdnf makecache && \ +microdnf install -y ${DEPS} && \ +microdnf update -y && \ +microdnf clean all && \ +source /opt/rh/gcc-toolset-11/enable && \ +echo 'source /opt/rh/gcc-toolset-11/enable' >> /root/.bash_profile; \ +chmod +x /*sh ${OPT_DIR}/*sh && \ +touch ${MAKELOG} && \ +chown ${MYSQL_USER}:${MYSQL_USER} ${MAKELOG} && \ +chmod 0777 ${MAKELOG} && \ +echo && \ +echo "1. downloading sourcecode tarballs and extract" +cd ${OPT_DIR} && \ +echo " 1.1 downloading sourcecode tarballs ..." && \ +curl -OL -o ${GREATSQL_ENV} ${GREATSQL_MAKESH_DOWNLOAD_URL}/${GREATSQL_ENV} && \ +curl -OL -o ${GREATSQL_MAKESH} ${GREATSQL_MAKESH_DOWNLOAD_URL}/${GREATSQL_MAKESH} && \ +curl -OL -o ${RPCGEN} ${GREATSQL_BUILD_DOWNLOAD_URL}/${RPCGEN} && \ +curl -OL -o ${PATCHELF}.tar.gz ${GREATSQL_BUILD_DOWNLOAD_URL}/${PATCHELF}.tar.gz && \ +curl -OL -o ${BOOST}.tar.bz2 ${BOOST_SRC_DOWNLOAD_URL}/${BOOST}.tar.bz2 && \ +curl -OL -o ${GREATSQL_SRC}.tar.xz ${GREATSQL_SRC_DOWNLOAD_URL}/${GREATSQL_SRC}.tar.xz && \ +echo " 1.2 extract tarballs ..." && \ +tar xf ${OPT_DIR}/${PATCHELF}*z && \ +tar xf ${OPT_DIR}/${BOOST}*z* && \ +tar xf ${OPT_DIR}/${GREATSQL_SRC}*z && \ +echo " 1.3 chown to ${MYSQL_USER}:${MYSQL_USER} for ${OPT_DIR} ..." && \ +chown -R ${MYSQL_USER}:${MYSQL_USER} ${OPT_DIR} && \ +echo " 1.4 install ${RPCGEN} ..." && \ +rpm -ivh --nodeps ${RPCGEN} && \ +chmod +x ${OPT_DIR}/*sh && \ +echo && \ +echo "2. compile patchelf"; \ +cd ${OPT_DIR}/${PATCHELF} && ./bootstrap.sh >> ${MAKELOG} && \ +./configure >> ${MAKELOG} > /dev/null 2>&1 && \ +make -j${MAKE_JOBS} >> ${MAKELOG} > /dev/null 2>&1 && \ +make -j${MAKE_JOBS} install >> ${MAKELOG} > /dev/null 2>&1 && \ +echo && \ +echo "3. compile GreatSQL"; \ +su - ${MYSQL_USER} -s /bin/sh -c "cd /opt; /bin/sh /opt/greatsql-automake.sh" && \ +echo && \ +echo "4. greatsql build completed!" ; \ +ls -la ${OPT_DIR} | grep ${GREATSQL} && ${OPT_DIR}/${GREATSQL}/bin/mysqld --verbose --version && \ +cd ${OPT_DIR} && tar cf ${GREATSQL}.tar ${GREATSQL} && xz -9 -f -T ${MAKE_JOBS} ${GREATSQL}.tar && \ +echo && \ +echo "5. remove files and clean up" ;\ +cd ${OPT_DIR} && rm -rf ${BOOST} ${GREATSQL_SRC} ${PATCHELF} diff --git a/GreatSQL-Shell-Build/CHANGELOG.md b/GreatSQL-Shell-Build/CHANGELOG.md index 5e67914..174798f 100644 --- a/GreatSQL-Shell-Build/CHANGELOG.md +++ b/GreatSQL-Shell-Build/CHANGELOG.md @@ -1,21 +1,8 @@ -# 8.0.32-25 更新日志 +# 8.4.4-4 更新日志 -## 2024.4.2 -* 将更多依赖动态库文件CP到发行包中,方便在其他平台直接运行。 -* 发行包中去掉OS标识。 +## 2025.10.21 +* 更新到8.4.4-4版本 +* 支持仲裁节点 +* 修改gcc依赖 -## 2024.3.12 -* 增加V8(JS语法)支持。 -* 优化Dockerfile,只进行基础镜像构建,依赖包安装、yum update等工作放在外部脚本中完成。 - -## 2024.2.20 -* 优化GreatSQL-Shell-Build,改用从服务器上下载,无需准备本地二进制文件包。 - -## 2024.1.22 - -* 版本更新到GreatSQL 8.0.32-25。 -* 支持从hub.docker.com中拉取镜像并自动完成编译工作。 -* 也支持调用本地脚本完成自动创建GreatSQL Shell编译环境Docker镜像,并自动创建GreatSQL Shell自动编译Docker容器,一条命令即可完成全部编译工作。 -* 编译后的二进制包用xz压缩,压缩比更高,在xz压缩时采用并行方式,降低压缩耗时。 - -[8.0.32-25]: https://gitee.com/GreatSQL/GreatSQL-Docker/tree/greatsql-8.0.32-25/GreatSQL-Shell-Build +[8.4.4-4]: https://gitee.com/GreatSQL/GreatSQL-Docker/tree/greatsql-8.4.4-4/GreatSQL-Shell-Build diff --git a/GreatSQL-Shell-Build/Dockerfile b/GreatSQL-Shell-Build/Dockerfile index 89346e9..a49f926 100644 --- a/GreatSQL-Shell-Build/Dockerfile +++ b/GreatSQL-Shell-Build/Dockerfile @@ -1,3 +1,8 @@ +# Dockerfile for GreatSQL Shell 8.4.4-4 +# +# docker version 26.1.3 (not podman) +# docker buildx build --platform linux/arm64,linux/amd64 -t greatsql/greatsql_shell_build:8.4.4-4 . --push +# FROM centos:8 LABEL maintainer="greatsql.cn" \ @@ -5,11 +10,11 @@ email="greatsql@greatdb.com" \ forum="https://greatsql.cn/forum.php" \ gitee="https://gitee.com/GreatSQL/GreatSQL-Shell-Docker" -ENV LANG en_US.utf8 -ARG OPT_DIR=/opt \ +ARG TARGETARCH +ENV OPT_DIR=/opt \ MYSQL_UID=3306 \ MYSQL_USER=mysql \ -GREATSQLSH_BUILD_DOWNLOAD_URL="https://gitee.com/GreatSQL/GreatSQL-Docker/raw/greatsql-8.0.32-25/GreatSQL-Shell-Build" \ +GREATSQLSH_BUILD_DOWNLOAD_URL="https://gitee.com/GreatSQL/GreatSQL-Docker/raw/greatsql-8.4.4-4/GreatSQL-Shell-Build" \ GREATSQLSH_ENV="greatsqlsh-setenv.sh" \ ENTRYPOINT="docker-entrypoint.sh" @@ -22,7 +27,7 @@ rm -f /lib/systemd/system/sockets.target.wants/*udev*; \ rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \ rm -f /lib/systemd/system/basic.target.wants/*;\ rm -f /lib/systemd/system/anaconda.target.wants/*; \ -rm -f /etc/yum.repos.d/CentOS-Linux-* ; \ +rm -f /etc/yum.repos.d/* ; \ curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo > /dev/null 2>&1 && \ sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo > /dev/null 2>&1 && \ dnf -y update > /dev/null 2>&1 ; \ diff --git a/GreatSQL-Shell-Build/README.md b/GreatSQL-Shell-Build/README.md index a84e836..4d12a7f 100644 --- a/GreatSQL-Shell-Build/README.md +++ b/GreatSQL-Shell-Build/README.md @@ -6,22 +6,25 @@ 适用于CentOS 8 x86_64/aarch64 环境,更多环境适配请自行修改Dockerfile及相关脚本中的参数。 +**提示**:本项目将不再更新,如果有需要编译 GreatSQL Shell 源码,请参考本项目中的几个编译脚本。 + ## 基本信息 - 维护者: GreatSQL(greatsql@greatdb.com) - 联系我们: greatsql@greatdb.com -- 最新版本:GreatSQL 8.0.32-25 -- 最后更新时间:2024-03-12 +- 最新版本:GreatSQL 8.4.4-4 - 支持CPU架构:x86_64、aarch64 ## 支持哪些tag -- [latest](https://hub.docker.com/layers/greatsql/greatsql_shell_build/latest/images/sha256-8728758467097c48da15c177bb8692b4e008c3626638a2385b2a6fe4eef44687?context=explore), [8.0.32-25](https://hub.docker.com/layers/greatsql/greatsql_shell_build/8.0.32-25/images/sha256-8728758467097c48da15c177bb8692b4e008c3626638a2385b2a6fe4eef44687?context=explore) -- [latest-arch64](https://hub.docker.com/layers/greatsql/greatsql_shell_build/latest-aarch64/images/sha256-810f6a57cc065aae88c29ffd02fdccdaf383c806414ac3848e43dbedfa5f727c?context=explore), [8.0.32-25-aarch64](https://hub.docker.com/layers/greatsql/greatsql_shell_build/8.0.32-25-aarch64/images/sha256-810f6a57cc065aae88c29ffd02fdccdaf383c806414ac3848e43dbedfa5f727c?context=explore) +- [latest](https://hub.docker.com/repository/docker/greatsql/greatsql_shell_build/tags/latest/sha256:cfa03ed884e3cf9007ed80dc078834f73c892d2c2ed6fb939099b773c37514a8) +- [8.4.4-4](https://hub.docker.com/repository/docker/greatsql/greatsql_shell_build/tags/8.4.4-4/sha256:cfa03ed884e3cf9007ed80dc078834f73c892d2c2ed6fb939099b773c37514a8) +- [8.0.32-25](https://hub.docker.com/repository/docker/greatsql/greatsql_shell_build/tags/8.0.32-25/sha256:8728758467097c48da15c177bb8692b4e008c3626638a2385b2a6fe4eef44687) +- [8.0.32-25-aarch64](https://hub.docker.com/repository/docker/greatsql/greatsql_shell_build/tags/8.0.32-25-aarch64/sha256:810f6a57cc065aae88c29ffd02fdccdaf383c806414ac3848e43dbedfa5f727c) ## 如何使用GreatSQL-Shell-Build 例如: ```shell -$ docker run -itd --hostname greatsqlsh --name greatsqlsh greatsql/greatsql_shell_build:8.0.32-25 bash +$ docker run -itd --hostname greatsqlsh --name greatsqlsh greatsql/greatsql_shell_build:8.4.4-4 bash ``` 执行上述命令后,会创建一个GreatSQL-Shell编译环境容器,并在容器中自动完成GreatSQL-Shell编译工作。 @@ -53,31 +56,32 @@ $ docker logs greatsqlsh | tail 5.1 compiling mysqlclient and mysqlxclient 5.2 compiling MySQL Shell for GreatSQL -6. MySQL Shell for GreatSQL 8.0.32-25 build completed! - 6.1 MySQL Shell for GreatSQL 8.0.32-25 version: -/opt/greatsql-shell-8.0.32-25-centos-glibc2.28-x86_64/bin/mysqlsh Ver 8.0.32 for Linux on x86_64 - for MySQL 8.0.32 (Source distribution) +6. MySQL Shell for GreatSQL 8.4.4-4 build completed! + 6.1 MySQL Shell for GreatSQL 8.4.4-4 version: +/opt/greatsql-shell-8.4.4-4-centos-glibc2.28-x86_64/bin/mysqlsh Ver 8.4.4 for Linux on x86_64 - for MySQL 8.4.4 (Source distribution) 6.2 TARBALL file: --rw-r--r-- 1 root root 20378992 Mar 12 10:33 /opt/greatsql-shell-8.0.32-25-centos-glibc2.28-x86_64.tar.xz +-rw-r--r-- 1 root root 40284300 Oct 21 09:38 /opt/greatsql-shell-8.4.4-4-glibc2.28-x86_64.tar.xz ``` +**提示**:如果服务器在墙内或内网,可能由于下载部分资源失败而无法完成构建,请手动处理文件下载需求。 接下来回退到宿主机,将容器中的二进制包拷贝出来 ```shell -$ docker cp greatsqlsh:/opt/greatsql-shell-8.0.32-25-centos-glibc2.28-x86_64.tar.xz /usr/local/ +$ docker cp greatsqlsh:/opt/greatsql-shell-8.4.4-4-glibc2.28-x86_64.tar.xz /usr/local/ ``` 然后解压缩,就可以在宿主机环境下使用了,例如: ```shell # 先安装几个必要的依赖包 $ dnf install -y libssh python38 python38-libs python38-pyyaml -$ pip3.8 install --user certifi pyclamd +$ pip3.8 install -i https://pypi.tuna.tsinghua.edu.cn/simple --user certifi pyclamd numpy # 测试使用 -$ /usr/local/greatsql-shell-8.0.32-25-centos-glibc2.28-x86_64/bin/mysqlsh -MySQL Shell 8.0.32 +$ /usr/local/greatsql-shell-8.4.4-4-glibc2.28-x86_64/bin/mysqlsh ... -Type '\help' or '\?' for help; '\quit' to exit. - MySQL JS > \q + MySQL 127.0.0.1:3306 ssl SQL > \py +Switching to Python mode... + MySQL 127.0.0.1:3306 ssl Py > \q Bye! ``` @@ -87,7 +91,8 @@ Bye! - Dockerfile,用于构建Docker编译环境 - greatsqlsh-automake.sh,用于实现在Docker容器中自动化编译的脚本 - greatsqlsh-setenv.sh,通用环境变量设置脚本 -- mysqlsh-for-greatsql-8.0.32.patch,需要对MySQL Shell打补丁,才能支持GreatSQL中特有的仲裁节点特性 +- mysqlsh-for-greatsql-8.4.4.patch,需要对MySQL Shell打补丁,才能支持GreatSQL中特有的仲裁节点特性 +- mysql-8.4.4.patch,需要对MySQL源码包打补丁,修改gcc依赖版本 ## 其他分支 - 如果您想尝试支持Python 3.10版本的GreatSQL Shell,可参考 [earl86](https://gitee.com/earl86) 维护的[GreatSQL-Shell-Build分支](https://gitee.com/earl86/GreatSQL-Docker/tree/master/GreatSQL-Shell-Build)。 diff --git a/GreatSQL-Shell-Build/docker-entrypoint.sh b/GreatSQL-Shell-Build/docker-entrypoint.sh index 510bbf0..2985877 100755 --- a/GreatSQL-Shell-Build/docker-entrypoint.sh +++ b/GreatSQL-Shell-Build/docker-entrypoint.sh @@ -7,23 +7,22 @@ touch ${MAKELOG} && \ chown ${MYSQL_USER}:${MYSQL_USER} ${MAKELOG} && \ chmod 0777 ${MAKELOG} && \ echo "0.2 install all DEPS(autoconf, gcc ...)" && \ +rm -f /etc/yum.repos.d/CentOS*Linux-* && \ +rm -f /etc/yum.repos.d/CentOS*Stream-* && \ +dnf clean all && dnf makecache && \ dnf install -y ${DEPS} > /dev/null 2>&1 && \ echo 'source /opt/rh/gcc-toolset-11/enable' >> /root/.bash_profile && \ -rm -f /etc/yum.repos.d/CentOS-Linux-* && \ -echo "0.3 download ${YUM_REPOS}.tar.xz and ${V8_LIBS_PKG}.tar.xz" && \ +echo "0.3 download ${YUM_REPOS}.tar.xz" && \ mkdir -p ${OPT_DIR}/${V8_DEPS} && \ wget -c -O ${OPT_DIR}/${V8_DEPS}/${YUM_REPOS}.tar.xz ${GREATSQL_BUILD_DOWNLOAD_URL}/${V8_DEPS}/${YUM_REPOS}.tar.xz >> ${MAKELOG} 2>&1 && \ -wget -c -O ${OPT_DIR}/${V8_DEPS}/${V8_LIBS_PKG}.tar.xz ${GREATSQL_BUILD_DOWNLOAD_URL}/${V8_DEPS}/${V8_LIBS_PKG}.tar.xz >> ${MAKELOG} 2>&1 && \ -echo "0.4 install ${YUM_REPOS} and ${V8_LIBS_PKG}" && \ +echo "0.4 install ${YUM_REPOS}" && \ cd ${OPT_DIR}/${V8_DEPS} && \ tar xf ${YUM_REPOS}*z -C ${OPT_DIR}/${V8_DEPS} && \ -tar xf ${V8_LIBS_PKG}*z -C ${OPT_DIR}/${V8_DEPS} && \ rpm -ivhU --nodeps ${YUM_REPOS}/centos*noarch.rpm >> ${MAKELOG} 2>&1 && \ dnf install -y epel-release >> ${MAKELOG} 2>&1 && \ dnf install -y 'dnf-command(config-manager)' >> ${MAKELOG} 2>&1 && \ dnf config-manager --enable epel-testing epel-modular epel-testing-modular >> ${MAKELOG} 2>&1 && \ rpm -Uvh ${YUM_REPOS}/epel-release*noarch.rpm >> ${MAKELOG} 2>&1 && \ -dnf install -y ${V8_LIBS_PKG}/*rpm >> ${MAKELOG} 2>&1 && \ echo && \ echo "1. downloading sourcecode tarballs and extract" cd ${OPT_DIR} && \ @@ -31,6 +30,7 @@ echo " 1.1 downloading sourcecode tarballs ..." && \ wget -c -O ${GREATSQLSH_ENV} ${GREATSQLSH_BUILD_DOWNLOAD_URL}/${GREATSQLSH_ENV} >> ${MAKELOG} 2>&1 && \ wget -c -O ${GREATSQLSH_MAKESH} ${GREATSQLSH_BUILD_DOWNLOAD_URL}/${GREATSQLSH_MAKESH} >> ${MAKELOG} 2>&1 && \ wget -c -O ${GREATSQLSH_PATCH} ${GREATSQLSH_BUILD_DOWNLOAD_URL}/${GREATSQLSH_PATCH} >> ${MAKELOG} 2>&1 && \ +wget -c -O ${MYSQL_PATCH} ${GREATSQLSH_BUILD_DOWNLOAD_URL}/${MYSQL_PATCH} >> ${MAKELOG} 2>&1 && \ wget -c -O ${RPCGEN} ${GREATSQL_BUILD_DOWNLOAD_URL}/${RPCGEN} >> ${MAKELOG} 2>&1 && \ wget -c -O ${PATCHELF}.tar.gz ${GREATSQL_BUILD_DOWNLOAD_URL}/${PATCHELF}.tar.gz >> ${MAKELOG} 2>&1 && \ wget -c -O ${PROTOBUF}.tar.xz ${GREATSQL_BUILD_DOWNLOAD_URL}/${PROTOBUF}.tar.xz >> ${MAKELOG} 2>&1 && \ @@ -38,6 +38,8 @@ wget -c -O ${ANTLR}.tar.xz ${GREATSQL_BUILD_DOWNLOAD_URL}/${ANTLR}.tar.xz >> ${M wget -c -O ${BOOST}.tar.gz ${BOOST_SRC_DOWNLOAD_URL}/${BOOST}.tar.gz >> ${MAKELOG} 2>&1 && \ wget -c -O ${MYSQLSH}.tar.gz ${MYSQLSH_SRC_DOWNLOAD_URL}/${MYSQLSH}.tar.gz >> ${MAKELOG} 2>&1 && \ wget -c -O ${MYSQL}.tar.gz ${MYSQL_SRC_DOWNLOAD_URL}/${MYSQL}.tar.gz >> ${MAKELOG} 2>&1 && \ +wget -c -O ${JDK}.tar.gz ${JDK_DOWNLOAD_URL} >> ${MAKELOG} 2>&1 && \ +wget -c -O ${GRAALVM}.tar.gz ${GRAALVM_DOWNLOAD_URL} >> ${MAKELOG} 2>&1 && \ echo " 1.2 extract tarballs ..." && \ tar xf ${OPT_DIR}/${PATCHELF}*z && \ tar xf ${OPT_DIR}/${PROTOBUF}*z && \ @@ -45,6 +47,8 @@ tar xf ${OPT_DIR}/${ANTLR}*z && \ tar xf ${OPT_DIR}/${BOOST}*z && \ tar xf ${OPT_DIR}/${MYSQL}*z && \ tar xf ${OPT_DIR}/${MYSQLSH}*z && \ +tar xf ${OPT_DIR}/${JDK}*z && \ +tar xf ${OPT_DIR}/${GRAALVM}*z && \ chown -R ${MYSQL_USER}:${MYSQL_USER} ${OPT_DIR} && \ dnf install -y ${RPCGEN} >> ${MAKELOG} 2>&1 && \ chmod +x ${OPT_DIR}/*sh && \ @@ -70,9 +74,9 @@ echo && \ echo "5. compiling MySQL Shell for GreatSQL" su - ${MYSQL_USER} -s /bin/bash -c "cd ${OPT_DIR}; /bin/sh ${OPT_DIR}/${GREATSQLSH_MAKESH}" && \ echo && \ -echo "6. MySQL Shell for GreatSQL 8.0.32-25 build completed!" -pip3.8 install --user certifi pyclamd >> ${MAKELOG} 2>&1 && \ -echo " 6.1 MySQL Shell for GreatSQL 8.0.32-25 version:" && \ +echo "6. MySQL Shell for GreatSQL ${MYSQL_VERSION}-${RELEASE} build completed!" +pip3.8 install -i https://pypi.tuna.tsinghua.edu.cn/simple --user certifi pyclamd numpy >> ${MAKELOG} 2>&1 && \ +echo " 6.1 MySQL Shell for GreatSQL ${MYSQL_VERSION}-${RELEASE} version:" && \ ${BASE_DIR}/bin/mysqlsh --version && \ cd ${OPT_DIR} && \ tar cf ${GREATSQLSH}.tar ${GREATSQLSH} >> ${MAKELOG} 2>&1 && \ diff --git a/GreatSQL-Shell-Build/greatsqlsh-automake.sh b/GreatSQL-Shell-Build/greatsqlsh-automake.sh index a9ddeea..5e9b798 100755 --- a/GreatSQL-Shell-Build/greatsqlsh-automake.sh +++ b/GreatSQL-Shell-Build/greatsqlsh-automake.sh @@ -3,15 +3,27 @@ echo " 5.1 compiling mysqlclient and mysqlxclient" && \ cd ${OPT_DIR}/${MYSQL} && \ +patch -p1 -f < ${OPT_DIR}/${MYSQL_PATCH} >> ${MAKELOG} 2>&1 && \ rm -fr bld && \ mkdir bld && \ cd bld && \ cmake .. -DBOOST_INCLUDE_DIR=${OPT_DIR}/${BOOST} \ -DLOCAL_BOOST_DIR=${OPT_DIR}/${BOOST} \ --DWITH_SSL=system -DWITH_MYSQLX_USE_PROTOBUF_FULL=OFF >> ${MAKELOG} 2>&1 && \ -cmake --build . --target mysqlclient -- -j${MAKE_JOBS} >> ${MAKELOG} 2>&1 ; \ +-DWITH_AUTHENTICATION_KERBEROS=ON \ +-DWITH_PROTOBUF=system \ +-DWITH_SSL=system \ +-DWITH_ZSTD=system \ +>> ${MAKELOG} 2>&1 && \ +cmake --build . --target mysqlclient -- -j${MAKE_JOBS} >> ${MAKELOG} 2>&1 && \ cmake --build . --target mysqlxclient -- -j${MAKE_JOBS} >> ${MAKELOG} 2>&1 && \ -echo " 5.2 compiling MySQL Shell for GreatSQL" && \ +echo " 5.2 prepare jdk" && \ +export GRAALJDK_ROOT=${OPT_DIR}/${JDK} && \ +export JAVA_HOME=${OPT_DIR}/${GRAALVM} && \ +export PATH=$PATH:${OPT_DIR}/${GRAALVM} && \ +cd ${OPT_DIR}/${MYSQLSH}/ext/polyglot && \ +echo " 5.3 mvn package" && \ +mvn package >> ${MAKELOG} 2>&1 && \ +echo " 5.4 compiling MySQL Shell for GreatSQL" && \ cd ${OPT_DIR}/${MYSQLSH} && \ patch -p1 -f < ${OPT_DIR}/${GREATSQLSH_PATCH} >> ${MAKELOG} 2>&1 && \ rm -fr bld && \ @@ -23,44 +35,41 @@ cmake .. \ -DMYSQL_BUILD_DIR=${OPT_DIR}/${MYSQL}/bld/ \ -DBUILD_SOURCE_PACKAGE=0 \ -DWITH_PROTOBUF=system \ --DHAVE_V8=1 \ --DV8_INCLUDE_DIR=/usr/include \ --DV8_LIB_DIR=/usr/lib64 \ -DHAVE_PYTHON=1 \ -DBUNDLED_ANTLR_DIR=/usr/local/antlr4/ \ --DPYTHON_LIBRARIES=/usr/lib64/python3.8 -DPYTHON_INCLUDE_DIRS=/usr/include/python3.8/ >> ${MAKELOG} 2>&1 && \ +-DHAVE_JS=ON \ +-DBUNDLED_POLYGLOT_DIR=${OPT_DIR}/${MYSQLSH}/ext/polyglot/polyglot-nativeapi-native-library/target \ +>> ${MAKELOG} 2>&1 && \ make -j${MAKE_JOBS} >> ${MAKELOG} 2>&1 && \ make -j${MAKE_JOBS} install >> ${MAKELOG} 2>&1 && \ -cp /usr/local/lib/libprotobuf.so.30 ${BASE_DIR}/lib/mysqlsh/ && -cp /lib64/libnode.so.93 ${BASE_DIR}/lib/mysqlsh/ && \ -cp /lib64/libbrotlienc.so.1.0.6 ${BASE_DIR}/lib/mysqlsh/libbrotlienc.so.1 && \ -cp /lib64/libbrotlidec.so.1.0.6 ${BASE_DIR}/lib/mysqlsh/libbrotlidec.so.1 && \ -cp /lib64/libuv.so.1.0.0 ${BASE_DIR}/lib/mysqlsh/libuv.so.1 && \ -cp /lib64/libbrotlicommon.so.1.0.6 ${BASE_DIR}/lib/mysqlsh/libbrotlicommon.so.1 && \ -cp /lib64/libssl.so.1.1.1k ${BASE_DIR}/lib/mysqlsh/libssl.so.1.1 && \ -cp /lib64/libcrypto.so.1.1.1k ${BASE_DIR}/lib/mysqlsh/libcrypto.so.1.1 && \ -cp /lib64/libcrypt.so.1.1.0 ${BASE_DIR}/lib/mysqlsh/libcrypt.so.1.1 && \ -cp /lib64/libssh.so.4.8.5 ${BASE_DIR}/lib/mysqlsh/libssh.so.4 && \ -cp /lib64/libpython3.8.so.1.0 ${BASE_DIR}/lib/mysqlsh/ && \ -cp /lib64/libnghttp2.so.14.19.0 ${BASE_DIR}/lib/mysqlsh/libnghttp2.so.14 && \ -cp /lib64/libpcre2-8.so.0.7.1 ${BASE_DIR}/lib/mysqlsh/libpcre2-8.so.0 && \ -cp /lib64/libpthread.so.0 ${BASE_DIR}/lib/mysqlsh/ && \ -cp /lib64/libdl.so.2 ${BASE_DIR}/lib/mysqlsh/ && \ -cp /lib64/libresolv.so.2 ${BASE_DIR}/lib/mysqlsh/ && \ -cp /lib64/librt.so.1 ${BASE_DIR}/lib/mysqlsh/ && \ -cp /lib64/libutil.so.1 ${BASE_DIR}/lib/mysqlsh/ && \ -cp /lib64/libcurl.so.4 ${BASE_DIR}/lib/mysqlsh/ && \ -cp /lib64/libm.so.6 ${BASE_DIR}/lib/mysqlsh/ && \ -cp /lib64/libstdc++.so.6 ${BASE_DIR}/lib/mysqlsh/ && \ -cp /lib64/libgcc_s.so.1 ${BASE_DIR}/lib/mysqlsh/ && \ -cp /lib64/libc.so.6 ${BASE_DIR}/lib/mysqlsh/ && \ -cp /lib64/libz.so.1 ${BASE_DIR}/lib/mysqlsh/ && \ -cp /lib64/libgssapi_krb5.so.2 ${BASE_DIR}/lib/mysqlsh/ && \ -cp /lib64/libkrb5.so.3 ${BASE_DIR}/lib/mysqlsh/ && \ -cp /lib64/libk5crypto.so.3 ${BASE_DIR}/lib/mysqlsh/ && \ -cp /lib64/libcom_err.so.2 ${BASE_DIR}/lib/mysqlsh/ && \ -cp /lib64/libcrypt.so.1 ${BASE_DIR}/lib/mysqlsh/ && \ -cp /lib64/libuuid.so.1 ${BASE_DIR}/lib/mysqlsh/ && \ -cp /lib64/libkrb5support.so.0 ${BASE_DIR}/lib/mysqlsh/ && \ -cp /lib64/libkeyutils.so.1 ${BASE_DIR}/lib/mysqlsh/ && \ +cp /usr/local/lib/libprotobuf.so.30 ${BASE_DIR}/lib/mysqlsh/ ; +cp /lib64/libbrotlienc.so.1.0.6 ${BASE_DIR}/lib/mysqlsh/libbrotlienc.so.1 ; \ +cp /lib64/libbrotlidec.so.1.0.6 ${BASE_DIR}/lib/mysqlsh/libbrotlidec.so.1 ; \ +cp /lib64/libuv.so.1.0.0 ${BASE_DIR}/lib/mysqlsh/libuv.so.1 ; \ +cp /lib64/libbrotlicommon.so.1.0.6 ${BASE_DIR}/lib/mysqlsh/libbrotlicommon.so.1 ; \ +cp /lib64/libssl.so.1.1.1k ${BASE_DIR}/lib/mysqlsh/libssl.so.1.1 ; \ +cp /lib64/libcrypto.so.1.1.1k ${BASE_DIR}/lib/mysqlsh/libcrypto.so.1.1 ; \ +cp /lib64/libcrypt.so.1.1.0 ${BASE_DIR}/lib/mysqlsh/libcrypt.so.1.1 ; \ +cp /lib64/libssh.so.4.8.5 ${BASE_DIR}/lib/mysqlsh/libssh.so.4 ; \ +cp /lib64/libpython3.8.so.1.0 ${BASE_DIR}/lib/mysqlsh/ ; \ +cp /lib64/libpcre2-8.so.0.7.1 ${BASE_DIR}/lib/mysqlsh/libpcre2-8.so.0 ; \ +cp /lib64/libpthread.so.0 ${BASE_DIR}/lib/mysqlsh/ ; \ +cp /lib64/libdl.so.2 ${BASE_DIR}/lib/mysqlsh/ ; \ +cp /lib64/libresolv.so.2 ${BASE_DIR}/lib/mysqlsh/ ; \ +cp /lib64/librt.so.1 ${BASE_DIR}/lib/mysqlsh/ ; \ +cp /lib64/libutil.so.1 ${BASE_DIR}/lib/mysqlsh/ ; \ +cp /lib64/libcurl.so.4 ${BASE_DIR}/lib/mysqlsh/ ; \ +cp /lib64/libm.so.6 ${BASE_DIR}/lib/mysqlsh/ ; \ +cp /lib64/libstdc++.so.6 ${BASE_DIR}/lib/mysqlsh/ ; \ +cp /lib64/libgcc_s.so.1 ${BASE_DIR}/lib/mysqlsh/ ; \ +cp /lib64/libc.so.6 ${BASE_DIR}/lib/mysqlsh/ ; \ +cp /lib64/libz.so.1 ${BASE_DIR}/lib/mysqlsh/ ; \ +cp /lib64/libgssapi_krb5.so.2 ${BASE_DIR}/lib/mysqlsh/ ; \ +cp /lib64/libkrb5.so.3 ${BASE_DIR}/lib/mysqlsh/ ; \ +cp /lib64/libk5crypto.so.3 ${BASE_DIR}/lib/mysqlsh/ ; \ +cp /lib64/libcom_err.so.2 ${BASE_DIR}/lib/mysqlsh/ ; \ +cp /lib64/libcrypt.so.1 ${BASE_DIR}/lib/mysqlsh/ ; \ +cp /lib64/libuuid.so.1 ${BASE_DIR}/lib/mysqlsh/ ; \ +cp /lib64/libkrb5support.so.0 ${BASE_DIR}/lib/mysqlsh/ ; \ +cp /lib64/libkeyutils.so.1 ${BASE_DIR}/lib/mysqlsh/ ; \ cp /lib64/libselinux.so.1 ${BASE_DIR}/lib/mysqlsh/ diff --git a/GreatSQL-Shell-Build/greatsqlsh-setenv.sh b/GreatSQL-Shell-Build/greatsqlsh-setenv.sh index 7b0e024..5b80b00 100755 --- a/GreatSQL-Shell-Build/greatsqlsh-setenv.sh +++ b/GreatSQL-Shell-Build/greatsqlsh-setenv.sh @@ -1,6 +1,8 @@ #/bin/bash -. ~/.bash_profile +if [ -f ~/.bash_profile ] ; then + . ~/.bash_profile +fi MAKE_JOBS=`lscpu | grep '^CPU(s)'|awk '{print $NF}'` if [ ${MAKE_JOBS} -ge 16 ] ; then @@ -10,41 +12,45 @@ else fi OPT_DIR=/opt -MYSQL_VERSTION=8.0.32 -RELEASE=25 +MYSQL_VERSION=8.4.4 +RELEASE=4 GLIBC=`ldd --version | head -n 1 | awk '{print $NF}'` ARCH=`uname -p` OS=`grep '^ID=' /etc/os-release | sed 's/.*"\(.*\)".*/\1/ig'` MAKELOG=/tmp/greatsqlsh-automake.log MYSQL_USER=mysql -GREATSQLSH=greatsql-shell-${MYSQL_VERSTION}-${RELEASE}-glibc${GLIBC}-${ARCH} +GREATSQLSH=greatsql-shell-${MYSQL_VERSION}-${RELEASE}-glibc${GLIBC}-${ARCH} BASE_DIR=${OPT_DIR}/${GREATSQLSH} GREATSQL_BUILD_DOWNLOAD_URL="https://product.greatdb.com/GreatSQL-Docker/deppkgs" -GREATSQLSH_BUILD_DOWNLOAD_URL="https://gitee.com/GreatSQL/GreatSQL-Docker/raw/greatsql-8.0.32-25/GreatSQL-Shell-Build" -BOOST_SRC_DOWNLOAD_URL="https://boostorg.jfrog.io/artifactory/main/release/1.77.0/source" +GREATSQLSH_BUILD_DOWNLOAD_URL="https://gitee.com/GreatSQL/GreatSQL-Docker/raw/greatsql-8.4.4-4/GreatSQL-Shell-Build" +BOOST_SRC_DOWNLOAD_URL="https://sourceforge.net/projects/boost/files/boost/1.77.0/" MYSQL_SRC_DOWNLOAD_URL="https://downloads.mysql.com/archives/get/p/23/file" MYSQLSH_SRC_DOWNLOAD_URL="https://downloads.mysql.com/archives/get/p/43/file" +JDK_DOWNLOAD_URL="https://github.com/oracle/graal/archive/refs/tags/jdk-23.0.1.zip" DEPS="autoconf automake binutils bison cmake cyrus-sasl-devel cyrus-sasl-scram gcc-c++ \ gcc-toolset-11 gcc-toolset-11-annobin-plugin-gcc libcurl-devel libssh libssh-config libssh-devel \ -libtirpc-devel libudev-devel libuuid libuuid-devel m4 make ncurses-devel openssl openssl-devel \ -patch python38 python38-devel python38-libs python38-pyyaml uuid wget zlib-devel" \ +libtirpc-devel libudev-devel libuuid libuuid-devel m4 make maven ncurses-devel openssl openssl-devel \ +patch protobuf-lite python38 python38-devel python38-libs python38-pyyaml uuid wget zlib-devel brotli brotli-devel" \ V8_DEPS="deps-v8" YUM_REPOS="yum-repos" ANTLR="antlr4-4.10" BOOST="boost_1_77_0" -MYSQL="mysql-8.0.32" -MYSQLSH="mysql-shell-8.0.32-src" +MYSQL="mysql-8.4.4" +MYSQLSH="mysql-shell-8.4.4-src" PATCHELF="patchelf-0.14.5" PROTOBUF="protobuf-3.19.4" -GREATSQLSH_PATCH="mysqlsh-for-greatsql-8.0.32.patch" +MYSQL_PATCH="mysql-8.4.4.patch" +GREATSQLSH_PATCH="mysqlsh-for-greatsql-8.4.4.patch" GREATSQLSH_MAKESH="greatsqlsh-automake.sh" GREATSQLSH_ENV="greatsqlsh-setenv.sh" +JDK="graal-jdk-23.0.1" +GRAALVM="graalvm-community-openjdk-23.0.1+11.1" if [ "`uname -p`" = "aarch64" ] ; then RPCGEN="rpcgen-1.3.1-4.el8.aarch64.rpm" - V8_LIBS_PKG="v8-libs-aarch64" + GRAALVM_DOWNLOAD_URL="https://github.com/graalvm/graalvm-ce-builds/releases/download/jdk-23.0.1/graalvm-community-jdk-23.0.1_linux-aarch64_bin.tar.gz" else RPCGEN="rpcgen-1.3.1-4.el8.x86_64.rpm" - V8_LIBS_PKG="v8-libs-x86_64" + GRAALVM_DOWNLOAD_URL="https://github.com/graalvm/graalvm-ce-builds/releases/download/jdk-23.0.1/graalvm-community-jdk-23.0.1_linux-x64_bin.tar.gz" fi diff --git a/GreatSQL-Shell-Build/mysql-8.4.4.patch b/GreatSQL-Shell-Build/mysql-8.4.4.patch new file mode 100644 index 0000000..13cbd52 --- /dev/null +++ b/GreatSQL-Shell-Build/mysql-8.4.4.patch @@ -0,0 +1,38 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 2268d852..5c0ee707 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -315,7 +315,9 @@ IF(CMAKE_HOST_UNIX AND NOT FORCE_UNSUPPORTED_COMPILER + ELSE() + SET(ALTERNATIVE_PATHS "/opt/rh/devtoolset-11") + ENDIF() +- ELSEIF(LINUX_RHEL8 OR LINUX_RHEL9) ++ ELSEIF(LINUX_RHEL8) ++ SET(ALTERNATIVE_PATHS "/opt/rh/gcc-toolset-11") ++ ELSEIF(LINUX_RHEL9) + SET(ALTERNATIVE_PATHS "/opt/rh/gcc-toolset-12") + ENDIF() + +@@ -368,7 +370,7 @@ IF(CMAKE_HOST_UNIX AND NOT FORCE_UNSUPPORTED_COMPILER + MESSAGE(STATUS "Using ${ALTERNATIVE_GCC}") + MESSAGE(STATUS "Using ${ALTERNATIVE_GPP}") + ELSE() +- IF(LINUX_RHEL7) ++ IF(LINUX_RHEL7) + IF(MY_HOST_MACHINE_NAME MATCHES "aarch64") + SET(DEV_PACKAGES + "devtoolset-10-gcc devtoolset-10-gcc-c++ devtoolset-10-binutils") +@@ -376,7 +378,12 @@ IF(CMAKE_HOST_UNIX AND NOT FORCE_UNSUPPORTED_COMPILER + SET(DEV_PACKAGES + "devtoolset-11-gcc devtoolset-11-gcc-c++ devtoolset-11-binutils") + ENDIF() +- ELSEIF(LINUX_RHEL8 OR LINUX_RHEL9) ++ ELSEIF(LINUX_RHEL8) ++ SET(DEV_PACKAGES ++ "gcc-toolset-11-gcc gcc-toolset-11-gcc-c++ gcc-toolset-11-binutils") ++ STRING_APPEND(DEV_PACKAGES " gcc-toolset-11-annobin-annocheck") ++ STRING_APPEND(DEV_PACKAGES " gcc-toolset-11-annobin-plugin-gcc") ++ ELSEIF(LINUX_RHEL9) + SET(DEV_PACKAGES + "gcc-toolset-12-gcc gcc-toolset-12-gcc-c++ gcc-toolset-12-binutils") + STRING_APPEND(DEV_PACKAGES " gcc-toolset-12-annobin-annocheck") diff --git a/GreatSQL-Shell-Build/mysqlsh-for-greatsql-8.0.32.patch b/GreatSQL-Shell-Build/mysqlsh-for-greatsql-8.0.32.patch deleted file mode 100644 index 1b2b968..0000000 --- a/GreatSQL-Shell-Build/mysqlsh-for-greatsql-8.0.32.patch +++ /dev/null @@ -1,48 +0,0 @@ -diff --git a/mysqlshdk/libs/mysql/group_replication.cc b/mysqlshdk/libs/mysql/group_replication.cc -index 436a62b15..8f8958ce7 100644 ---- a/mysqlshdk/libs/mysql/group_replication.cc -+++ b/mysqlshdk/libs/mysql/group_replication.cc -@@ -107,6 +107,8 @@ std::string to_string(const Member_role role) { - return "PRIMARY"; - case Member_role::SECONDARY: - return "SECONDARY"; -+ case Member_role::ARBITRATOR: -+ return "ARBITRATOR"; - case Member_role::NONE: - return "NONE"; - } -@@ -118,6 +120,8 @@ Member_role to_member_role(const std::string &role) { - return Member_role::PRIMARY; - } else if (shcore::str_caseeq("SECONDARY", role)) { - return Member_role::SECONDARY; -+ } else if (shcore::str_caseeq("ARBITRATOR", role)) { -+ return Member_role::ARBITRATOR; - } else if (role.empty()) { - return Member_role::NONE; - } else { -diff --git a/mysqlshdk/libs/mysql/group_replication.h b/mysqlshdk/libs/mysql/group_replication.h -index 05dfa54bf..23ccf6a76 100644 ---- a/mysqlshdk/libs/mysql/group_replication.h -+++ b/mysqlshdk/libs/mysql/group_replication.h -@@ -73,7 +73,7 @@ enum class Member_state { - MISSING - }; - --enum class Member_role { PRIMARY, SECONDARY, NONE }; -+enum class Member_role { PRIMARY, SECONDARY, ARBITRATOR, NONE }; - - enum class Topology_mode { SINGLE_PRIMARY, MULTI_PRIMARY, NONE }; - -diff --git a/mysqlshdk/scripting/jscript_context.cc b/mysqlshdk/scripting/jscript_context.cc -index 5f4675174..0e7ff1e26 100644 ---- a/mysqlshdk/scripting/jscript_context.cc -+++ b/mysqlshdk/scripting/jscript_context.cc -@@ -1557,7 +1557,7 @@ v8::Local v8_array_buffer(v8::Isolate *isolate, - - std::string to_string(v8::Isolate *isolate, v8::Local obj) { - const v8::String::Utf8Value utf8{ -- isolate, obj->IsSymbol() ? obj.As()->Name() : obj}; -+ isolate, obj->IsSymbol() ? obj.As()->Description() : obj}; - const auto ptr = *utf8; - return nullptr == ptr ? "" : std::string(ptr, utf8.length()); - } diff --git a/GreatSQL-Shell-Build/mysqlsh-for-greatsql-8.4.4.patch b/GreatSQL-Shell-Build/mysqlsh-for-greatsql-8.4.4.patch new file mode 100644 index 0000000..26480f3 --- /dev/null +++ b/GreatSQL-Shell-Build/mysqlsh-for-greatsql-8.4.4.patch @@ -0,0 +1,61 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 7a669d268..4f5ddd49c 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -239,7 +239,7 @@ IF(CMAKE_HOST_UNIX AND NOT FORCE_UNSUPPORTED_COMPILER + SET(ALTERNATIVE_PATHS "/opt/rh/devtoolset-11") + ENDIF() + ELSEIF(LINUX_RHEL8 OR LINUX_RHEL9) +- SET(ALTERNATIVE_PATHS "/opt/rh/gcc-toolset-12") ++ SET(ALTERNATIVE_PATHS "/opt/rh/gcc-toolset-11") + ENDIF() + + FOREACH(OPT_PATH ${ALTERNATIVE_PATHS}) +@@ -298,9 +298,9 @@ IF(CMAKE_HOST_UNIX AND NOT FORCE_UNSUPPORTED_COMPILER + ENDIF() + ELSEIF(LINUX_RHEL8 OR LINUX_RHEL9) + SET(DEV_PACKAGES +- "gcc-toolset-12-gcc gcc-toolset-12-gcc-c++ gcc-toolset-12-binutils") +- STRING_APPEND(DEV_PACKAGES " gcc-toolset-12-annobin-annocheck") +- STRING_APPEND(DEV_PACKAGES " gcc-toolset-12-annobin-plugin-gcc") ++ "gcc-toolset-11-gcc gcc-toolset-11-gcc-c++ gcc-toolset-11-binutils") ++ STRING_APPEND(DEV_PACKAGES " gcc-toolset-11-annobin-annocheck") ++ STRING_APPEND(DEV_PACKAGES " gcc-toolset-11-annobin-plugin-gcc") + ENDIF() + MESSAGE(WARNING + "Could not find devtoolset compiler/linker in ${ALTERNATIVE_PATHS}") +diff --git a/mysqlshdk/libs/mysql/group_replication.cc b/mysqlshdk/libs/mysql/group_replication.cc +index b6c840cbb..574d60ec7 100644 +--- a/mysqlshdk/libs/mysql/group_replication.cc ++++ b/mysqlshdk/libs/mysql/group_replication.cc +@@ -105,6 +105,8 @@ std::string to_string(const Member_role role) { + return "PRIMARY"; + case Member_role::SECONDARY: + return "SECONDARY"; ++ case Member_role::ARBITRATOR: ++ return "ARBITRATOR"; + case Member_role::NONE: + return "NONE"; + } +@@ -116,6 +118,8 @@ Member_role to_member_role(const std::string &role) { + return Member_role::PRIMARY; + } else if (shcore::str_caseeq("SECONDARY", role)) { + return Member_role::SECONDARY; ++ } else if (shcore::str_caseeq("ARBITRATOR", role)) { ++ return Member_role::ARBITRATOR; + } else if (role.empty()) { + return Member_role::NONE; + } else { +diff --git a/mysqlshdk/libs/mysql/group_replication.h b/mysqlshdk/libs/mysql/group_replication.h +index 8337db933..0c28e281c 100644 +--- a/mysqlshdk/libs/mysql/group_replication.h ++++ b/mysqlshdk/libs/mysql/group_replication.h +@@ -75,7 +75,7 @@ enum class Member_state { + MISSING + }; + +-enum class Member_role { PRIMARY, SECONDARY, NONE }; ++enum class Member_role { PRIMARY, SECONDARY, ARBITRATOR, NONE }; + + enum class Topology_mode { SINGLE_PRIMARY, MULTI_PRIMARY, NONE }; + diff --git a/GreatSQL-Shell/CHANGELOG.md b/GreatSQL-Shell/CHANGELOG.md index a141d40..cbb8b4e 100644 --- a/GreatSQL-Shell/CHANGELOG.md +++ b/GreatSQL-Shell/CHANGELOG.md @@ -1,15 +1,6 @@ -# 8.0.32-25 更新日志 +# 8.4.4-4 更新日志 -## 2024.3.13 -* 更新GreatSQL-Shell到8.0.32-25最新版本,支持JS语法。 +## 2025.10.22 +* 更新到8.4.4-4版本 -## 2024.2.20 -* 优化GreatSQL-Shell,改用从服务器上下载,无需准备本地二进制文件包。 -* 支持x86_64/aarch64两种平台。 - -## 2024.1.22 - -* 版本更新到GreatSQL 8.0.32-25。 -* 支持在Docker中运行GreatSQL Shell,无需安装。 - -[8.0.32-25]: https://gitee.com/GreatSQL/GreatSQL-Docker/tree/greatsql-8.0.32-25/GreatSQL-Shell +[8.4.4-4]: https://gitee.com/GreatSQL/GreatSQL-Docker/tree/greatsql-8.4.4-4/GreatSQL-Shell diff --git a/GreatSQL-Shell/Dockerfile b/GreatSQL-Shell/Dockerfile index 8e842e6..84df426 100644 --- a/GreatSQL-Shell/Dockerfile +++ b/GreatSQL-Shell/Dockerfile @@ -1,23 +1,24 @@ -#for x86_64 +# Dockerfile for GreatSQL Shell 8.4.4-4 +# +# docker version 26.1.3 (not podman) +# docker buildx build --platform linux/arm64,linux/amd64 -t greatsql/greatsql_shell:8.4.4-4 . --push +# FROM centos:8 -#for aarch64 -#FROM docker.io/arm64v8/centos - LABEL maintainer="greatsql.cn" \ email="greatsql@greatdb.com" \ forum="https://greatsql.cn/forum.php" \ -gitee="https://gitee.com/GreatSQL/GreatSQL-Shell-Docker" +gitee="https://gitee.com/GreatSQL/GreatSQL-Docker" -ENV LANG en_US.utf8 -ARG DEPS="libssh python38 python38-pyyaml python38-dateutil" \ -GREATSQLSH_DOWNLOAD_URL="https://product.greatdb.com/GreatSQL-8.0.32-25" \ -GREATSQLSH="greatsql-shell-8.0.32-25-glibc2.28-x86_64" \ -BASE_DIR=/usr/local -#for aarch64 -#GREATSQLSH="greatsql-shell-8.0.32-25-glibc2.28-aarch64" \ +ARG TARGETARCH \ +GREATSQL_VERSION="8.4.4-4" +ENV DEPS="libssh python38 python38-pyyaml python38-dateutil" \ +GREATSQLSH_DOWNLOAD_URL="https://product.greatdb.com/GreatSQL-${GREATSQL_VERSION}" \ +GREATSQLSH="greatsql-shell-${GREATSQL_VERSION}-glibc2.28-${TARGETARCH}" \ +BASE_DIR="/usr/local" -RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == \ +RUN echo ; echo "0. init"; \ +(cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == \ systemd-tmpfiles-setup.service ] || rm -f $i; done); \ rm -f /lib/systemd/system/multi-user.target.wants/*;\ rm -f /etc/systemd/system/*.wants/*;\ @@ -26,20 +27,26 @@ rm -f /lib/systemd/system/sockets.target.wants/*udev*; \ rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \ rm -f /lib/systemd/system/basic.target.wants/*;\ rm -f /lib/systemd/system/anaconda.target.wants/*; \ -rm -f /etc/yum.repos.d/CentOS-Linux-* ; \ +rm -f /etc/yum.repos.d/* ; \ +echo ; echo "1. replace aliyun yum repo" ; \ curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo > /dev/null 2>&1 && \ sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo > /dev/null 2>&1 && \ dnf clean all > /dev/null 2>&1 && \ dnf install -y epel-release > /dev/null 2>&1 && \ -rm -f /etc/yum.repos.d/CentOS-Linux-* ; \ +rm -f /etc/yum.repos.d/CentOS*Linux-* ; \ +rm -f /etc/yum.repos.d/CentOS*Stream-* ; \ +echo ; echo "2. yum update and clean" ; \ dnf -y update > /dev/null 2>&1 && \ dnf clean all > /dev/null 2>&1 && \ -rm -f /etc/yum.repos.d/CentOS-Linux-* ; \ +rm -f /etc/yum.repos.d/CentOS*Linux-* ; \ +rm -f /etc/yum.repos.d/CentOS*Stream-* ; \ +echo; echo "3. install ${DEPS}" ; \ dnf install -y ${DEPS} > /dev/null 2>&1 && \ -pip3.8 install --user certifi pyclamd > /dev/null 2>&1 && \ +pip3.8 install -i https://pypi.tuna.tsinghua.edu.cn/simple --user certifi pyclamd numpy > /dev/null 2>&1 && \ +echo ; echo "4. download greatsql-shell ${GREATSQLSH_DOWNLOAD_URL}/${GREATSQLSH}.tar.xz" ; \ curl -o ${BASE_DIR}/${GREATSQLSH}.tar.xz ${GREATSQLSH_DOWNLOAD_URL}/${GREATSQLSH}.tar.xz > /dev/null 2>&1 && \ tar xf ${BASE_DIR}/${GREATSQLSH}.tar.xz -C ${BASE_DIR} > /dev/null 2>&1 && \ rm -f ${BASE_DIR}/${GREATSQLSH}.tar.xz > /dev/null 2>&1 && \ -ln -s ${BASE_DIR}/${GREATSQLSH}/bin/mysqlsh ${BASE_DIR}/bin/mysqlsh +ln -s ${BASE_DIR}/greatsql-shell-${GREATSQL_VERSION}-*/bin/mysqlsh ${BASE_DIR}/bin/mysqlsh CMD ["bash"] diff --git a/GreatSQL-Shell/README.md b/GreatSQL-Shell/README.md index af7845e..b9da6ca 100644 --- a/GreatSQL-Shell/README.md +++ b/GreatSQL-Shell/README.md @@ -2,18 +2,27 @@ ## 简介 -在Docker环境中运行MySQL Shell for GreatSQL 8.0.32-25,无需额外安装,更方便省事。 +在Docker环境中运行MySQL Shell for GreatSQL 8.4.4-4,无需额外安装,更方便省事。 ## 基本信息 - 维护者: GreatSQL(greatsql@greatdb.com) - 联系我们:greatsql@greatdb.com -- 最新版本:GreatSQL 8.0.32-25 -- 最后更新时间:2024-03-13 +- 最新版本:GreatSQL 8.4.4-4 - 支持CPU架构:x86_64、aarch64 ## 支持哪些tag -- [latest](https://hub.docker.com/layers/greatsql/greatsql_shell/latest/images/sha256-4264884f14341e3b34077c52c2ee7d0d53ce00fb5e45915c3b57e950ef52d80f?context=explore), [8.0.32-25](https://hub.docker.com/layers/greatsql/greatsql_shell/8.0.32-25/images/sha256-4264884f14341e3b34077c52c2ee7d0d53ce00fb5e45915c3b57e950ef52d80f?context=explore) -- [latest-arch64](https://hub.docker.com/layers/greatsql/greatsql_shell/latest-aarch64/images/sha256-46d3d92632256d24078948a81a6750ae808e3c2292c10eb88107633f5bde85ec?context=explore), [8.0.32-25-aarch64](https://hub.docker.com/layers/greatsql/greatsql_shell/8.0.32-25-aarch64/images/sha256-46d3d92632256d24078948a81a6750ae808e3c2292c10eb88107633f5bde85ec?context=explore) +- [latest](https://hub.docker.com/repository/docker/greatsql/greatsql_shell/tags/latest/sha256:1a7a88b9923249e793158627acf66986c52156e00798c4c9d3cb5867d35f7e4f) +- [8.4.4-4](https://hub.docker.com/repository/docker/greatsql/greatsql_shell/tags/8.4.4-4/sha256:1a7a88b9923249e793158627acf66986c52156e00798c4c9d3cb5867d35f7e4f) +- [8.0.32-25](https://hub.docker.com/repository/docker/greatsql/greatsql_shell/tags/8.0.32-25/sha256:4264884f14341e3b34077c52c2ee7d0d53ce00fb5e45915c3b57e950ef52d80f) +- [8.0.32-25-aarch64](https://hub.docker.com/repository/docker/greatsql/greatsql_shell/tags/8.0.32-25-aarch64/sha256:46d3d92632256d24078948a81a6750ae808e3c2292c10eb88107633f5bde85ec) + +备选阿里云、腾讯云镜像资源地址,支持的 tag 如下: +- 阿里云 [latest](registry.cn-beijing.aliyuncs.com/greatsql/greatsql_shell:latest) +- 阿里云 [8.4.4-4](registry.cn-beijing.aliyuncs.com/greatsql/greatsql_shell:8.4.4-4) +- 阿里云 [8.0.32-25](registry.cn-beijing.aliyuncs.com/greatsql/greatsql_shell:8.0.32-25) +- 腾讯云 [latest](ccr.ccs.tencentyun.com/greatsql/greatsql_shell:latest) +- 腾讯云 [8.4.4-4](ccr.ccs.tencentyun.com/greatsql/greatsql_shell:8.4.4-4) +- 腾讯云 [8.0.32-25](ccr.ccs.tencentyun.com/greatsql/greatsql_shell:8.0.32-25) ## 怎么使用这个Docker镜像 @@ -27,58 +36,65 @@ $ docker run -itd --hostname greatsqlsh --name greatsqlsh greatsql/greatsql_shel 通过tcp/ip方式连接GreatSQL ```shell -$ docker exec -it greatsqlsh bash -c "mysqlsh --uri GreatSQL@172.17.140.123" -Please provide the password for 'GreatSQL@172.17.140.123': ************* -MySQL Shell 8.0.32 +$ docker exec -it greatsqlsh bash -c "mysqlsh --uri GreatSQL@172.16.16.10" +Please provide the password for 'GreatSQL@172.16.16.10': ************* +... +# 切换到Python语法模式下 + MySQL 127.0.0.1:3306 ssl SQL > \py +Switching to Python mode... ... -Your MySQL connection id is 14891 (X protocol) -Server version: 8.0.32-25 GreatSQL, Release 25, Revision db07cc5cb73 -No default schema selected; type \use to set one. - # 获取当前MGR状态信息 - MySQL 172.17.140.123:33060+ ssl JS > c=dba.getCluster() - MySQL 172.17.140.123:33060+ ssl JS > c.status() + MySQL 172.16.16.10:33060+ ssl Py > c=dba.get_cluster() + MySQL 172.16.16.10:33060+ ssl Py > c.status() { - "clusterName": "mgr803225", + "clusterName": "mgr", "defaultReplicaSet": { "name": "default", - "primary": "172.17.136.59:3306", + "primary": "172.16.16.10:3306", "ssl": "REQUIRED", - "status": "OK_NO_TOLERANCE", - "statusText": "Cluster is NOT tolerant to any failures.", + "statusText": "Cluster is ONLINE and can tolerate up to ONE failure.", "topology": { - "172.17.136.59:3306": { - "address": "172.17.136.59:3306", + "172.16.16.10:3306": { + "address": "172.16.16.10:3306", "memberRole": "PRIMARY", "mode": "R/W", "readReplicas": {}, "replicationLag": "applier_queue_applied", "role": "HA", "status": "ONLINE", - "version": "8.0.32" + "version": "8.4.4" }, - "172.17.140.123:3306": { - "address": "172.17.140.123:3306", + "172.16.16.11:3306": { + "address": "172.16.16.11:3306", "memberRole": "SECONDARY", "mode": "R/O", "readReplicas": {}, "replicationLag": "applier_queue_applied", "role": "HA", "status": "ONLINE", - "version": "8.0.32" + "version": "8.4.4" + }, + "172.16.16.12:3306": { + "address": "172.16.16.12:3306", + "memberRole": "ARBITRATOR", + "mode": "R/O", + "readReplicas": {}, + "role": "HA", + "status": "ONLINE", + "version": "8.4.4" } }, "topologyMode": "Single-Primary" }, - "groupInformationSourceMember": "172.17.136.59:3306" + "groupInformationSourceMember": "192.168.5.160:3306" } - MySQL 172.17.140.123:33060+ ssl JS > + MySQL 172.16.16.10:33060+ ssl JS > # 切换到SQL命令行模式下,并查看连接列表 - MySQL 172.17.140.123:33060+ ssl JS > \sql + MySQL 172.16.16.10:33060+ ssl JS > \sql Switching to SQL mode... Commands end with ; Fetching global names for auto-completion... Press ^C to stop. - MySQL 172.17.140.123:33060+ ssl SQL > show processlist; + MySQL 172.16.16.10:33060+ ssl SQL > show processlist; +-------+-------------+----------------------+------+---------+---------+----------------------------------------------------------+----------------------------------+------------+-----------+---------------+ | Id | User | Host | db | Command | Time | State | Info | Time_ms | Rows_sent | Rows_examined | +-------+-------------+----------------------+------+---------+---------+----------------------------------------------------------+----------------------------------+------------+-----------+---------------+ @@ -100,12 +116,7 @@ $ docker run -itd --hostname greatsqlsh --name greatsqlsh -v /data/GreatSQL/mysq ```shell $ docker exec -it greatsqlsh bash -c "mysqlsh -S/tmp/mysql.sock" Please provide the password for 'root@/tmp%2Fmysql.sock': -MySQL Shell 8.0.32 ... -Fetching schema names for auto-completion... Press ^C to stop. -Your MySQL connection id is 178 -Server version: 8.0.32-25 GreatSQL, Release 25, Revision db07cc5cb73 -No default schema selected; type \use to set one. MySQL localhost Py > \sql Switching to SQL mode... Commands end with ; Fetching global names for auto-completion... Press ^C to stop. @@ -121,7 +132,7 @@ Fetching global names for auto-completion... Press ^C to stop. 9 rows in set (0.0002 sec) ``` -如上所示,这就可以在Docker环境中运行MySQL Shell for GreatSQL 8.0.32-25,用它来管理GreatSQL MGR更方便省事。 +如上所示,这就可以在Docker环境中运行MySQL Shell for GreatSQL 8.4.4-4,用它来管理GreatSQL MGR更方便省事。 ## 文件介绍 - CHANGELOG.md,更新历史 diff --git a/GreatSQL/CHANGELOG.md b/GreatSQL/CHANGELOG.md index 0ae6841..a839c2c 100644 --- a/GreatSQL/CHANGELOG.md +++ b/GreatSQL/CHANGELOG.md @@ -1,36 +1,8 @@ -# 8.0.32-25 更新日志 +# 8.4.4-4 更新日志 -## 2024.4.16 -* 利用Docker buildx支持多平台构建,不再需要用tag标识区分不同平台。 +## 2025.10.15 +* 更新到GreatSQL 8.4.4-4 +* 调整audit log filter测试方案 +* 修改相应的库名、表名 -## 2024.3.20 -### 新功能 -* 增加参数MAXPERF,用于设置为最大性能模式(默认);在最大性能模式下,会调大innodb_buffer_pool_size/rapid_memory_limit等多个选项,详见脚本`greatsql-init.sh`中对MAXPERF模式的处理逻辑。 - -## 2024.2.20 -### 新功能 -* 改造GreatSQL Docker镜像构造方法,全部从服务器上下载文件,无需从本地拷贝文件。 -* 优化Dockerfile,合并x86_64和aarch64。 -* 增加Rapid引擎功能测试。 - -### 其他更新 -* 修复测试脚本中的转义字符。 -* 将docker-compose挪到本目录下。 - -## 2024.1.19 - -### 新功能 - -* 版本更新到GreatSQL 8.0.32-25。 -* 支持表名大小写自定义选项。 -* 新增greatsql-test.sql自测试脚本。 -* 支持挂载外部my.cnf文件,[ISSUE#I8VFGR](https://gitee.com/GreatSQL/GreatSQL-Docker/issues/I8VFGR)。 -* 新增group_replication_recovery_get_public_key = 1设置,避免在caching_sha2_password plugin模式下MGR通信异常。 -* 初始化完毕后执行update更新;改用RPM包来构建;合并EVN及其他操作减少镜像层数;对应[ISSUE#I8WSOQ](https://gitee.com/GreatSQL/GreatSQL-Docker/issues/I8VFGR)。 - -### 其他更新 - -* 修复一个不太友好的报错提醒。 -* 修改客户端prompt,最后加一个空格,更美观。 - -[8.0.32-25]: https://gitee.com/GreatSQL/GreatSQL-Docker/tree/greatsql-8.0.32-25/GreatSQL +[8.4.4-4]: https://gitee.com/GreatSQL/GreatSQL-Docker/tree/greatsql-8.4.4-4/GreatSQL diff --git a/GreatSQL/Dockerfile b/GreatSQL/Dockerfile index c03066f..8ac8b00 100644 --- a/GreatSQL/Dockerfile +++ b/GreatSQL/Dockerfile @@ -1,67 +1,48 @@ -FROM centos +FROM container-registry.oracle.com/os/oraclelinux:9-slim LABEL maintainer="greatsql.cn" \ email="greatsql@greatdb.com" \ forum="https://greatsql.cn/forum.php" \ gitee="https://gitee.com/GreatSQL/GreatSQL-Docker" -ENV LANG en_US.utf8 -ARG TARGETARCH \ -MYSQL_DATA_DIR=/data/GreatSQL \ -MYSQL_USER=mysql \ -MYSQL_UID_GID=3306 \ -MYSQL_EXTRACT_DIR=/usr/local \ +ARG TARGETARCH +ENV GREATSQL_DATA_DIR=/data/GreatSQL \ +GREATSQL_USER=mysql \ +GREATSQL_UID_GID=3306 \ +GREATSQL_EXTRACT_DIR=/usr/local \ TMP_DIR=/tmp \ -MYSQL_PORT=3306 \ -DEPS="pkg-config perl libaio-devel numactl-devel numactl-libs \ -net-tools openssl openssl-devel perl-Data-Dumper perl-Digest-MD5 \ -python2 perl-JSON perl-Test-Simple" \ -GREATSQL_DOCKER_DOWNLOAD_URL="https://gitee.com/GreatSQL/GreatSQL-Docker/raw/greatsql-8.0.32-25/GreatSQL" \ +GREATSQL_PORT=3306 \ +DEPS="libaio-devel numactl-devel xz openssl-devel openssl procps-ng util-linux" \ +GREATSQL_DOCKER_DOWNLOAD_URL="https://gitee.com/GreatSQL/GreatSQL-Docker/raw/greatsql-8.4.4-4/GreatSQL" \ GREATSQL_INIT="greatsql-init.sh" \ GREATSQL_SHRINK="greatsql-shrink.sh" \ GREATSQL_TEST="greatsql-test.sql" \ GREATSQL_CNF="my.cnf" \ -GREATSQL_DOWNLOAD_URL="https://product.greatdb.com/GreatSQL-8.0.32-25-Rapid" +GREATSQL_DOWNLOAD_URL="https://product.greatdb.com/GreatSQL-8.4.4-4" \ +GREATSQL_PKG="GreatSQL-8.4.4-4-Linux-glibc2.17-${TARGETARCH}-minimal" -ENV GREATSQL_PKG="greatsql-8.0.32-25.1.el8.${TARGETARCH}.rpm-bundle.tar.xz" - -CMD /bin/bash - -RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == \ -systemd-tmpfiles-setup.service ] || rm -f $i; done); \ -rm -f /lib/systemd/system/multi-user.target.wants/*;\ -rm -f /etc/systemd/system/*.wants/*;\ -rm -f /lib/systemd/system/local-fs.target.wants/*; \ -rm -f /lib/systemd/system/sockets.target.wants/*udev*; \ -rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \ -rm -f /lib/systemd/system/basic.target.wants/*;\ -rm -f /lib/systemd/system/anaconda.target.wants/*; \ -rm -f /etc/yum.repos.d/CentOS-Linux-* ; \ -curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo > /dev/null 2>&1 && \ -sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo > /dev/null 2>&1 && \ -dnf clean all > /dev/null 2>&1 && \ -rm -f /etc/yum.repos.d/CentOS-Linux-* ; \ -dnf -y update > /dev/null 2>&1 && \ -dnf clean all > /dev/null 2>&1 && \ -rm -f /etc/yum.repos.d/CentOS-Linux-* ; \ -dnf install -y ${DEPS} > /dev/null 2>&1 && \ -curl -o ${TMP_DIR}/${GREATSQL_SHRINK} ${GREATSQL_DOCKER_DOWNLOAD_URL}/${GREATSQL_SHRINK} > /dev/null 2>&1 && \ -curl -o ${TMP_DIR}/${GREATSQL_TEST} ${GREATSQL_DOCKER_DOWNLOAD_URL}/${GREATSQL_TEST} > /dev/null 2>&1 && \ -curl -o /${GREATSQL_INIT} ${GREATSQL_DOCKER_DOWNLOAD_URL}/${GREATSQL_INIT} > /dev/null 2>&1 && \ -curl -o /etc/${GREATSQL_CNF} ${GREATSQL_DOCKER_DOWNLOAD_URL}/${GREATSQL_CNF} > /dev/null 2>&1 && \ -/usr/sbin/groupadd -g ${MYSQL_UID_GID} ${MYSQL_USER} && \ -/usr/sbin/useradd -u ${MYSQL_UID_GID} -r -g ${MYSQL_UID_GID} -s /sbin/nologin ${MYSQL_USER} && \ -curl -o ${TMP_DIR}/greatsql.tar.xz ${GREATSQL_DOWNLOAD_URL}/${GREATSQL_PKG} > /dev/null 2>&1 && \ -tar xf ${TMP_DIR}/greatsql.tar.xz -C ${TMP_DIR} > /dev/null 2>&1 && \ -dnf install -y ${TMP_DIR}/greatsql*rpm > /dev/null 2>&1 && \ -/bin/bash ${TMP_DIR}/${GREATSQL_SHRINK} > /dev/null 2>&1 && \ -mkdir -p ${MYSQL_DATA_DIR} > /dev/null 2>&1 && \ -chown -R ${MYSQL_USER}:${MYSQL_USER} ${MYSQL_DATA_DIR} && \ -chmod -R ug+rwX /etc/my.cnf > /dev/null 2>&1 && \ +RUN microdnf install --nodocs -y ${DEPS} && \ +microdnf update -y && \ +curl -o ${TMP_DIR}/${GREATSQL_SHRINK} ${GREATSQL_DOCKER_DOWNLOAD_URL}/${GREATSQL_SHRINK} && \ +curl -o ${TMP_DIR}/${GREATSQL_TEST} ${GREATSQL_DOCKER_DOWNLOAD_URL}/${GREATSQL_TEST} && \ +curl -o /${GREATSQL_INIT} ${GREATSQL_DOCKER_DOWNLOAD_URL}/${GREATSQL_INIT} && \ +curl -o /etc/${GREATSQL_CNF} ${GREATSQL_DOCKER_DOWNLOAD_URL}/${GREATSQL_CNF} && \ +/usr/sbin/groupadd -g ${GREATSQL_UID_GID} ${GREATSQL_USER} && \ +/usr/sbin/useradd -u ${GREATSQL_UID_GID} -r -g ${GREATSQL_UID_GID} -s /sbin/nologin ${GREATSQL_USER} && \ +curl -o ${TMP_DIR}/${GREATSQL_PKG}.tar.xz ${GREATSQL_DOWNLOAD_URL}/${GREATSQL_PKG}.tar.xz && \ +tar xf ${TMP_DIR}/${GREATSQL_PKG}.tar.xz -C ${GREATSQL_EXTRACT_DIR} && \ +ln -s ${GREATSQL_EXTRACT_DIR}/GreatSQL-* ${GREATSQL_EXTRACT_DIR}/GreatSQL && \ +ln -s ${GREATSQL_EXTRACT_DIR}/GreatSQL/bin/* /usr/bin/ && \ +/bin/bash ${TMP_DIR}/${GREATSQL_SHRINK} ; \ +mkdir -p ${GREATSQL_DATA_DIR} && \ +chown -R ${GREATSQL_USER}:${GREATSQL_USER} ${GREATSQL_DATA_DIR} && \ +chmod -R ug+rwX /etc/my.cnf && \ chmod +x /${GREATSQL_INIT} && \ -rm -f ${TMP_DIR}/greatsql*xz ${TMP_DIR}/greatsql*rpm +microdnf clean all && \ +rm -f ${TMP_DIR}/*xz && \ +rm -fr /usr/share/doc /usr/share/man /usr/share/misc ENTRYPOINT ["/greatsql-init.sh"] -EXPOSE ${MYSQL_PORT} ${MYSQL_PORT}0 ${MYSQL_PORT}1 +EXPOSE ${GREATSQL_PORT} ${GREATSQL_PORT}0 ${GREATSQL_PORT}1 CMD ["mysqld"] diff --git a/GreatSQL/README.md b/GreatSQL/README.md index 6aaf990..0172541 100644 --- a/GreatSQL/README.md +++ b/GreatSQL/README.md @@ -10,14 +10,46 @@ ## 基本信息 - 维护者: GreatSQL(greatsql@greatdb.com) - 联系我们:greatsql@greatdb.com -- 最新版本:GreatSQL 8.0.32-25 -- 最后更新时间:2024-03-20 -- 支持CPU架构:x86_64、aarch64 +- 最新版本:GreatSQL 8.4.4-4 +- 最后更新时间:2025-10-15 ## 支持哪些tag -- [latest](https://hub.docker.com/layers/greatsql/greatsql/latest/images/sha256-6a01d0b1b9107b286601249202803da5b08e9f729b8727f691ce423928994eef?context=repo), [8.0.32-25](https://hub.docker.com/layers/greatsql/greatsql/8.0.32-25/images/sha256-6a01d0b1b9107b286601249202803da5b08e9f729b8727f691ce423928994eef?context=repo), [8.0.32-24](https://hub.docker.com/layers/greatsql/greatsql/8.0.32-24/images/sha256-0d1ee8a01e4dec5d3698053319978c1817ca455eb6a11de9fa7e13b747fa9f3e?context=repo), [8.0.25-16](https://hub.docker.com/layers/greatsql/greatsql/greatsql/8.0.25-16/images/sha256-03969daaaaaeb0f51dde0c9e92ef327302607cdde3afbe5c2b071098000c52c1?context=explore) -- [latest](https://hub.docker.com/layers/greatsql/greatsql/latest/images/sha256-6a01d0b1b9107b286601249202803da5b08e9f729b8727f691ce423928994eef?context=repo), [8.0.32-25](https://hub.docker.com/layers/greatsql/greatsql/8.0.32-25/images/sha256-6a01d0b1b9107b286601249202803da5b08e9f729b8727f691ce423928994eef?context=repo), [8.0.32-24-arch64](https://hub.docker.com/layers/greatsql/greatsql/8.0.32-24-aarch64/images/sha256-97dfa7074a1c5b2e0355fcf5fc829e8074edca6db7c2e528059786fb0c48a523?context=repo), [8.0.25-16-aarch64](https://hub.docker.com/layers/greatsql/greatsql/8.0.25-16-aarch64/images/sha256-c4664d2b84025ed2487d0aecb6090ab9bb0f7ee2033afd9a079ea4f1f9f82b52?context=repo) +- [latest](https://hub.docker.com/repository/docker/greatsql/greatsql/tags/latest/sha256:e90496c2c83c02e8f8f6c27327bd9a0e620556961dff3f906058aad7e8c5564e) +- [8.4.4-4](https://hub.docker.com/repository/docker/greatsql/greatsql/tags/8.4.4-4/sha256:e90496c2c83c02e8f8f6c27327bd9a0e620556961dff3f906058aad7e8c5564e) +- [8.0.32-27](https://hub.docker.com/repository/docker/greatsql/greatsql/tags/8.0.32-27/sha256:6169b1a98eaa4a2579315e30681714c102ac1d6e9881bac5606ebec67c5b7b3b) + +拉取GreatSQL镜像 + +```shell +docker pull greatsql/greatsql +``` + +还可以指定具体版本号 + +```shell +docker pull greatsql/greatsql:8.4.4-4 +``` + +如果无法从hub.docker.com拉取,可以尝试从阿里云ACR或腾讯云TCR拉取,例如: + +```shell +# 阿里云ACR +docker pull registry.cn-beijing.aliyuncs.com/greatsql/greatsql + +# 腾讯云TCR +$ docker pull ccr.ccs.tencentyun.com/greatsql/greatsql +``` + +如果是龙芯(Loongson-3A6000)架构环境,可以尝试下面的镜像: + +```bash +docker pull registry.cn-shanghai.aliyuncs.com/annda/greatsql:8.4.4-4 +``` + +**提醒**:这是社区用户 Annda](https://github.com/AnndaGH) 提交的镜像,请自行决定是否使用。 + +> 如果提示 timeout 连接超时错误,多重试几次应该就好了。 ## GreatSQL Docker镜像使用 @@ -26,6 +58,7 @@ ```shell $ docker run -d \ --name greatsql --hostname=greatsql \ +-e TZ="Asia/Shanghai" \ greatsql/greatsql ``` @@ -36,16 +69,24 @@ greatsql/greatsql *--hostname=greatsql*,设定容器主机名 *greatsql/greatsql*,指定容器使用的镜像名 -如果想要映射外部 my.cnf 配置文件或自行指定 datadir,还可以类似下面这么用: +如果想要映射外部 my.cnf 配置文件或自行指定 datadir,并且增加端口映射,可以执行下面的命令: ```shell $ docker run -d \ +-P 4406:3306 \ -v /data/greatsql/my.cnf:/etc/my.cnf \ -v /data/greatsql/data:/data \ --name greatsql --hostname=greatsql \ +-e TZ="Asia/Shanghai" \ greatsql/greatsql ``` +其中: + +- 参数 `-P 4406:3306` 的作用是将宿主环境中的 *4406* 端口(宿主中的端口号可自行定义,不与其他服务冲突即可)映射到容器中的 *3306* 端口,这样远程主机就可以通过 *4406* 端口连接容器中的 GreatSQL 数据库实例; +- 参数 `-v /data/greatsql/my.cnf:/etc/my.cnf` 的作用是将宿主环境中的 */data/greatsql/my.cnf* 映射到容器中的 */etc/my.cnf*; +- 参数 `-v /data/greatsql/data:/data` 的作用是将本地 */data/greatsql/data* 目录映射到容器中的 */data* 目录。 + 注意,需要先保证本地目录 `/data/greatsql/data` 是空的才行,否则 GreatSQL 在初始化检测时会报告失败,无法启动,日志中将有类似下面的内容: ```shell @@ -67,20 +108,12 @@ $ docker exec -it greatsql bash [root@greatsql /]# mysql Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 34 -Server version: 8.0.32-25 GreatSQL, Release 25, Revision db07cc5cb73 -... -mysql Ver 8.0.32-24 for Linux on x86_64 (GreatSQL (GPL), Release 24, Revision c2e83f27394) -... - -[root@GreatSQL][(none)]> \s -... -Server version: 8.0.32-25 GreatSQL, Release 25, Revision db07cc5cb73 ... [root@GreatSQL][(none)]> SELECT version(); +-----------+ | version() | +-----------+ -| 8.0.32-25 | +| 8.4.4 | +-----------+ 1 row in set (0.00 sec) @@ -88,6 +121,12 @@ Server version: 8.0.32-25 GreatSQL, Release 25, Revision db07cc5cb73 [root@GreatSQL][(none)]> SOURCE /tmp/greatsql-test.sql; ``` +如果在创建容器时已经指定了 `-P 4406:3306` 端口映射参数,那么远程主机就可以通过 *4406* 端口连接容器中的 GreatSQL 数据库实例: + +```bash +mysql -h172.16.16.10 -uXX -pXX -P4406 +``` + ## 如何通过 docker-compose 使用GreatSQL镜像 下面是一个docker-compose的配置文件参考 `/data/docker/mysql.yml`: @@ -208,9 +247,9 @@ $ mysql +---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+----------------------------+ | CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION | MEMBER_COMMUNICATION_STACK | +---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+----------------------------+ -| group_replication_applier | d17d165a-ab7a-11ec-a8c0-0242ac120002 | 172.18.0.2 | 3306 | ONLINE | PRIMARY | 8.0.32 | XCom | -| group_replication_applier | d28c3916-ab7a-11ec-ab60-0242ac120003 | 172.18.0.3 | 3306 | ONLINE | SECONDARY | 8.0.32 | XCom | -| group_replication_applier | d3dc6855-ab7a-11ec-98a0-0242ac120004 | 172.18.0.4 | 3306 | ONLINE | ARBITRATOR | 8.0.32 | XCom | +| group_replication_applier | d17d165a-ab7a-11ec-a8c0-0242ac120002 | 172.18.0.2 | 3306 | ONLINE | PRIMARY | 8.4.4 | XCom | +| group_replication_applier | d28c3916-ab7a-11ec-ab60-0242ac120003 | 172.18.0.3 | 3306 | ONLINE | SECONDARY | 8.4.4 | XCom | +| group_replication_applier | d3dc6855-ab7a-11ec-98a0-0242ac120004 | 172.18.0.4 | 3306 | ONLINE | ARBITRATOR | 8.4.4 | XCom | +---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+----------------------------+ ``` 可以看到,一个三节点的MGR集群已自动构建完毕,并且其中还包含一个ARBITRATOR节点(仲裁节点/投票节点)。 @@ -310,9 +349,9 @@ $ mysql +---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+----------------------------+ | CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION | MEMBER_COMMUNICATION_STACK | +---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+----------------------------+ -| group_replication_applier | 9831bac0-30d4-11ee-8b65-0242ac120002 | 172.18.0.2 | 3306 | ONLINE | PRIMARY | 8.0.32 | XCom | -| group_replication_applier | 9907b1ae-30d4-11ee-8c66-0242ac120003 | 172.18.0.3 | 3306 | ONLINE | PRIMARY | 8.0.32 | XCom | -| group_replication_applier | 9a1ee7ca-30d4-11ee-8b93-0242ac120004 | 172.18.0.4 | 3306 | ONLINE | PRIMARY | 8.0.32 | XCom | +| group_replication_applier | 9831bac0-30d4-11ee-8b65-0242ac120002 | 172.18.0.2 | 3306 | ONLINE | PRIMARY | 8.4.4 | XCom | +| group_replication_applier | 9907b1ae-30d4-11ee-8c66-0242ac120003 | 172.18.0.3 | 3306 | ONLINE | PRIMARY | 8.4.4 | XCom | +| group_replication_applier | 9a1ee7ca-30d4-11ee-8b93-0242ac120004 | 172.18.0.4 | 3306 | ONLINE | PRIMARY | 8.4.4 | XCom | +---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+----------------------------+ ``` 可以看到,一个三节点的MGR集群已自动构建完毕,运行模式为多主模式。 @@ -390,10 +429,13 @@ MySQL 8.0.26开始,可以为view change单独指定一个GTID前缀,避免 设置表名大小写选项 lower_case_table_names,设置为0表示区分大小写,设置为1表示不区分带下写。默认值:0。 非必选项。 +- **TZ** +设置容器时区,例如设置为 "Asia/Shanghai" 表示采用东八区(+8:00小时)。 + ## 文件介绍 - CHANGELOG.md,更新历史 - docker-compose,利用docker-compose拉起的示例文件 -- Dockerfile,用于构建GreatSQL Shell Docker环境 +- Dockerfile,用于构建GreatSQL Docker环境 - greatsql-init.sh,构建镜像初始化脚本 - greatsql-shrink.sh,在镜像中裁剪非必要文件脚本 - greatsql-test.sql,可执行GreatSQL自测试的脚本 diff --git a/GreatSQL/docker-compose/mgr-3nodes-multi-primary.yml b/GreatSQL/docker-compose/mgr-3nodes-multi-primary.yml index f04222d..3093f24 100644 --- a/GreatSQL/docker-compose/mgr-3nodes-multi-primary.yml +++ b/GreatSQL/docker-compose/mgr-3nodes-multi-primary.yml @@ -3,6 +3,7 @@ version: '2' services: mgr2: image: greatsql/greatsql + #image: registry.cn-beijing.aliyuncs.com/greatsql/greatsql #指定镜像(阿里云ACR) container_name: mgr2 #设定容器名字 hostname: mgr2 #设定容器中的主机名 networks: #指定容器使用哪个专用网络 diff --git a/GreatSQL/docker-compose/mgr-3nodes.yml b/GreatSQL/docker-compose/mgr-3nodes.yml index bed8678..df2ac56 100644 --- a/GreatSQL/docker-compose/mgr-3nodes.yml +++ b/GreatSQL/docker-compose/mgr-3nodes.yml @@ -3,6 +3,7 @@ version: '2' services: mgr2: image: greatsql/greatsql #指定镜像 + #image: registry.cn-beijing.aliyuncs.com/greatsql/greatsql #指定镜像(阿里云ACR) container_name: mgr2 #设定容器名字 hostname: mgr2 #设定容器中的主机名 networks: #指定容器使用哪个专用网络 @@ -21,7 +22,7 @@ services: MYSQL_MGR_ARBITRATOR: 0 #指定当前MGR节点为Arbitrator角色,此时不能同时指定其为Primary/Secondary角色 LOWER_CASE_TABLE_NAMES: 0 #设定lower_case_table_names值,默认为0 mgr3: - image: greatsql/greatsql + image: greatsql/greatsql #指定镜像 container_name: mgr3 hostname: mgr3 networks: diff --git a/GreatSQL/greatsql-init.sh b/GreatSQL/greatsql-init.sh index 5ecf665..5a12174 100755 --- a/GreatSQL/greatsql-init.sh +++ b/GreatSQL/greatsql-init.sh @@ -160,23 +160,29 @@ if [ "$1" = 'mysqld' -a -z "$wantHelp" ]; then file_env 'MYSQL_MGR_ARBITRATOR' if [ "${MYSQL_MGR_ARBITRATOR}" ] ; then if [ ${MYSQL_MGR_ARBITRATOR} -eq 1 ]; then - echo "$(sed "s/MYSQL_MGR_ARBITRATOR/1/ig" /etc/my.cnf)" > /etc/my.cnf + echo "$(sed "s/MYSQL_MGR_ARBITRATOR/ON/ig" /etc/my.cnf)" > /etc/my.cnf else - echo "$(sed "s/MYSQL_MGR_ARBITRATOR/0/ig" /etc/my.cnf)" > /etc/my.cnf + echo "$(sed "s/MYSQL_MGR_ARBITRATOR/OFF/ig" /etc/my.cnf)" > /etc/my.cnf fi else - echo "$(sed "s/MYSQL_MGR_ARBITRATOR/0/ig" /etc/my.cnf)" > /etc/my.cnf + echo "$(sed "s/MYSQL_MGR_ARBITRATOR/OFF/ig" /etc/my.cnf)" > /etc/my.cnf fi file_env 'MYSQL_MGR_MULTI_PRIMARY' if [ "$MYSQL_MGR_MULTI_PRIMARY" ]; then if [ ${MYSQL_MGR_MULTI_PRIMARY} -eq 1 ]; then - echo "$(sed "s/SINGLE_PRIMARY/0/g" /etc/my.cnf)" > /etc/my.cnf + echo "$(sed "s/SINGLE_PRIMARY/OFF/g" /etc/my.cnf)" > /etc/my.cnf + echo "$(sed "s/EVERYWHERE_CHECKS/ON/g" /etc/my.cnf)" > /etc/my.cnf + echo "$(sed "s/FAST_MODE/0/g" /etc/my.cnf)" > /etc/my.cnf else - echo "$(sed "s/SINGLE_PRIMARY/1/g" /etc/my.cnf)" > /etc/my.cnf + echo "$(sed "s/SINGLE_PRIMARY/ON/g" /etc/my.cnf)" > /etc/my.cnf + echo "$(sed "s/EVERYWHERE_CHECKS/OFF/g" /etc/my.cnf)" > /etc/my.cnf + echo "$(sed "s/FAST_MODE/1/g" /etc/my.cnf)" > /etc/my.cnf fi else - echo "$(sed "s/SINGLE_PRIMARY/1/g" /etc/my.cnf)" > /etc/my.cnf + echo "$(sed "s/SINGLE_PRIMARY/ON/g" /etc/my.cnf)" > /etc/my.cnf + echo "$(sed "s/EVERYWHERE_CHECKS/OFF/g" /etc/my.cnf)" > /etc/my.cnf + echo "$(sed "s/FAST_MODE/1/g" /etc/my.cnf)" > /etc/my.cnf fi mkdir -p "$DATADIR" @@ -250,7 +256,7 @@ if [ "$1" = 'mysqld' -a -z "$wantHelp" ]; then fi read -r -d '' mgrInit <<-EOSQL || true - CREATE USER IF NOT EXISTS ${MYSQL_MGR_USER} IDENTIFIED WITH mysql_native_password BY '${MYSQL_MGR_USER_PWD}'; + CREATE USER IF NOT EXISTS ${MYSQL_MGR_USER} IDENTIFIED BY '${MYSQL_MGR_USER_PWD}'; GRANT REPLICATION SLAVE, BACKUP_ADMIN ON *.* TO ${MYSQL_MGR_USER}; CHANGE MASTER TO MASTER_USER='${MYSQL_MGR_USER}', MASTER_PASSWORD='${MYSQL_MGR_USER_PWD}' FOR CHANNEL 'group_replication_recovery'; EOSQL @@ -258,7 +264,6 @@ if [ "$1" = 'mysqld' -a -z "$wantHelp" ]; then "${mysql[@]}" <<-EOSQL SET @@SESSION.SQL_LOG_BIN=0; - DELETE FROM mysql.user WHERE user NOT IN ('mysql.sys', 'mysqlxsys', 'mysql.infoschema', 'mysql.session', 'root') OR host NOT IN ('localhost') ; ALTER USER 'root'@'localhost' IDENTIFIED BY '${MYSQL_ROOT_PASSWORD}' ; GRANT ALL ON *.* TO 'root'@'localhost' WITH GRANT OPTION ; ${rootCreate} @@ -308,7 +313,8 @@ if [ "$1" = 'mysqld' -a -z "$wantHelp" ]; then fi echo - echo 'MySQL init process done. Ready for start up.' + echo 'MySQL init process done.' + echo 'Ready for start up.' echo fi @@ -336,12 +342,13 @@ fi file_env 'MAXPERF' mem=`free -m|grep Mem|awk '{print $2}'` -cpu=`lscpu |grep '^CPU(s)'|awk '{print $2}'` +cpu=`lscpu |grep '^CPU(s)'|grep -v scaling|awk '{print $2}'` ibp_maxperf=`expr ${mem} / 4 \* 3` rapid_mem_maxperf=`expr ${ibp_maxperf} / 2` rapid_thd_maxperf=`expr ${cpu} - 2` + if [ -z "${MAXPERF}" ]; then - MAXPERF=1 + MAXPERF=${MAXPERF} fi if [ "${MAXPERF}" == "1" ]; then @@ -370,8 +377,6 @@ if [ "${MAXPERF}" == "1" ]; then echo "$(sed "s/\(.*rapid_worker_threads\).*/\1 = ${rapid_thd_maxperf}/ig" /etc/my.cnf)" > /etc/my.cnf echo "$(sed "s/\(.*rapid_hash_table_memory_limit\).*/\1 = 30/ig" /etc/my.cnf)" > /etc/my.cnf echo "$(sed "s/\(.*secondary_engine_parallel_load_workers\).*/\1 = 32/ig" /etc/my.cnf)" > /etc/my.cnf -else - echo "MAXPERF invalid"; fi exec "$@" diff --git a/GreatSQL/greatsql-shrink.sh b/GreatSQL/greatsql-shrink.sh index a24b12f..a910d19 100755 --- a/GreatSQL/greatsql-shrink.sh +++ b/GreatSQL/greatsql-shrink.sh @@ -1,13 +1,40 @@ #!/bin/sh -basedir=/ -rm -fr $basedir/usr/include -rm -f $basedir/usr/sbin/mysqld-debug +basedir=/usr/local/GreatSQL -cd $basedir/usr/bin -rm -fr comp_err ibd2sdi innochecksum ldb lz4_decompress myisamchk myisam_ftdump myisamlog myisampack mysqlcheck mysql_client_test mysqld_multi mysqld_safe mysqldumpslow mysqlimport mysql_keyring_encryption_test mysql_ldb mysql_migrate_keyring mysql_secure_installation mysqlslap mysqltest mysqltest_safe_process mysql_upgrade mysqlxtest ps-admin ps_mysqld_helper sst_dump zlib_decompress mysqlpump mysql_config mysql_config_editor perror +rm -fr $basedir/include -cd $basedir/usr/lib64/mysql -rm -rf libHotBackup.so libmysqlservices.a libperconaserverclient.* libcoredumper.a libnspr4.so private/libnspr4.so libnss3.so private/libnss3.so libnssutil3.so private/libnssutil3.so libplc4.so private/libplc4.so libplds4.so private/libplds4.so libsmime3.so private/libsmime3.so libssl3.so private/libssl3.so mecab/ +cd $basedir/bin +rm -fr comp_err ibd2sdi innochecksum ldb lz4_decompress myisamchk myisam_ftdump myisamlog myisampack mysqlcheck \ + mysql_client_test mysqld_multi mysqld_safe mysqldumpslow mysqlimport mysql_keyring_encryption_test mysql_ldb \ + mysql_migrate_keyring mysql_secure_installation mysqlslap mysqltest mysqltest_safe_process mysql_upgrade \ + mysqlxtest ps-admin ps_mysqld_helper sst_dump zlib_decompress mysql_config mysql_config_editor perror \ + mysqldecrypt zstd_decompress mysqld-debug mysqladmin mysqlshow mysqlpump mysqlrouter mysqlrouter_keyring \ + mysqlrouter_passwd mysqlrouter_plugin_info mysqld_pre_systemd -cd $basedir/usr/lib64/mysql/plugin -rm -fr debug/ auth_pam_compat.so auth_pam.so component_keyring_file.so component_mysqlx_global_reset.so component_pfs_example_component_population.so component_pfs_example.so component_test_backup_lock_service.so component_test_mysql_current_thread_reader.so component_test_mysql_runtime_error.so component_test_pfs_notification.so component_test_pfs_resource_group.so component_test_status_var_service_int.so component_test_status_var_service_reg_only.so component_test_status_var_service.so component_test_status_var_service_str.so component_test_status_var_service_unreg_only.so component_test_string_service_charset.so component_test_string_service_long.so component_test_string_service.so component_test_system_variable_source.so component_test_sys_var_service_int.so component_test_sys_var_service_same.so component_test_sys_var_service.so component_test_sys_var_service_str.so component_test_udf_registration.so component_udf_reg_3_func.so component_udf_reg_avg_func.so component_udf_reg_int_func.so component_udf_reg_int_same_func.so component_udf_reg_only_3_func.so component_udf_reg_real_func.so component_udf_unreg_3_func.so component_udf_unreg_int_func.so component_udf_unreg_real_func.so daemon_example.ini dialog.so ha_rocksdb.so innodb_engine.so libdaemon_example.so libmemcached.so libpluginmecab.so libtest_framework.so libtest_services.so libtest_services_threaded.so libtest_session_attach.so libtest_session_detach.so libtest_session_info.so libtest_session_in_thd.so libtest_sql_2_sessions.so libtest_sql_all_col_types.so libtest_sql_cmds_1.so libtest_sql_commit.so libtest_sql_complex.so libtest_sql_errors.so libtest_sql_lock.so libtest_sql_processlist.so libtest_sql_replication.so libtest_sql_reset_connection.so libtest_sql_shutdown.so libtest_sql_sleep_is_connected.so libtest_sql_sqlmode.so libtest_sql_stmt.so libtest_sql_stored_procedures_functions.so libtest_sql_views_triggers.so libtest_x_sessions_deinit.so libtest_x_sessions_init.so pfs_example_plugin_employee.so procfs.so qa_auth_client.so qa_auth_interface.so qa_auth_server.so replication_observers_example_plugin.so test_security_context.so test_services_plugin_registry.so test_udf_services.so tokudb_backup.so udf_example.so semisync_master.so semisync_replica.so semisync_slave.so semisync_source.so test_* *test* +cd $basedir/lib +rm -rf libHotBackup.so libmysqlservices.a libperconaserverclient.* libcoredumper.a libnspr4.so \ + libmysqlclient.so.21 libmysqlclient.so.21.2.32 libplc4.so libssl3.so libplds4.so libsmime3.so libnss3.so \ + private/libnspr4.so private/libnss3.so libnssutil3.so private/libnssutil3.so private/libplc4.so \ + private/libplds4.so private/libsmime3.so private/libssl3.so mecab/ mysqlrouter + +cd $basedir/lib/plugin +rm -fr debug/ auth_pam_compat.so auth_pam.so component_keyring_file.so component_mysqlx_global_reset.so \ + component_pfs_example_component_population.so component_pfs_example.so component_test_backup_lock_service.so \ + component_test_mysql_current_thread_reader.so component_test_mysql_runtime_error.so component_test_pfs_notification.so \ + component_test_pfs_resource_group.so component_test_status_var_service_int.so component_test_status_var_service_reg_only.so \ + component_test_status_var_service.so component_test_status_var_service_str.so component_test_status_var_service_unreg_only.so \ + component_test_string_service_charset.so component_test_string_service_long.so component_test_string_service.so \ + component_test_system_variable_source.so component_test_sys_var_service_int.so component_test_sys_var_service_same.so \ + component_test_sys_var_service.so component_test_sys_var_service_str.so component_test_udf_registration.so \ + component_udf_reg_3_func.so component_udf_reg_avg_func.so component_udf_reg_int_func.so component_udf_reg_int_same_func.so \ + component_udf_reg_only_3_func.so component_udf_reg_real_func.so component_udf_unreg_3_func.so component_udf_unreg_int_func.so \ + component_udf_unreg_real_func.so daemon_example.ini dialog.so ha_rocksdb.so innodb_engine.so libdaemon_example.so libmemcached.so \ + libpluginmecab.so libtest_framework.so libtest_services.so libtest_services_threaded.so libtest_session_attach.so \ + libtest_session_detach.so libtest_session_info.so libtest_session_in_thd.so libtest_sql_2_sessions.so libtest_sql_all_col_types.so \ + libtest_sql_cmds_1.so libtest_sql_commit.so libtest_sql_complex.so libtest_sql_errors.so libtest_sql_lock.so libtest_sql_processlist.so \ + libtest_sql_replication.so libtest_sql_reset_connection.so libtest_sql_shutdown.so libtest_sql_sleep_is_connected.so libtest_sql_sqlmode.so \ + libtest_sql_stmt.so libtest_sql_stored_procedures_functions.so libtest_sql_views_triggers.so libtest_x_sessions_deinit.so \ + libtest_x_sessions_init.so pfs_example_plugin_employee.so procfs.so qa_auth_client.so qa_auth_interface.so qa_auth_server.so \ + replication_observers_example_plugin.so test_security_context.so test_services_plugin_registry.so test_udf_services.so \ + tokudb_backup.so udf_example.so semisync_master.so semisync_replica.so semisync_slave.so semisync_source.so test_* *test* \ + authentication_*so component_keyring_*so diff --git a/GreatSQL/greatsql-test.sql b/GreatSQL/greatsql-test.sql index 28e39ab..8219ce3 100644 --- a/GreatSQL/greatsql-test.sql +++ b/GreatSQL/greatsql-test.sql @@ -1,6 +1,6 @@ -- -- greatsql-test.sql --- GreatSQL 主要功能特性自测脚本,适配版本:8.0.32-25 +-- GreatSQL 主要功能特性自测脚本,适配版本:8.4.4-4 -- -- -- 主要测试项 @@ -11,49 +11,40 @@ -- 5. 测试Clone加密 -- 6. 测试MGR特性 -- 7. 测试greatdb_ha特性 +-- 8. 测试turbo引擎 -- -- 关于检查结果: -- 当检查结果输出内容包含 OK 时,表示检查结果正确 -- 当检查结果输出内容包含 NG(NOT GOOD缩写) 时,表示检查结果异常,需要人为再确认 -- --- -- CHANGELOG --- # 2024.6.5 --- 1. 增加对 GreatSQL 新增的几个主要特性检查 --- 2. 对每项检查,对其结果都增加 OK/NG 标识 --- 3. 不再详细输出每个测试命令,但仍在脚本中保留(仅注释掉) +-- # 2025.10.15 +-- 1. 升级到 GreatSQL 8.4.4-4 +-- 2. 调整audit log filter测试方案 +-- 3. 修改相应的库名、表名 -- +SET NAMES utf8mb4; --- 1. VERSION +-- 1. 版本号 SELECT '--- 1. checking VERSION() ---' AS STAGE_1; --- SELECT 'SELECT @@version FROM DUAL;' AS EXEC_TEST_SQL; -SELECT IF(@@version = '8.0.32-25', "OK: VERSION IS 8.0.32-25", "NG, VERSION IS NOT 8.0.32-25") AS '1.1 check: VERSION' FROM DUAL; +SELECT IF(@@version = '8.4.4-4', "OK: VERSION IS 8.4.4-4", "NG, VERSION IS NOT 8.4.4-4") AS '1.1 check: VERSION' FROM DUAL; SELECT ' ' FROM DUAL; --- SELECT 'SELECT @@version_comment FROM DUAL;' AS EXEC_TEST_SQL; -SELECT IF(@@version_comment LIKE 'GreatSQL%25%79f57097e3f', "OK, Revision IS 79f57097e3f", "NG, Revision IS NOT 79f57097e3f") AS '1.2 check: VERSION_COMMENT' FROM DUAL; +SELECT IF(@@version_comment LIKE '%GreatSQL%4%d73de75905d', "OK, Revision IS d73de75905d", "NG, Revision IS NOT d73de75905d") AS '1.2 check: VERSION_COMMENT' FROM DUAL; SELECT ' ' FROM DUAL; SELECT ' ' FROM DUAL; --- 2. DDL & DML for Oracle compatibility + +-- 2. Oracle兼容性 SELECT '--- 2. checking CREATE NEW DB & TABLE, INSERT & SELECT ROWS & Oracle compatibility ---' AS STAGE_2; --- SELECT 'CREATE DATABASE IF NOT EXISTS greatsql_803225 CHARACTER SET utf8mb4;' AS EXEC_TEST_SQL; -CREATE DATABASE IF NOT EXISTS greatsql_803225 CHARACTER SET utf8mb4; - --- SELECT 'USE greatsql_803225;' AS EXEC_TEST_SQL; -USE greatsql_803225; - --- SELECT ' --- CREATE TABLE t_803225( --- id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, --- c1 CLOB NOT NULL, --- c2 VARCHAR2(30) NOT NULL DEFAULT \'\', --- c3 NUMBER UNSIGNED NOT NULL DEFAULT 0, --- c4 PLS_INTEGER UNSIGNED NOT NULL DEFAULT 0 --- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;' AS EXEC_TEST_SQL; -CREATE TABLE t_803225( +-- CREATE DB & TABLE +CREATE DATABASE IF NOT EXISTS greatsql_8444 CHARACTER SET utf8mb4; +USE greatsql_8444; + +DROP TABLE IF EXISTS t_8444; +CREATE TABLE t_8444( id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, c1 CLOB NOT NULL, c2 VARCHAR2(30) NOT NULL DEFAULT '', @@ -61,12 +52,8 @@ c3 NUMBER UNSIGNED NOT NULL DEFAULT 0, c4 PLS_INTEGER UNSIGNED NOT NULL DEFAULT 0 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; --- SELECT 'SHOW CREATE TABLE t_803225\\G' AS EXEC_TEST_SQL; --- SHOW CREATE TABLE t_803225\G - --- SELECT 'INSERT INTO t_803225 VALUES --- (?, rand(), rand(), ROUND(RAND()*1024000), ROUND(RAND()*1024000)) ... ' AS EXEC_TEST_SQL; -INSERT INTO t_803225 VALUES +-- INSERT ROWS +INSERT INTO t_8444 VALUES (1, rand(), rand(), ROUND(RAND()*1024000), ROUND(RAND()*1024000)), (2, rand(), rand(), ROUND(RAND()*1024000), ROUND(RAND()*1024000)), (4, rand(), rand(), ROUND(RAND()*1024000), ROUND(RAND()*1024000)), @@ -78,73 +65,105 @@ SELECT ' ' FROM DUAL; SELECT ' ' FROM DUAL; --- 3. Oracle syntax -SELECT '--- 3. checking SELECT ANY/ALL FROM t_803225 ---' AS STAGE_3; --- SELECT 'SELECT * FROM t_803225 WHERE id < ALL(4,8,16);' AS EXEC_TEST_SQL; -SELECT COUNT(*) INTO @ROWS FROM t_803225 WHERE id < ALL(4,8,16); +-- 3. Oracle语法 +SELECT '--- 3. checking SELECT ANY/ALL FROM t_8444 ---' AS STAGE_3; +-- ALL Syntax +SELECT COUNT(*) INTO @ROWS FROM t_8444 WHERE id < ALL(4,8,16); SELECT IF(@ROWS = 2, 'OK, FOUND 2 ROWS', CONCAT('NG, FOUND ', @ROWS, ' ROWS')) AS '3.1 check: FOUND_ROWS(ALL)' FROM DUAL; SELECT ' ' FROM DUAL; --- SELECT 'SELECT * FROM t_803225 WHERE id < ANY(4,8,16);' AS EXEC_TEST_SQL; -SELECT COUNT(*) INTO @ROWS FROM t_803225 WHERE id < ANY(4,8,16); +-- ANY Syntax +SELECT COUNT(*) INTO @ROWS FROM t_8444 WHERE id < ANY(4,8,16); SELECT IF(@ROWS = 4, 'OK, FOUND 4 ROWS', CONCAT('NG, FOUND ', @ROWS, ' ROWS')) AS '3.2 check: FOUND_ROWS(ANY)' FROM DUAL; SELECT ' ' FROM DUAL; --- SELECT 'DROP TABLE IF EXISTS t_803225;'; -DROP TABLE IF EXISTS t_803225; - --- SELECT '--- SELECT SYSDATE IN DEFAULT MODE ---'; --- SELECT 'SELECT SYSDATE(), SYSDATE;' AS EXEC_TEST_SQL; --- SET sql_mode = DEFAULT; --- SELECT SYSDATE(), SYSDATE; - --- SELECT '--- SELECT SYSDATE IN ORACLE MODE ---'; --- SELECT 'SET sql_mode = ORACLE;' AS EXEC_TEST_SQL; +-- SET SQL_MODE = ORACLE SET sql_mode = ORACLE; SELECT IF(@@sql_mode = 'PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ONLY_FULL_GROUP_BY,ORACLE,STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION', 'OK, ORACLE MODE', 'NG, NOT ORACLE MODE') AS '3.3 check: SQL_MODE' FROM DUAL; SELECT ' ' FROM DUAL; SELECT '3.4 check: SYSDATE IN ORACLE MODE' AS '3.4 check: SYSDATE IN ORACLE MODE' FROM DUAL; --- SELECT 'SELECT SYSDATE(), SYSDATE;' AS EXEC_TEST_SQL; + +-- SYSDATE SELECT SYSDATE(), SYSDATE; SELECT ' ' FROM DUAL; --- SELECT 'SET sql_mode = DEFAULT;' AS EXEC_TEST_SQL; +-- SET SQL_MODE = DEFAULT SET sql_mode = DEFAULT; SELECT IF(@@sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION', 'OK, DEFAULT MODE RESET SUCC', 'NG, DEFAULT MODE RESET FAIL') AS '3.5 check: SQL_MODE' FROM DUAL; SELECT ' ' FROM DUAL; SELECT ' ' FROM DUAL; +-- DECLARE...BEGIN Syntax +SELECT ' ' FROM DUAL; +SELECT '3.6 check: DECLARE...BEGIN Syntax' AS '3.6 check: DECLARE...BEGIN Syntax' FROM DUAL; +SET sql_mode = ORACLE; +DELIMITER // +DECLARE +BEGIN + SELECT 'Hi GreatSQL' INTO @ret; +END; // +DELIMITER ; +SET sql_mode = DEFAULT; +SELECT IF(@ret = 'Hi GreatSQL', "OK, SUPPORT DECLARE...BEGIN Syntax", "NG, NOT SUPPORT DECLARE...BEGIN Syntax") AS '3.6 check: DECLARE...BEGIN Syntax' FROM DUAL; + + +-- 4. Turbo引擎 +SELECT '--- 4. checking Turbo ENGINE ---' AS STAGE_4; + +-- INSTALL & CHECK Turbo ENGINE +INSTALL PLUGIN Turbo SONAME 'turbo.so'; +SELECT IF(PLUGIN_NAME="turbo", "OK, SUPPORT Turbo ENGINE", "NG, NOT SUPPORT Turbo ENGINE") AS '4.1 check: Turbo ENGINE' FROM information_schema.PLUGINS WHERE PLUGIN_NAME='turbo' AND PLUGIN_STATUS='ACTIVE'; +SELECT ' ' FROM DUAL; + --- 4. Rapid ENGINE +SELECT '4. check: EXPLAIN SELECT USING Turbo' FROM DUAL; + +DROP TABLE IF EXISTS t_8444; +CREATE TABLE t_8444( +id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, +c1 VARCHAR2(30) NOT NULL DEFAULT '', +c2 PLS_INTEGER UNSIGNED NOT NULL DEFAULT 0 +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +-- INSERT ROWS +INSERT INTO t_8444 VALUES +(1, rand(), ROUND(RAND()*1024000)), +(2, rand(), ROUND(RAND()*1024000)), +(4, rand(), ROUND(RAND()*1024000)), +(8, rand(), ROUND(RAND()*1024000)), +(16, rand(), ROUND(RAND()*1024000)), +(32, rand(), ROUND(RAND()*1024000)); + +EXPLAIN FORMAT=TREE SELECT /*+ SET_VAR(turbo_enable=ON) SET_VAR(turbo_cost_threshold=0) */ * FROM t_8444; +SELECT ' ' FROM DUAL; + +SELECT '4. UNINSTALL Turbo ENGINE' FROM DUAL; +UNINSTALL PLUGIN turbo; + +-- DROP TABLE +DROP TABLE IF EXISTS t_8444; + +-- 5. Rapid引擎 SELECT '--- 4. checking RAPID ENGINE ---' AS STAGE_4; --- SELECT 'INSTALL PLUGIN Rapid SONAME "ha_rapid.so"'; -INSTALL PLUGIN Rapid SONAME 'ha_rapid.so'; --- SELECT 'SELECT ENGINE FROM ENGINES WHERE ENGINE = 'Rapid' AND SUPPORT = 'YES';'; +-- INSTALL & CHECK Rapid ENGINE +INSTALL PLUGIN Rapid SONAME 'ha_rapid.so'; SELECT IF(ENGINE = "Rapid", "OK, SUPPORT Rapid ENGINE", "NG, NOT SUPPORT Rapid ENGINE") AS '4.1 check: Rapid ENGINE' FROM information_schema.ENGINES WHERE ENGINE = 'Rapid' AND SUPPORT = 'YES'; SELECT ' ' FROM DUAL; --- SELECT ' --- CREATE TABLE `t_803225_rapid` ( --- `id` int unsigned NOT NULL AUTO_INCREMENT, --- `c1` int unsigned NOT NULL DEFAULT \'0\', --- `c2` varchar(30) NOT NULL DEFAULT \'\', --- PRIMARY KEY (`id`) --- ) ENGINE=InnoDB;'; - -CREATE TABLE `t_803225_rapid` ( +DROP TABLE IF EXISTS `t_8444_rapid`; +CREATE TABLE IF NOT EXISTS `t_8444_rapid` ( `id` int unsigned NOT NULL AUTO_INCREMENT, `c1` int unsigned NOT NULL DEFAULT '0', `c2` varchar(30) NOT NULL DEFAULT '', PRIMARY KEY (`id`) ) ENGINE=InnoDB; +-- SECONDARY_ENGINE +ALTER TABLE t_8444_rapid SECONDARY_ENGINE = rapid; --- SELECT 'ALTER TABLE t_803225_rapid SECONDARY_ENGINE = rapid;'; -ALTER TABLE t_803225_rapid SECONDARY_ENGINE = rapid; - --- SELECT 'INSERT INTO t_803225_rapid VALUES(?, RAND()*1024000, RAND()*1024000) ... ' AS EXEC_TEST_SQL; -INSERT INTO t_803225_rapid VALUES +-- INSERT ROWS +INSERT INTO t_8444_rapid VALUES (1, RAND()*1024000, RAND()*1024000), (2, RAND()*1024000, RAND()*1024000), (4, RAND()*1024000, RAND()*1024000), @@ -154,55 +173,59 @@ INSERT INTO t_803225_rapid VALUES SELECT IF(ROW_COUNT() = 6, 'OK, INSERT 6 ROWS', CONCAT('NG, INSERT ', ROW_COUNT(), ' ROWS')) AS '4.2 check: INSERT_ROWS' FROM DUAL; SELECT ' ' FROM DUAL; --- SELECT 'ALTER TABLE t_803225_rapid SECONDARY_LOAD;'; -ALTER TABLE t_803225_rapid SECONDARY_LOAD; - --- SELECT 'SHOW CREATE TABLE t_803225_rapid\\G'; --- SHOW CREATE TABLE t_803225_rapid\G +-- SECONDARY_LOAD +ALTER TABLE t_8444_rapid SECONDARY_LOAD; --- SELECT 'SHOW TABLE STATUS like \'t_803225_rapid\'\\G'; --- SHOW TABLE STATUS like 't_803225_rapid'\G -SELECT IF(CREATE_OPTIONS = 'SECONDARY_ENGINE="rapid" SECONDARY_LOAD="1"', "OK, t_803225_rapid IS A Rapid TABLE", "NG, t_803225_rapid IS NOT A Rapid TABLE") AS '4.3 check: t_803225_rapid' FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'greatsql_803225' AND TABLE_NAME = 't_803225_rapid'; +SELECT IF(CREATE_OPTIONS = 'SECONDARY_ENGINE="rapid" SECONDARY_LOAD="1"', "OK, t_8444_rapid IS A Rapid TABLE", "NG, t_8444_rapid IS NOT A Rapid TABLE") AS '4.3 check: t_8444_rapid' FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'greatsql_8444' AND TABLE_NAME = 't_8444_rapid'; SELECT ' ' FROM DUAL; --- SELECT 'SET use_secondary_engine = ON; SET secondary_engine_cost_threshold = 0;'; --- SET use_secondary_engine = ON; SET secondary_engine_cost_threshold = 0; - --- SELECT 'EXPLAIN SELECT * FROM t_803225_rapid;'; +-- EXPLAIN SELECT '4.4 check: EXPLAIN SELECT FROM Rapid TABLE' FROM DUAL; -EXPLAIN SELECT /*+ SET_VAR(use_secondary_engine=2) SET_VAR(secondary_engine_cost_threshold=0) */ * FROM t_803225_rapid; +EXPLAIN SELECT /*+ SET_VAR(use_secondary_engine=2) SET_VAR(secondary_engine_cost_threshold=0) */ * FROM t_8444_rapid; SELECT ' ' FROM DUAL; --- SELECT 'SELECT COUNT(*) FROM t_803225_rapid;'; -SELECT /*+ SET_VAR(use_secondary_engine=1) SET_VAR(secondary_engine_cost_threshold=0) */ COUNT(*) INTO @ROWS FROM t_803225_rapid; +-- FORCE USING Rapid ENGINE +SELECT /*+ SET_VAR(use_secondary_engine=1) SET_VAR(secondary_engine_cost_threshold=0) */ COUNT(*) INTO @ROWS FROM t_8444_rapid; SELECT IF(@ROWS = 6, 'OK, FOUND 6 ROWS', CONCAT('NG, FOUND ', @ROWS, ' ROWS')) AS '4.4 check: FOUND ROWS FROM Rapid TABLE' FROM DUAL; SELECT ' ' FROM DUAL; +UNINSTALL PLUGIN rapid; --- 5. parallel load data +-- 5. 并行LOAD DATA SELECT '--- 5. checking PARALLEL LOAD DATA ---' AS STAGE_5; --- SELECT VARIABLE_NAME FROM performance_schema.global_variables WHERE VARIABLE_NAME = 'gdb_parallel_load_workers'; -SELECT IF(VARIABLE_NAME = "gdb_parallel_load_workers", "OK, PARALLEL LOAD DATA", "NG, PARALLEL LOAD DATA") AS 'check: PARALLEL LOAD DATA' FROM performance_schema.global_variables where variable_name = 'gdb_parallel_load_workers'; +SELECT IF(VARIABLE_NAME = "gdb_parallel_load_workers", "OK, PARALLEL LOAD DATA", "NG, PARALLEL LOAD DATA") AS '5.1 check: PARALLEL LOAD DATA' FROM performance_schema.global_variables where variable_name = 'gdb_parallel_load_workers'; +SELECT ' ' FROM DUAL; + +-- 支持无主键并发LOAD DATA优化 +SELECT IF(VARIABLE_NAME = "innodb_optimize_no_pk_parallel_load", "OK, PARALLEL LOAD DATA OPTIMIZE WHEN NON-PK", "NG, PARALLEL LOAD DATA OPTIMIZE WHEN NON-PK") AS '5.2 check: PARALLEL LOAD DATA OPTIMIZE WHEN NON-PK' FROM performance_schema.global_variables where variable_name = 'innodb_optimize_no_pk_parallel_load'; SELECT ' ' FROM DUAL; SELECT ' ' FROM DUAL; --- 6. clone encrypt +-- 6. Clone功能 SELECT '--- 6. checking clone encrypt ---' AS STAGE_6; --- SELECT 'INSTALL PLUGIN CLONE SONAME "mysql_clone.so"'; INSTALL PLUGIN CLONE SONAME 'mysql_clone.so'; -SELECT IF(PLUGIN_NAME = 'clone', 'OK, PLUGIN clone ACTIVE', 'NG, PLUGIN clone NOT ACTIVE') AS 'check: clone PLUGIN' FROM information_schema.PLUGINS WHERE PLUGIN_NAME = 'clone' AND PLUGIN_STATUS = "ACTIVE"; +SELECT IF(PLUGIN_NAME = 'clone', 'OK, PLUGIN clone ACTIVE', 'NG, PLUGIN Clone NOT ACTIVE') AS 'check: Clone PLUGIN' FROM information_schema.PLUGINS WHERE PLUGIN_NAME = 'clone' AND PLUGIN_STATUS = "ACTIVE"; SELECT ' ' FROM DUAL; -SELECT IF(VARIABLE_NAME = "clone_encrypt_key_path", "OK, SUPPORT clone encrypt", "NG, NOT SUPPORT clone encrypt") AS 'check: PARALLEL LOAD DATA' FROM performance_schema.global_variables where variable_name = 'clone_encrypt_key_path'; +SELECT IF(VARIABLE_NAME = "clone_encrypt_key_path", "OK, SUPPORT Clone encrypt", "NG, NOT SUPPORT Clone encrypt") AS 'check: Clone encrypt' FROM performance_schema.global_variables where variable_name = 'clone_encrypt_key_path'; SELECT ' ' FROM DUAL; + +INSTALL COMPONENT "file://component_mysqlbackup"; +SELECT IF(component_urn = 'file://component_mysqlbackup', "OK, SUPPORT Clone increment backup", "NG, NOT SUPPORT Clone increment backup") AS "check: Clone increment backup" FROM mysql.component WHERE component_urn = 'file://component_mysqlbackup'; SELECT ' ' FROM DUAL; +SELECT IF(VARIABLE_NAME = "clone_file_compress", "OK, SUPPORT Clone compressed", "NG, NOT SUPPORT Clone compressed") AS 'check: Clone compressed' FROM performance_schema.global_variables where variable_name = 'clone_file_compress'; +SELECT ' ' FROM DUAL; +SELECT ' ' FROM DUAL; +UNINSTALL COMPONENT "file://component_mysqlbackup"; +UNINSTALL PLUGIN clone; --- 7. MGR +-- 7. MGR特性 SELECT '--- 7. checking MGR ---' AS STAGE_7; -- SELECT 'INSTALL PLUGIN group_replication SONAME "group_replication.so"'; INSTALL PLUGIN group_replication SONAME "group_replication.so"; +SET GLOBAL super_read_only = OFF; -- zone id SELECT IF(VARIABLE_NAME = "group_replication_zone_id", "OK, SUPPORT MGR zone_id", "NG, NOT SUPPORT MGR zone_id") AS '7.1 check: MGR zone_id' FROM performance_schema.global_variables where variable_name = 'group_replication_zone_id'; @@ -214,6 +237,9 @@ SELECT ' ' FROM DUAL; SELECT IF(VARIABLE_NAME = "group_replication_primary_election_mode", "OK, SUPPORT MGR elect_mode", "NG, NOT SUPPORT MGR elect_mode") AS '7.3 check: MGR elect_mode' FROM performance_schema.global_variables where variable_name = 'group_replication_primary_election_mode'; SELECT ' ' FROM DUAL; +SELECT IF(VARIABLE_NAME = "group_replication_donor_threshold", "OK, SUPPORT MGR Donor threshold", "NG, NOT SUPPORT MGR Donor threshold") AS '7.4 check: MGR Donor threshold' FROM performance_schema.global_variables where variable_name = 'group_replication_donor_threshold'; +SELECT ' ' FROM DUAL; + -- SELECT '--- checking greatdb_ha ---'; -- SELECT 'INSTALL PLUGIN greatdb_ha SONAME "greatdb_ha.so"'; INSTALL PLUGIN greatdb_ha SONAME "greatdb_ha.so"; @@ -222,8 +248,64 @@ SELECT ' ' FROM DUAL; SELECT IF(VARIABLE_NAME = "greatdb_ha_mgr_read_vip_floating_type", "OK, SUPPORT greatdb_ha vip_floating", "NG, NOT SUPPORT greatdb_ha vip_floating") AS '7.5 check: greatdb_ha vip_floating' FROM performance_schema.global_variables where variable_name = 'greatdb_ha_mgr_read_vip_floating_type'; SELECT ' ' FROM DUAL; +SELECT ' ' FROM DUAL; +UNINSTALL PLUGIN greatdb_ha; +UNINSTALL PLUGIN group_replication; --- 8. cleanup -SELECT '--- 8. clean up ---' AS STAGE_8; -DROP DATABASE IF EXISTS greatsql_803225; +-- 8. 安全特性检查 +-- 支持审计日志写表 & 用户的登录信息记录 +-- basedir=/usr, REPLACE IF NEEDED +USE mysql; +SOURCE /usr/local/GreatSQL/share/audit_log_filter_linux_install.sql +SELECT IF(VARIABLE_NAME = "audit_log_to_table", "OK, SUPPORT audit_log_to_table", "NG, NOT SUPPORT audit_log_to_table") AS '8.1 check: audit_log_to_table' FROM performance_schema.global_variables where variable_name = 'audit_log_to_table'; +SELECT ' ' FROM DUAL; + +SELECT IF(name = 'audit_login_messages', "OK, SUPPORT last login msg", "NG, NOT SUPPORT last login msg") AS '8.2 check: last login msg' FROM mysql.func WHERE name = 'audit_login_messages'; +SELECT ' ' FROM DUAL; + +-- 支持基于策略的数据脱敏 +-- basedir=/usr, REPLACE IF NEEDED +SOURCE /usr/local/GreatSQL/share/sys_masking.sql; +SELECT IF(COUNT(*)=4, "OK, SUPPORT data masking", "NG, NOT SUPPORT data masking") AS '8.3 check: data masking' FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='sys_masking'; +SELECT ' ' FROM DUAL; +SELECT ' ' FROM DUAL; +UNINSTALL COMPONENT "file://component_audit_log_filter"; + + +-- 9. 优化功能检查 +-- 支持非阻塞式DDL +SELECT IF(VARIABLE_NAME = "lock_ddl_polling_mode", "OK, nonblocking DDL", "NG, NOT SUPPORT nonblocking DDL") AS '9.1 check: nonblocking DDL' FROM performance_schema.global_variables where variable_name = 'lock_ddl_polling_mode'; +SELECT ' ' FROM DUAL; + +-- 支持NUMA亲和性优化 +SELECT IF(VARIABLE_NAME = "sched_affinity_numa_aware", "OK, affinity_numa_aware", "NG, NOT SUPPORT affinity_numa_aware") AS '9.2 check: affinity_numa_aware' FROM performance_schema.global_variables where variable_name = 'sched_affinity_numa_aware'; +SELECT ' ' FROM DUAL; + +-- 支持Binlog读取限速 +SELECT IF(VARIABLE_NAME = "rpl_read_binlog_speed_limit", "OK, Binlog speed limit", "NG, NOT SUPPORT Binlog speed limit") AS 'check: Binlog speed limit' FROM performance_schema.global_variables where variable_name = 'rpl_read_binlog_speed_limit'; +SELECT ' ' FROM DUAL; + +SELECT IF(VARIABLE_NAME = "Rpl_data_speed", "OK, Binlog speed limit status", "NG, NOT SUPPORT Binlog speed limit status") AS 'check: Binlog speed limit status' FROM performance_schema.global_status where variable_name = 'Rpl_data_speed'; +SELECT ' ' FROM DUAL; +SELECT ' ' FROM DUAL; + +-- 10. InnoDB Page压缩支持zstd +SELECT '--- 11. checking InnoDB Page COMPRSSION USING Zstd ---' AS STAGE_11; +USE greatsql_8444; + +DROP TABLE IF EXISTS t_8444; +CREATE TABLE t_8444( +id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, +c1 CLOB NOT NULL, +c2 VARCHAR2(30) NOT NULL DEFAULT '', +c3 NUMBER UNSIGNED NOT NULL DEFAULT 0, +c4 PLS_INTEGER UNSIGNED NOT NULL DEFAULT 0 +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMPRESSION="zstd"; +SELECT IF(CREATE_OPTIONS = 'COMPRESSION="zstd"', "OK, InnoDB Page COMPONENT USING Zstd", "NG, NOT SUPPORT InnoDB Page COMPONENT USING Zstd") AS 'check: InnoDB Page COMPONENT USING Zstd' FROM information_schema.TABLES WHERE TABLE_SCHEMA='greatsql_8444' AND TABLE_NAME='t_8444'; +SELECT ' ' FROM DUAL; +SELECT ' ' FROM DUAL; + +-- 11. 清理 +SELECT '--- 8. clean up ---' AS STAGE_8; +DROP DATABASE IF EXISTS greatsql_8444; diff --git a/GreatSQL/my.cnf b/GreatSQL/my.cnf index 809e657..ae4f498 100644 --- a/GreatSQL/my.cnf +++ b/GreatSQL/my.cnf @@ -1,159 +1,176 @@ -#my.cnf +# +# my.cnf example for GreatSQL 8.4.4-4 +# +# 下面参数选项设置仅作为参考 +# [client] -socket = /data/GreatSQL/mysql.sock +socket=/data/GreatSQL/mysql.sock + [mysql] loose-skip-binary-as-hex prompt="(\\D)[\\u@GreatSQL][\\d]> " no-auto-rehash -[mysqld] -user = mysql -port = 3306 -server_id = MYSQL_SID -basedir = /usr/ -datadir = /data/GreatSQL -socket = /data/GreatSQL/mysql.sock -pid-file = mysql.pid -character-set-server = UTF8MB4 -skip_name_resolve = 1 -#若你的MySQL数据库主要运行在境外,请务必根据实际情况调整本参数 -default_time_zone = "+8:00" -#表名大小写设定,非常重要,初始化完后不能再修改,通常建议设置为1 -lower_case_table_names = LOWER_CASE_TABLE_NAMES -#performance setttings -lock_wait_timeout = 3600 -open_files_limit = 65535 -back_log = 1024 -max_connections = 512 -max_connect_errors = 1000000 -table_open_cache = 1024 -table_definition_cache = 1024 -thread_stack = 512K -sort_buffer_size = 4M -join_buffer_size = 4M -read_buffer_size = 8M -read_rnd_buffer_size = 4M -bulk_insert_buffer_size = 64M -thread_cache_size = 768 -interactive_timeout = 600 -wait_timeout = 600 -tmp_table_size = 32M -max_heap_table_size = 32M -temptable_max_ram = 1G +[mysqld] +user=mysql +port=3306 +server_id=MYSQL_SID +basedir=/usr/local/GreatSQL +datadir=/data/GreatSQL +socket=/data/GreatSQL/mysql.sock +pid-file=mysql.pid +character-set-server=UTF8MB4 +skip_name_resolve=ON +default_time_zone="+8:00" +bind_address="0.0.0.0" +secure_file_priv=/data/GreatSQL +lower_case_table_names=LOWER_CASE_TABLE_NAMES +mysql_native_password=ON -#log settings -log_timestamps = SYSTEM -log_error = /data/GreatSQL/error.log -log_error_verbosity = 3 -slow_query_log = 1 -log_slow_extra = 1 -slow_query_log_file = /data/GreatSQL/slow.log -long_query_time = 0.1 -log_queries_not_using_indexes = 1 -log_throttle_queries_not_using_indexes = 60 -min_examined_row_limit = 100 -log_slow_admin_statements = 1 -log_slow_slave_statements = 1 -log_bin = /data/GreatSQL/binlog -binlog_format = ROW -sync_binlog = 1 -binlog_cache_size = 4M -max_binlog_size = 1G -binlog_rows_query_log_events = 1 -binlog_expire_logs_seconds = 604800 -#MySQL 8.0.22前,想启用MGR的话,需要设置binlog_checksum=NONE才行 -binlog_checksum = CRC32 -gtid_mode = ON -enforce_gtid_consistency = TRUE +# Performance +lock_wait_timeout=3600 +open_files_limit=65535 +back_log=1024 +max_connections=512 +max_connect_errors=1000000 +table_open_cache=1024 +table_definition_cache=1024 +sort_buffer_size=4M +join_buffer_size=4M +read_buffer_size=8M +read_rnd_buffer_size=4M +bulk_insert_buffer_size=64M +thread_cache_size=768 +interactive_timeout=600 +wait_timeout=600 +tmp_table_size=32M +max_heap_table_size=32M +max_allowed_packet=64M +net_buffer_shrink_interval=180 +sql_generate_invisible_primary_key=ON +loose-lock_ddl_polling_mode=ON +loose-lock_ddl_polling_runtime=200 -#myisam settings -key_buffer_size = 32M -myisam_sort_buffer_size = 128M +# Logs +log_timestamps=SYSTEM +log_error=error.log +log_error_verbosity=3 +slow_query_log=ON +log_slow_extra=ON +slow_query_log_file=slow.log +long_query_time=0.01 +log_queries_not_using_indexes=ON +log_throttle_queries_not_using_indexes=60 +min_examined_row_limit=100 +log_slow_admin_statements=ON +log_slow_replica_statements=ON +log_slow_verbosity=FULL +log_bin=binlog +binlog_format=ROW +sync_binlog=1 +binlog_cache_size=4M +max_binlog_cache_size=6G +max_binlog_size=1G +binlog_space_limit=500G +binlog_rows_query_log_events=ON +binlog_expire_logs_seconds=604800 +binlog_checksum=CRC32 +gtid_mode=ON +enforce_gtid_consistency=ON -#replication settings -#master_info_repository = TABLE -#relay_log_info_repository = TABLE -relay_log_recovery = 1 -slave_parallel_type = LOGICAL_CLOCK -#可以设置为逻辑CPU数量的2倍 -slave_parallel_workers = 4 -binlog_transaction_dependency_tracking = WRITESET -slave_preserve_commit_order = 1 -slave_checkpoint_period = 2 +# Replication +relay-log=relaylog +relay_log_recovery=ON +replica_parallel_type=LOGICAL_CLOCK +replica_parallel_workers=4 +replica_preserve_commit_order=ON +replica_checkpoint_period=2 +loose-rpl_read_binlog_speed_limit=100 -#parallel query -loose-force_parallel_execute = ON +# Disalbe InnoDB PQ +loose-force_parallel_execute=OFF -#parallel load data -loose-gdb_parallel_load = 1 +# Parallel LOAD DATA +loose-gdb_parallel_load=ON +loose-innodb_optimize_no_pk_parallel_load=ON -#rapid engine -loose-plugin_load_add = 'ha_rapid.so' -loose-rapid_memory_limit = 128M -loose-rapid_worker_threads = 4 -loose-rapid_hash_table_memory_limit = 10 -loose-secondary_engine_parallel_load_workers = 4 +# Rapid +#loose-plugin_load_add='ha_rapid.so' +loose-rapid_memory_limit=128M +loose-rapid_worker_threads=4 +loose-rapid_hash_table_memory_limit=10 +loose-secondary_engine_parallel_load_workers=4 -#mgr settings -loose-plugin_load_add = 'mysql_clone.so' -loose-plugin_load_add = 'group_replication.so' -loose-group_replication_group_name = MYSQL_MGR_NAME -loose-group_replication_view_change_uuid = MYSQL_MGR_VIEWID -#MGR本地节点IP:PORT,请自行替换 -loose-group_replication_local_address = MYSQL_MGR_LOCAL -#MGR集群所有节点IP:PORT,请自行替换 -loose-group_replication_group_seeds = MYSQL_MGR_SEEDS -loose-group_replication_start_on_boot = START_MGR -loose-group_replication_bootstrap_group = BOOTSTRAP_MGR -loose-group_replication_exit_state_action = READ_ONLY -loose-group_replication_flow_control_mode = "DISABLED" -loose-group_replication_single_primary_mode = SINGLE_PRIMARY -loose-group_replication_majority_after_mode = ON -loose-group_replication_communication_max_message_size = 10M -loose-group_replication_arbitrator = MYSQL_MGR_ARBITRATOR -loose-group_replication_single_primary_fast_mode = SINGLE_PRIMARY -loose-group_replication_request_time_threshold = 100 -loose-group_replication_primary_election_mode = GTID_FIRST -loose-group_replication_unreachable_majority_timeout = 30 -loose-group_replication_member_expel_timeout = 5 -loose-group_replication_autorejoin_tries = 288 -loose-group_replication_recovery_get_public_key = 1 -report_host = REPORT_HOST +# Clone +loose-plugin_load_add='mysql_clone.so' -#innodb settings -innodb_buffer_pool_size = MYSQL_IBP -innodb_buffer_pool_instances = 8 -innodb_data_file_path = ibdata1:12M:autoextend -innodb_flush_log_at_trx_commit = 1 -innodb_log_buffer_size = 32M -#innodb_log_file_size = 48M -#innodb_log_files_in_group = 3 -innodb_redo_log_capacity = 8M -innodb_doublewrite_files = 2 -innodb_max_undo_log_size = 4G -# 根据您的服务器IOPS能力适当调整 -# 一般配普通SSD盘的话,可以调整到 10000 - 20000 -# 配置高端PCIe SSD卡的话,则可以调整的更高,比如 50000 - 80000 -innodb_io_capacity = 4000 -innodb_io_capacity_max = 8000 -innodb_open_files = 65534 -#innodb_flush_method = O_DIRECT -innodb_lru_scan_depth = 4000 -innodb_lock_wait_timeout = 10 -innodb_rollback_on_timeout = 1 -innodb_print_all_deadlocks = 1 -innodb_online_alter_log_max_size = 4G -innodb_print_ddl_logs = 0 -innodb_status_file = 1 -#注意: 开启 innodb_status_output & innodb_status_output_locks 后, 可能会导致log_error文件增长较快 -innodb_status_output = 0 -innodb_status_output_locks = 1 -innodb_sort_buffer_size = 67108864 +# MGR +loose-plugin_load_add='group_replication.so' +loose-group_replication_group_name=MYSQL_MGR_NAME +loose-group_replication_view_change_uuid=MYSQL_MGR_VIEWID +loose-group_replication_local_address=MYSQL_MGR_LOCAL +loose-group_replication_group_seeds=MYSQL_MGR_SEEDS +loose-group_replication_communication_stack="XCOM" +loose-group_replication_recovery_use_ssl=OFF +loose-group_replication_ssl_mode=DISABLED +loose-group_replication_start_on_boot=START_MGR +loose-group_replication_bootstrap_group=BOOTSTRAP_MGR +loose-group_replication_exit_state_action=READ_ONLY +loose-group_replication_flow_control_mode="DISABLED" +loose-group_replication_single_primary_mode=SINGLE_PRIMARY +loose-group_replication_enforce_update_everywhere_checks=EVERYWHERE_CHECKS +loose-group_replication_majority_after_mode=ON +loose-group_replication_communication_max_message_size=10M +loose-group_replication_arbitrator=MYSQL_MGR_ARBITRATOR +loose-group_replication_single_primary_fast_mode=FAST_MODE +loose-group_replication_request_time_threshold=100 +loose-group_replication_primary_election_mode=GTID_FIRST +loose-group_replication_unreachable_majority_timeout=0 +loose-group_replication_member_expel_timeout=5 +loose-group_replication_autorejoin_tries=288 +loose-group_replication_recovery_get_public_key=ON +loose-group_replication_donor_threshold=100 -#innodb monitor settings -#innodb_monitor_enable = "module_innodb,module_server,module_dml,module_ddl,module_trx,module_os,module_purge,module_log,module_lock,module_buffer,module_index,module_ibuf_system,module_buffer_page,module_adaptive_hash" +# greatdb_ha +#loose-plugin_load_add='greatdb_ha.so' +#loose-greatdb_ha_enable_mgr_vip=OFF +#loose-greatdb_ha_mgr_vip_nic='eth0' +#loose-greatdb_ha_mgr_vip_ip='172.16.0.252' +#loose-greatdb_ha_mgr_vip_mask='255.255.255.0' +#loose-greatdb_ha_port=33062 +#loose-greatdb_ha_mgr_read_vip_ips="172.16.0.251,172.16.0.252" +#loose-greatdb_ha_mgr_read_vip_floating_type="TO_ANOTHER_SECONDARY" +#loose-greatdb_ha_send_arp_packge_times=5 +#loose-greatdb_ha_mgr_exit_primary_kill_connection_mode=OFF +report_host=REPORT_HOST +report_port=3306 -#pfs settings -performance_schema = 1 -#performance_schema_instrument = '%memory%=on' -performance_schema_instrument = '%lock%=on' +# InnoDB +innodb_buffer_pool_size=MYSQL_IBP +innodb_buffer_pool_instances=8 +innodb_data_file_path=ibdata1:12M:autoextend +innodb_flush_log_at_trx_commit=1 +innodb_log_buffer_size=32M +innodb_redo_log_capacity=128M +innodb_doublewrite_files=2 +innodb_max_undo_log_size=4G +innodb_io_capacity=4000 +innodb_io_capacity_max=8000 +innodb_open_files=65534 +innodb_flush_method=O_DIRECT +innodb_lru_scan_depth=4000 +innodb_lock_wait_timeout=10 +innodb_rollback_on_timeout=ON +innodb_print_all_deadlocks=ON +innodb_online_alter_log_max_size=4G +innodb_print_ddl_logs=ON +innodb_status_file=ON +innodb_status_output=OFF +innodb_status_output_locks=ON +innodb_sort_buffer_size=64M +innodb_adaptive_hash_index=OFF +innodb_numa_interleave=OFF +innodb_spin_wait_delay=20 +innodb_print_lock_wait_timeout_info=ON +kill_idle_transaction=300 +innodb_data_file_async_purge=ON diff --git a/README.md b/README.md index fb65253..febbb3e 100644 --- a/README.md +++ b/README.md @@ -16,8 +16,6 @@ Dockerfiles可用于自定义和构建docker映像。[戳此阅读更多关于Do ## 基本信息 - 维护者: GreatSQL(greatsql@greatdb.com) - 联系人: greatsql@greatdb.com -- 最新版本:GreatSQL 8.0.32-25 -- 最后更新时间:2024-02-20 ## 镜像仓库列表 - GreatSQL,构建GreatSQL运行环境的Docker镜像