diff --git a/GreatSQL-Build/CHANGELOG.md b/GreatSQL-Build/CHANGELOG.md new file mode 100644 index 0000000..85c977d --- /dev/null +++ b/GreatSQL-Build/CHANGELOG.md @@ -0,0 +1,8 @@ +# 8.4.4-4 更新日志 + +## 2025.10.16 +* 更新到GreatSQL 8.4.4-4 +* 修改boost下载源 +* 安装依赖增加libatomic,libicu,perl,protobuf-lite等 + +[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 new file mode 100644 index 0000000..580b4cf --- /dev/null +++ b/GreatSQL-Build/Dockerfile @@ -0,0 +1,28 @@ +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 TARGETARCH +ENV OPT_DIR=/opt \ +MYSQL_UID=3306 \ +MYSQL_USER=mysql \ +GREATSQL_BUILD_DOWNLOAD_URL="https://gitee.com/GreatSQL/GreatSQL-Docker/raw/greatsql-8.4.4-4/GreatSQL-Build" \ +GREATSQL_ENV="greatsql-setenv.sh" \ +GREATSQL_BUILD_INIT="greatsql_build_init.sh" + +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} && \ +echo '[main]' > /etc/dnf/dnf.conf && \ +microdnf install -y util-linux oracle-epel-release-el8 && \ +microdnf clean all + +ENTRYPOINT ["sh"] diff --git a/GreatSQL-Build/README.md b/GreatSQL-Build/README.md new file mode 100644 index 0000000..b33ebbc --- /dev/null +++ b/GreatSQL-Build/README.md @@ -0,0 +1,143 @@ +# GreatSQL-Build Docker +--- + +## 简介 + +全自动编译GreatSQL源码,生成二进制包。 + +适用于 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镜像构建 + +在开始前,需要先准备好一个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 buildx build --platform linux/arm64,linux/amd64 -t yejr/greatsql_build . --push +``` + +在构建镜像时,会自动从服务器上下载相应的源码包文件、初始化脚本等文件,并全自动化方式完成镜像构建工作。 + +如果无法从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 + +# 进入容器,手动启动编译工作 +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 + +sh-4.4# sh ./greatsql_build_init.sh + +0. GreatSQL-Build INIT + +1. downloading sourcecode tarballs and extract + 1.1 downloading sourcecode tarballs ... +... +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 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 +``` + +可以看到已经完成编译,可以将容器中编译好的二进制包文件拷贝到宿主机上,例如: + +```shell +docker cp greatsql_build:/opt/GreatSQL-8.4.4-4-ol-glibc2.28-x86_64 /usr/local/ +``` + +如果宿主机环境也是 OracleLinux/CentOS x86_64 的话,这就可以在宿主机环境下直接使用该二进制文件包了。 + +> 编译过程中,可能会遇到网络问题(DNS解析失败、网络连接超时等)导致失败的话,多重试几次即可。 + +## 文件介绍 +- CHANGELOG.md,更新历史 +- Dockerfile,用于构建初始化 GreatSQL 编译环境。 +- greatsql-automake.sh,GreatSQL自动编译脚本,编译过程中产生的日志默认输出到 /tmp/greatsql-automake.log 中。 +- greatsql-setenv.sh,通用环境变量设置脚本 +- greatsql_build_init.sh,GreatSQL 编译调度入口脚本,该脚本中完成编译环境所需的软件包安装,并调用 greatsql-automake.sh 实现自动编译。 + +## 联系我们 +扫码关注微信公众号 + +![GreatSQL社区微信公众号二维码](https://images.gitee.com/uploads/images/2021/0802/143402_f9d6cb61_8779455.jpeg "greatsql社区-wx-qrcode-0.5m.jpg") diff --git a/GreatSQL-Build/greatsql-automake.sh b/GreatSQL-Build/greatsql-automake.sh new file mode 100755 index 0000000..6f604ff --- /dev/null +++ b/GreatSQL-Build/greatsql-automake.sh @@ -0,0 +1,202 @@ +#!/bin/bash + +. /opt/greatsql-setenv.sh + +echo " 3.1 compiling GreatSQL" + +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" + +LIBPATH="" + +function gather_libs { + local elf_path=$1 + for lib in ${LIBLIST}; do + for elf in $(find ${elf_path} -maxdepth 1 -exec file {} \; | grep 'ELF ' | cut -d':' -f1); do + IFS=$'\n' + for libfromelf in $(ldd ${elf} | grep ${lib} | awk '{print $3}'); do + lib_realpath="$(readlink -f ${libfromelf})" + lib_realpath_basename="$(basename $(readlink -f ${libfromelf}))" + lib_without_version_suffix=$(echo ${lib_realpath_basename} | awk -F"." 'BEGIN { OFS = "." }{ print $1, $2}') + + # Some libraries may have dependencies on earlier openssl libraries, such as authentication_ldap_simple.so, + # thus we need to treat them specially here, other than stripping version suffix. + if [[ "${lib_realpath_basename}" =~ ^libcrypto.so.1.0.* ]] || [[ "${lib_realpath_basename}" =~ ^libssl.so.1.0.* ]]; + then + lib_without_version_suffix=$(basename ${libfromelf}) + fi + + + if [ ! -f "lib/private/${lib_realpath_basename}" ] && [ ! -L "lib/private/${lib_realpath_basename}" ]; then + + echo "Copying lib ${lib_realpath_basename}" + cp ${lib_realpath} lib/private + + echo "Symlinking lib from ${lib_realpath_basename} to ${lib_without_version_suffix}" + cd lib/ + ln -s private/${lib_realpath_basename} ${lib_without_version_suffix} + cd - + if [ ${lib_realpath_basename} != ${lib_without_version_suffix} ]; then + cd lib/private + ln -s ${lib_realpath_basename} ${lib_without_version_suffix} + cd - + fi + + patchelf --set-soname ${lib_without_version_suffix} lib/private/${lib_realpath_basename} + + LIBPATH+=" $(echo ${libfromelf} | grep -v $(pwd))" + fi + done + unset IFS + done + done +} + +function set_runpath { + # Set proper runpath for bins but check before doing anything + local elf_path=$1 + local r_path=$2 + for elf in $(find ${elf_path} -maxdepth 1 -exec file {} \; | grep 'ELF ' | cut -d':' -f1); do + echo "Checking LD_RUNPATH for ${elf}" + if [[ -z $(patchelf --print-rpath ${elf}) ]]; then + echo "Changing RUNPATH for ${elf}" + patchelf --set-rpath ${r_path} ${elf} + fi + if [[ ! -z "${override}" ]] && [[ "${override}" == "true" ]]; then + echo "Overriding RUNPATH for ${elf}" + patchelf --set-rpath ${r_path} ${elf} + fi + done +} + +function replace_libs { + local elf_path=$1 + for libpath_sorted in ${LIBPATH}; do + for elf in $(find ${elf_path} -maxdepth 1 -exec file {} \; | grep 'ELF ' | cut -d':' -f1); do + LDD=$(ldd ${elf} | grep ${libpath_sorted}|head -n1|awk '{print $1}') + lib_realpath_basename="$(basename $(readlink -f ${libpath_sorted}))" + lib_without_version_suffix="$(echo ${lib_realpath_basename} | awk -F"." 'BEGIN { OFS = "." }{ print $1, $2}')" + if [[ ! -z $LDD ]] && [[ "${minimal}" == "false" ]]; then + echo "Replacing lib ${lib_realpath_basename} to ${lib_without_version_suffix} for ${elf}" + patchelf --replace-needed ${LDD} ${lib_without_version_suffix} ${elf} + fi + done + done +} + +function check_libs { + local elf_path=$1 + for elf in $(find ${elf_path} -maxdepth 1 -exec file {} \; | grep 'ELF ' | cut -d':' -f1); do + if ! ldd ${elf}; then + exit 1 + fi + done +} + +function link { + if [ ! -d lib/private ]; then + mkdir -p lib/private + fi + # Gather libs + for DIR in ${DIRLIST}; do + gather_libs ${DIR} + done + # Set proper runpath + export override=false + set_runpath bin '$ORIGIN/../lib/private/' + set_runpath lib '$ORIGIN/private/' + set_runpath lib/plugin '$ORIGIN/../private/' + set_runpath lib/private '$ORIGIN' + # LIBS MYSQLROUTER + unset override && export override=true && set_runpath lib/mysqlrouter/plugin '$ORIGIN/:$ORIGIN/../private/:$ORIGIN/../../private/' + unset override && export override=true && set_runpath lib/mysqlrouter/private '$ORIGIN/:$ORIGIN/../plugin/:$ORIGIN/../../private/' + # BINS MYSQLROUTER + unset override && export override=true && set_runpath bin/mysqlrouter_passwd '$ORIGIN/../lib/mysqlrouter/private/:$ORIGIN/../lib/mysqlrouter/plugin/:$ORIGIN/../lib/private/' + unset override && export override=true && set_runpath bin/mysqlrouter_plugin_info '$ORIGIN/../lib/mysqlrouter/private/:$ORIGIN/../lib/mysqlrouter/plugin/:$ORIGIN/../lib/private/' + unset override && export override=true && set_runpath bin/mysqlrouter '$ORIGIN/../lib/mysqlrouter/private/:$ORIGIN/../lib/mysqlrouter/plugin/:$ORIGIN/../lib/private/' + unset override && export override=true && set_runpath bin/mysqlrouter_keyring '$ORIGIN/../lib/mysqlrouter/private/:$ORIGIN/../lib/mysqlrouter/plugin/:$ORIGIN/../lib/private/' + # Replace libs + for DIR in ${DIRLIST}; do + replace_libs ${DIR} + done + # Make final check in order to determine any error after linkage + for DIR in ${DIRLIST}; do + check_libs ${DIR} + done +} + +rm -fr ${MAKELOG} + +cd ${OPT_DIR}/${GREATSQL_SRC} && \ +rm -fr bld && \ +mkdir bld && \ +cd bld && \ +cmake .. \ +-DBOOST_INCLUDE_DIR=${OPT_DIR}/${BOOST} \ +-DLOCAL_BOOST_DIR=${OPT_DIR}/${BOOST} \ +-DCMAKE_INSTALL_PREFIX=${DEST_DIR} \ +-DWITH_ZLIB=bundled \ +-DWITH_NUMA=ON \ +-DCMAKE_EXE_LINKER_FLAGS="${CMAKE_EXE_LINKER_FLAGS}" \ +-DCMAKE_BUILD_TYPE=RelWithDebInfo \ +-DBUILD_CONFIG=mysql_release \ +-DWITH_TOKUDB=OFF \ +-DWITH_ROCKSDB=OFF \ +-DROCKSDB_DISABLE_AVX2=1 \ +-DROCKSDB_DISABLE_MARCH_NATIVE=1 \ +-DGROUP_REPLICATION_WITH_ROCKSDB=OFF \ +-DALLOW_NO_SSE42=ON \ +-DMYSQL_MAINTAINER_MODE=OFF \ +-DFORCE_INSOURCE_BUILD=1 \ +-DCOMPILATION_COMMENT="GreatSQL, Release ${RELEASE}, Revision ${REVISION}" \ +-DMAJOR_VERSION=${MAJOR_VERSION} -DMINOR_VERSION=${MINOR_VERSION} -DPATCH_VERSION=${PATCH_VERSION} \ +-DWITH_NDB=OFF \ +-DWITH_NDBCLUSTER_STORAGE_ENGINE=OFF \ +-DWITH_NDBCLUSTER=OFF \ +-DWITH_UNIT_TESTS=OFF \ +-DWITH_SSL=system \ +-DWITH_SYSTEMD=ON \ +-DWITH_AUTHENTICATION_LDAP=OFF \ +-DWITH_PAM=1 \ +-DWITH_LIBEVENT=bundled \ +-DWITH_LDAP=system \ +-DWITH_SYSTEM_LIBS=ON \ +-DWITH_LZ4=bundled \ +-DWITH_PROTOBUF=bundled \ +-DWITH_RAPIDJSON=bundled \ +-DWITH_ICU=bundled \ +-DWITH_READLINE=system \ +-DWITH_ZSTD=bundled \ +-DWITH_FIDO=bundled \ +-DWITH_KEYRING_VAULT=ON \ +>> ${MAKELOG} 2>&1 && \ +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 + +echo " 3.3 make dynamic link for GreatSQL" +# strip binaries to get minimal package +# 如果想生成minial包,就取消195-204行注释 +#minimal=true +#echo "minimal = ${minimal}" >> ${MAKELOG} 2>&1 +#echo "link ${DEST_DIR}-minimal" >> ${MAKELOG} 2>&1 +#( +# cp -rp ${DEST_DIR} ${DEST_DIR}-minimal +# cd ${DEST_DIR}-minimal +# find . -type f -exec file '{}' \; | grep ': ELF ' | cut -d':' -f1 | xargs strip --strip-unneeded +# link >> ${MAKELOG} 2>&1 +#) +#如果要打包压缩,就把下面两行注释去掉 +#tar -cf ${DEST_DIR}-minimal.tar ${DEST_DIR}-minimal +#xz -9 -f -T${MAKE_JOBS} ${DEST_DIR}-minimal.tar ${DEST_DIR}-minimal + +minimal=false +( + cd ${DEST_DIR} + link >> ${MAKELOG} 2>&1 +) +#如果要打包压缩,就把下面两行注释去掉 +#tar -cf ${DEST_DIR}.tar ${DEST_DIR} +#xz -9 -f -T${MAKE_JOBS} ${DEST_DIR}.tar.xz ${DEST_DIR} diff --git a/GreatSQL-Build/greatsql-setenv.sh b/GreatSQL-Build/greatsql-setenv.sh new file mode 100755 index 0000000..113d2bf --- /dev/null +++ b/GreatSQL-Build/greatsql-setenv.sh @@ -0,0 +1,52 @@ +#/bin/sh + +if [ -f ~/.bash_profile ] ; then + . ~/.bash_profile +fi + +MAKE_JOBS=`lscpu | grep '^CPU(s):'|awk '{print $NF}'` +if [ ${MAKE_JOBS} -ge 16 ] ; then + MAKE_JOBS=`expr ${MAKE_JOBS} - 4` +else + MAKE_JOBS=`expr ${MAKE_JOBS} - 1` +fi + +MAJOR_VERSION=8 +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` +OS=`grep '^ID=' /etc/os-release | sed 's/.*"\(.*\)".*/\1/ig'` +GREATSQL=GreatSQL-${MAJOR_VERSION}.${MINOR_VERSION}.${PATCH_VERSION}-${RELEASE}-${OS}-glibc${GLIBC}-${ARCH} +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-${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" +GREATSQL_MAKESH="greatsql-automake.sh" +if [ "`uname -p`" = "aarch64" ] ; then + RPCGEN="rpcgen-1.3.1-4.el8.aarch64.rpm" +else + RPCGEN="rpcgen-1.3.1-4.el8.x86_64.rpm" +fi + +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 new file mode 100644 index 0000000..174798f --- /dev/null +++ b/GreatSQL-Shell-Build/CHANGELOG.md @@ -0,0 +1,8 @@ +# 8.4.4-4 更新日志 + +## 2025.10.21 +* 更新到8.4.4-4版本 +* 支持仲裁节点 +* 修改gcc依赖 + +[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 new file mode 100644 index 0000000..a49f926 --- /dev/null +++ b/GreatSQL-Shell-Build/Dockerfile @@ -0,0 +1,46 @@ +# 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" \ +email="greatsql@greatdb.com" \ +forum="https://greatsql.cn/forum.php" \ +gitee="https://gitee.com/GreatSQL/GreatSQL-Shell-Docker" + +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.4.4-4/GreatSQL-Shell-Build" \ +GREATSQLSH_ENV="greatsqlsh-setenv.sh" \ +ENTRYPOINT="docker-entrypoint.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/* ; \ +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 ; \ +rm -f /etc/yum.repos.d/CentOS-Linux-* ; \ +dnf clean all > /dev/null 2>&1 && \ +dnf makecache > /dev/null 2>&1 && \ +/usr/sbin/groupadd -g ${MYSQL_UID} ${MYSQL_USER} && \ +/usr/sbin/useradd -u ${MYSQL_UID} -g ${MYSQL_UID} -s /sbin/nologin ${MYSQL_USER} && \ +mkdir -p ${OPT_DIR} && \ +curl -o ${OPT_DIR}/${GREATSQLSH_ENV} ${GREATSQLSH_BUILD_DOWNLOAD_URL}/${GREATSQLSH_ENV} > /dev/null 2>&1 && \ +curl -o ${OPT_DIR}/${ENTRYPOINT} ${GREATSQLSH_BUILD_DOWNLOAD_URL}/${ENTRYPOINT} > /dev/null 2>&1 && \ +chmod +x ${OPT_DIR}/*sh + +ENTRYPOINT ["/opt/docker-entrypoint.sh"] + +CMD ["bash"] diff --git a/GreatSQL-Shell-Build/README.md b/GreatSQL-Shell-Build/README.md new file mode 100644 index 0000000..4d12a7f --- /dev/null +++ b/GreatSQL-Shell-Build/README.md @@ -0,0 +1,106 @@ +# GreatSQL-Shell-Build Docker +--- +## 简介 + +本项目用于构建MySQL Shell for GreatSQL编译环境Docker镜像。 + +适用于CentOS 8 x86_64/aarch64 环境,更多环境适配请自行修改Dockerfile及相关脚本中的参数。 + +**提示**:本项目将不再更新,如果有需要编译 GreatSQL Shell 源码,请参考本项目中的几个编译脚本。 + +## 基本信息 +- 维护者: GreatSQL(greatsql@greatdb.com) +- 联系我们: greatsql@greatdb.com +- 最新版本:GreatSQL 8.4.4-4 +- 支持CPU架构:x86_64、aarch64 + +## 支持哪些tag +- [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.4.4-4 bash +``` +执行上述命令后,会创建一个GreatSQL-Shell编译环境容器,并在容器中自动完成GreatSQL-Shell编译工作。 + +在编译过程中,可以执行下面命令查看进度: +```shell +$ docker logs greatsqlsh | tail +``` + +如果看到类似下面的结果,就表明二进制包已编译完成 +```shell +$ docker logs greatsqlsh | tail +0. init GreatSQL-Shell-Build env +0.1 touch logfile /tmp/greatsqlsh-automake.log +0.2 install all DEPS(autoconf, gcc ...) +0.3 download yum-repos.tar.xz and v8-libs-aarch64.tar.xz +0.4 install yum-repos and v8-libs-aarch64 + +1. downloading sourcecode tarballs and extract + 1.1 downloading sourcecode tarballs ... + 1.2 extract tarballs ... + +2. compiling antlr4 + +3. compiling patchelf + +4. compiling protobuf + +5. compiling MySQL Shell for GreatSQL + 5.1 compiling mysqlclient and mysqlxclient + 5.2 compiling MySQL Shell for GreatSQL + +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 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.4.4-4-glibc2.28-x86_64.tar.xz /usr/local/ +``` + +然后解压缩,就可以在宿主机环境下使用了,例如: +```shell +# 先安装几个必要的依赖包 +$ dnf install -y libssh python38 python38-libs python38-pyyaml +$ pip3.8 install -i https://pypi.tuna.tsinghua.edu.cn/simple --user certifi pyclamd numpy + +# 测试使用 +$ /usr/local/greatsql-shell-8.4.4-4-glibc2.28-x86_64/bin/mysqlsh +... + MySQL 127.0.0.1:3306 ssl SQL > \py +Switching to Python mode... + MySQL 127.0.0.1:3306 ssl Py > \q +Bye! +``` + +## 文件介绍 +- CHANGELOG.md,更新历史 +- docker-entrypoint.sh,GreatSQL-Shell Docker镜像初始化脚本,处理源码包下载等准备工作 +- Dockerfile,用于构建Docker编译环境 +- greatsqlsh-automake.sh,用于实现在Docker容器中自动化编译的脚本 +- greatsqlsh-setenv.sh,通用环境变量设置脚本 +- 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)。 +- 如果您想尝试在Rocky Linux中编译GreatSQL Shell,可参考 [xiongyu](https://gitee.com/xiongyu-net) 维护的[GreatSQL-Shell-Build分支](https://gitee.com/xiongyu-net/GreatSQL-Docker/tree/master/GreatSQL-Shell-Build)。 + +感谢以上二位commiter的贡献,由于无法适配ARM环境,因此主分支未合并,大家可根据个人喜好自行选择。 + +## 联系我们 +扫码关注微信公众号 + +![GreatSQL社区微信公众号二维码](https://images.gitee.com/uploads/images/2021/0802/143402_f9d6cb61_8779455.jpeg "greatsql社区-wx-qrcode-0.5m.jpg") diff --git a/GreatSQL-Shell-Build/docker-entrypoint.sh b/GreatSQL-Shell-Build/docker-entrypoint.sh new file mode 100755 index 0000000..2985877 --- /dev/null +++ b/GreatSQL-Shell-Build/docker-entrypoint.sh @@ -0,0 +1,88 @@ +#!/bin/bash +. /opt/greatsqlsh-setenv.sh + +echo "0. init GreatSQL-Shell-Build env" && \ +echo "0.1 touch logfile ${MAKELOG}" +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 && \ +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 && \ +echo "0.4 install ${YUM_REPOS}" && \ +cd ${OPT_DIR}/${V8_DEPS} && \ +tar xf ${YUM_REPOS}*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 && \ +echo && \ +echo "1. downloading sourcecode tarballs and extract" +cd ${OPT_DIR} && \ +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 && \ +wget -c -O ${ANTLR}.tar.xz ${GREATSQL_BUILD_DOWNLOAD_URL}/${ANTLR}.tar.xz >> ${MAKELOG} 2>&1 && \ +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 && \ +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 && \ +echo && \ +echo "2. compiling antlr4" +cd ${OPT_DIR}/${ANTLR}/runtime/Cpp/bld && \ +cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local/antlr4 >> ${MAKELOG} 2>&1 && \ +make -j${MAKE_JOBS} >> ${MAKELOG} 2>&1 && make -j${MAKE_JOBS} install >> ${MAKELOG} 2>&1 && \ +echo && \ +echo "3. compiling patchelf" +cd ${OPT_DIR}/${PATCHELF} && \ +./bootstrap.sh >> ${MAKELOG} 2>&1 && \ +./configure >> ${MAKELOG} 2>&1 && \ +make -j${MAKE_JOBS} >> ${MAKELOG} 2>&1 && \ +make -j${MAKE_JOBS} install >> ${MAKELOG} 2>&1 && \ +echo && \ +echo "4. compiling protobuf" +cd ${OPT_DIR}/${PROTOBUF} && \ +./configure >> ${MAKELOG} 2>&1 && \ +make -j${MAKE_JOBS} >> ${MAKELOG} 2>&1 && \ +make -j${MAKE_JOBS} install >> ${MAKELOG} 2>&1 && \ +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 ${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 && \ +xz -9 -f -T${MAKE_JOBS} ${GREATSQLSH}.tar >> ${MAKELOG} 2>&1 && \ +echo " 6.2 TARBALL file:" && \ +ls -la ${OPT_DIR}/${GREATSQLSH}.tar.xz && \ +cd ${OPT_DIR} && \ +rm -fr ${ANTLR}* ${BOOST}* ${MYSQL}* ${MYSQLSH}* ${MYSQLSH_PATCH} ${PATCHELF}* ${PROTOBUF}* ${RPCGEN} ${V8_DEPS} +/bin/bash diff --git a/GreatSQL-Shell-Build/greatsqlsh-automake.sh b/GreatSQL-Shell-Build/greatsqlsh-automake.sh new file mode 100755 index 0000000..5e9b798 --- /dev/null +++ b/GreatSQL-Shell-Build/greatsqlsh-automake.sh @@ -0,0 +1,75 @@ +#!/bin/bash +. /opt/greatsqlsh-setenv.sh + +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_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 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 && \ +mkdir bld && \ +cd bld && \ +cmake .. \ +-DCMAKE_INSTALL_PREFIX=${BASE_DIR} \ +-DMYSQL_SOURCE_DIR=${OPT_DIR}/${MYSQL} \ +-DMYSQL_BUILD_DIR=${OPT_DIR}/${MYSQL}/bld/ \ +-DBUILD_SOURCE_PACKAGE=0 \ +-DWITH_PROTOBUF=system \ +-DHAVE_PYTHON=1 \ +-DBUNDLED_ANTLR_DIR=/usr/local/antlr4/ \ +-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/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 new file mode 100755 index 0000000..5b80b00 --- /dev/null +++ b/GreatSQL-Shell-Build/greatsqlsh-setenv.sh @@ -0,0 +1,56 @@ +#/bin/bash + +if [ -f ~/.bash_profile ] ; then + . ~/.bash_profile +fi + +MAKE_JOBS=`lscpu | grep '^CPU(s)'|awk '{print $NF}'` +if [ ${MAKE_JOBS} -ge 16 ] ; then + MAKE_JOBS=`expr ${MAKE_JOBS} - 4` +else + MAKE_JOBS=`expr ${MAKE_JOBS} - 1` +fi + +OPT_DIR=/opt +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_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.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 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.4.4" +MYSQLSH="mysql-shell-8.4.4-src" +PATCHELF="patchelf-0.14.5" +PROTOBUF="protobuf-3.19.4" +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" + 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" + 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.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 new file mode 100644 index 0000000..cbb8b4e --- /dev/null +++ b/GreatSQL-Shell/CHANGELOG.md @@ -0,0 +1,6 @@ +# 8.4.4-4 更新日志 + +## 2025.10.22 +* 更新到8.4.4-4版本 + +[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 new file mode 100644 index 0000000..84df426 --- /dev/null +++ b/GreatSQL-Shell/Dockerfile @@ -0,0 +1,52 @@ +# 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 + +LABEL maintainer="greatsql.cn" \ +email="greatsql@greatdb.com" \ +forum="https://greatsql.cn/forum.php" \ +gitee="https://gitee.com/GreatSQL/GreatSQL-Docker" + +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 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/*;\ +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/* ; \ +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*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*Stream-* ; \ +echo; echo "3. install ${DEPS}" ; \ +dnf install -y ${DEPS} > /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}/greatsql-shell-${GREATSQL_VERSION}-*/bin/mysqlsh ${BASE_DIR}/bin/mysqlsh + +CMD ["bash"] diff --git a/GreatSQL-Shell/README.md b/GreatSQL-Shell/README.md new file mode 100644 index 0000000..b9da6ca --- /dev/null +++ b/GreatSQL-Shell/README.md @@ -0,0 +1,144 @@ +# GreatSQL-Shell Docker + +## 简介 + +在Docker环境中运行MySQL Shell for GreatSQL 8.4.4-4,无需额外安装,更方便省事。 + +## 基本信息 +- 维护者: GreatSQL(greatsql@greatdb.com) +- 联系我们:greatsql@greatdb.com +- 最新版本:GreatSQL 8.4.4-4 +- 支持CPU架构:x86_64、aarch64 + +## 支持哪些tag +- [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镜像 + +### 通过tcp/ip方式连接GreatSQL + +创建一个MySQL Shell for GreatSQL新容器: +```shell +$ docker run -itd --hostname greatsqlsh --name greatsqlsh greatsql/greatsql_shell bash +``` + +通过tcp/ip方式连接GreatSQL + +```shell +$ 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... +... +# 获取当前MGR状态信息 + MySQL 172.16.16.10:33060+ ssl Py > c=dba.get_cluster() + MySQL 172.16.16.10:33060+ ssl Py > c.status() +{ + "clusterName": "mgr", + "defaultReplicaSet": { + "name": "default", + "primary": "172.16.16.10:3306", + "ssl": "REQUIRED", + "statusText": "Cluster is ONLINE and can tolerate up to ONE failure.", + "topology": { + "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.4.4" + }, + "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.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": "192.168.5.160:3306" +} + MySQL 172.16.16.10: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.16.16.10:33060+ ssl SQL > show processlist; ++-------+-------------+----------------------+------+---------+---------+----------------------------------------------------------+----------------------------------+------------+-----------+---------------+ +| Id | User | Host | db | Command | Time | State | Info | Time_ms | Rows_sent | Rows_examined | ++-------+-------------+----------------------+------+---------+---------+----------------------------------------------------------+----------------------------------+------------+-----------+---------------+ +| 12 | system user | | NULL | Connect | 1200070 | waiting for handler commit | Group replication applier module | 1200070613 | 0 | 0 | +... +| 14883 | GreatSQL | 172.17.134.224:35392 | NULL | Query | 0 | init | PLUGIN: show processlist | 0 | 0 | 0 | ++-------+-------------+----------------------+------+---------+---------+----------------------------------------------------------+----------------------------------+------------+-----------+---------------+ +7 rows in set (0.0028 sec) +``` + +### 通过unix socket方式连接GreatSQL + +或者创建一个像这样的新容器,并挂载mysql.sock文件 +```shell +$ docker run -itd --hostname greatsqlsh --name greatsqlsh -v /data/GreatSQL/mysql.sock:/tmp/mysql.sock greatsql/greatsql_shell bash +``` + +通过socket方式连接GreatSQL +```shell +$ docker exec -it greatsqlsh bash -c "mysqlsh -S/tmp/mysql.sock" +Please provide the password for 'root@/tmp%2Fmysql.sock': +... + MySQL localhost Py > \sql +Switching to SQL mode... Commands end with ; +Fetching global names for auto-completion... Press ^C to stop. + MySQL localhost SQL > show processlist; ++-----+-------------+-----------------+----------+---------+------+----------------------------------------------------------+----------------------------------+---------+-----------+---------------+ +| Id | User | Host | db | Command | Time | State | Info | Time_ms | Rows_sent | Rows_examined | ++-----+-------------+-----------------+----------+---------+------+----------------------------------------------------------+----------------------------------+---------+-----------+---------------+ +| 42 | GreatSQL | 127.0.0.1:41682 | NULL | Sleep | 2469 | | NULL | 2468667 | 0 | 0 | +| 57 | root | localhost | greatsql | Sleep | 2000 | | NULL | 2000318 | 8 | 33 | +... +| 178 | root | localhost | NULL | Query | 0 | init | show processlist | 0 | 0 | 0 | ++-----+-------------+-----------------+----------+---------+------+----------------------------------------------------------+----------------------------------+---------+-----------+---------------+ +9 rows in set (0.0002 sec) +``` + +如上所示,这就可以在Docker环境中运行MySQL Shell for GreatSQL 8.4.4-4,用它来管理GreatSQL MGR更方便省事。 + +## 文件介绍 +- CHANGELOG.md,更新历史 +- Dockerfile,用于构建GreatSQL Shell Docker环境 + +## 联系我们 +扫码关注微信公众号 + +![GreatSQL社区微信公众号二维码](https://images.gitee.com/uploads/images/2021/0802/143402_f9d6cb61_8779455.jpeg "greatsql社区-wx-qrcode-0.5m.jpg") diff --git a/GreatSQL/CHANGELOG.md b/GreatSQL/CHANGELOG.md new file mode 100644 index 0000000..a839c2c --- /dev/null +++ b/GreatSQL/CHANGELOG.md @@ -0,0 +1,8 @@ +# 8.4.4-4 更新日志 + +## 2025.10.15 +* 更新到GreatSQL 8.4.4-4 +* 调整audit log filter测试方案 +* 修改相应的库名、表名 + +[8.4.4-4]: https://gitee.com/GreatSQL/GreatSQL-Docker/tree/greatsql-8.4.4-4/GreatSQL diff --git a/GreatSQL/CentOS-Base.repo b/GreatSQL/CentOS-Base.repo deleted file mode 100644 index 298f9d9..0000000 --- a/GreatSQL/CentOS-Base.repo +++ /dev/null @@ -1,56 +0,0 @@ -# CentOS-Base.repo -# -# The mirror system uses the connecting IP address of the client and the -# update status of each mirror to pick mirrors that are updated to and -# geographically close to the client. You should use this for CentOS updates -# unless you are manually picking other mirrors. -# -# If the mirrorlist= does not work for you, as a fall back you can try the -# remarked out baseurl= line instead. -# -# - -[base] -name=CentOS-8.5.2111 - Base - mirrors.aliyun.com -baseurl=http://mirrors.aliyun.com/centos-vault/8.5.2111/BaseOS/$basearch/os/ - http://mirrors.aliyuncs.com/centos-vault/8.5.2111/BaseOS/$basearch/os/ - http://mirrors.cloud.aliyuncs.com/centos-vault/8.5.2111/BaseOS/$basearch/os/ -gpgcheck=0 -gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-Official - -#additional packages that may be useful -[extras] -name=CentOS-8.5.2111 - Extras - mirrors.aliyun.com -baseurl=http://mirrors.aliyun.com/centos-vault/8.5.2111/extras/$basearch/os/ - http://mirrors.aliyuncs.com/centos-vault/8.5.2111/extras/$basearch/os/ - http://mirrors.cloud.aliyuncs.com/centos-vault/8.5.2111/extras/$basearch/os/ -gpgcheck=0 -gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-Official - -#additional packages that extend functionality of existing packages -[centosplus] -name=CentOS-8.5.2111 - Plus - mirrors.aliyun.com -baseurl=http://mirrors.aliyun.com/centos-vault/8.5.2111/centosplus/$basearch/os/ - http://mirrors.aliyuncs.com/centos-vault/8.5.2111/centosplus/$basearch/os/ - http://mirrors.cloud.aliyuncs.com/centos-vault/8.5.2111/centosplus/$basearch/os/ -gpgcheck=0 -enabled=0 -gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-Official - -[PowerTools] -name=CentOS-8.5.2111 - PowerTools - mirrors.aliyun.com -baseurl=http://mirrors.aliyun.com/centos-vault/8.5.2111/PowerTools/$basearch/os/ - http://mirrors.aliyuncs.com/centos-vault/8.5.2111/PowerTools/$basearch/os/ - http://mirrors.cloud.aliyuncs.com/centos-vault/8.5.2111/PowerTools/$basearch/os/ -gpgcheck=0 -enabled=0 -gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-Official - - -[AppStream] -name=CentOS-8.5.2111 - AppStream - mirrors.aliyun.com -baseurl=http://mirrors.aliyun.com/centos-vault/8.5.2111/AppStream/$basearch/os/ - http://mirrors.aliyuncs.com/centos-vault/8.5.2111/AppStream/$basearch/os/ - http://mirrors.cloud.aliyuncs.com/centos-vault/8.5.2111/AppStream/$basearch/os/ -gpgcheck=0 -gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-Official diff --git a/GreatSQL/Dockerfile b/GreatSQL/Dockerfile index c4c9681..8ac8b00 100644 --- a/GreatSQL/Dockerfile +++ b/GreatSQL/Dockerfile @@ -1,56 +1,48 @@ -FROM centos:8 - -MAINTAINER greatsql@greatdb.com - -ENV LANG en_US.utf8 - -ENV MYSQL_DATA_DIR=/data/GreatSQL -ENV MYSQL_USER=mysql -ENV MYSQL_UID_GID=3306 -ENV MYSQL_EXTRACT_DIR=/usr/local -ENV TMP_DIR=/tmp -ENV MYSQL_PORT=3306 -#for centos8 -#ENV DEPS="numactl-libs libaio readline-devel ncurses-devel openssl openssl-devel net-tools perl" -ENV DEPS="numactl-libs libaio readline-devel ncurses-devel" -#for centos8 -ENV JEMALLOC_RPM="jemalloc-5.2.1-2.el8.x86_64.rpm" -ENV GREATSQL_INIT="greatsql-init.sh" - -#Creating user mysql -RUN groupadd -g ${MYSQL_UID_GID} ${MYSQL_USER}; \ - useradd -u ${MYSQL_UID_GID} -r -g ${MYSQL_UID_GID} -s /sbin/nologin \ - -c "MySQL User" ${MYSQL_USER} - -#Copying files -COPY greatsql-803224.tar.xz ${TMP_DIR} -COPY ${JEMALLOC_RPM} ${TMP_DIR} - -#Installing jemalloc & depend libs -#curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo && \ -COPY CentOS-Base.repo /etc/yum.repos.d/ -RUN rm -f /etc/yum.repos.d/CentOS-Linux-AppStream.repo /etc/yum.repos.d/CentOS-Linux-BaseOS.repo ; \ -sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo && \ -yum clean all && \ -yum makecache -RUN yum install -y ${TMP_DIR}/${JEMALLOC_RPM} -RUN yum install -y ${DEPS} -RUN unlink /etc/localtime; ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime - -#extract tarball -RUN tar xf ${TMP_DIR}/greatsql-803224.tar.xz -C / -COPY my.cnf /etc/my.cnf - -RUN echo "LD_PRELOAD=/usr/lib64/libjemalloc.so.2" >> /etc/sysconfig/mysql ; \ - echo "THP_SETTING=never" >> /etc/sysconfig/mysql - -#Creating datadir -RUN mkdir -p ${MYSQL_DATA_DIR} && chown -R ${MYSQL_USER}:${MYSQL_USER} ${MYSQL_DATA_DIR}; chmod -R ug+rwX /etc/my.cnf - -RUN rm -f ${TMP_DIR}/${JEMALLOC_RPM} - -COPY ${GREATSQL_INIT} /docker-entrypoint.sh -ENTRYPOINT ["/docker-entrypoint.sh"] - -EXPOSE ${MYSQL_PORT} ${MYSQL_PORT}0 ${MYSQL_PORT}1 +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" + +ARG TARGETARCH +ENV GREATSQL_DATA_DIR=/data/GreatSQL \ +GREATSQL_USER=mysql \ +GREATSQL_UID_GID=3306 \ +GREATSQL_EXTRACT_DIR=/usr/local \ +TMP_DIR=/tmp \ +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.4.4-4" \ +GREATSQL_PKG="GreatSQL-8.4.4-4-Linux-glibc2.17-${TARGETARCH}-minimal" + +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} && \ +microdnf clean all && \ +rm -f ${TMP_DIR}/*xz && \ +rm -fr /usr/share/doc /usr/share/man /usr/share/misc + +ENTRYPOINT ["/greatsql-init.sh"] + +EXPOSE ${GREATSQL_PORT} ${GREATSQL_PORT}0 ${GREATSQL_PORT}1 CMD ["mysqld"] diff --git a/GreatSQL/Dockerfile-aarch64 b/GreatSQL/Dockerfile-aarch64 deleted file mode 100644 index 53756ab..0000000 --- a/GreatSQL/Dockerfile-aarch64 +++ /dev/null @@ -1,49 +0,0 @@ -FROM docker.io/arm64v8/centos - -MAINTAINER greatsql@greatdb.com - -ENV LANG en_US.utf8 - -ENV MYSQL_DATA_DIR=/data/GreatSQL -ENV MYSQL_USER=mysql -ENV MYSQL_UID_GID=3306 -ENV MYSQL_EXTRACT_DIR=/usr/local -ENV TMP_DIR=/tmp -ENV MYSQL_PORT=3306 -#for centos8 -ENV DEPS="numactl-libs libaio readline-devel ncurses-devel" -#for centos8 -ENV GREATSQL_INIT="greatsql-init.sh" - -#Creating user mysql -RUN groupadd -g ${MYSQL_UID_GID} ${MYSQL_USER}; \ - useradd -u ${MYSQL_UID_GID} -r -g ${MYSQL_UID_GID} -s /sbin/nologin \ - -c "MySQL User" ${MYSQL_USER} - -#Copying files -COPY greatsql-803224.tar.xz ${TMP_DIR} - -#Installing jemalloc & depend libs -COPY CentOS-Base.repo /etc/yum.repos.d/ -RUN rm -f /etc/yum.repos.d/CentOS-Linux-AppStream.repo /etc/yum.repos.d/CentOS-Linux-BaseOS.repo ; \ -sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo && \ -yum clean all && \ -yum makecache -RUN yum install -y ${DEPS} -RUN unlink /etc/localtime; ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime - -#extract tarball -RUN tar xf ${TMP_DIR}/greatsql-803224.tar.xz -C / -COPY my.cnf /etc/my.cnf - -RUN echo "LD_PRELOAD=/usr/lib64/libjemalloc.so.2" >> /etc/sysconfig/mysql ; \ - echo "THP_SETTING=never" >> /etc/sysconfig/mysql - -#Creating datadir -RUN mkdir -p ${MYSQL_DATA_DIR} && chown -R ${MYSQL_USER}:${MYSQL_USER} ${MYSQL_DATA_DIR}; chmod -R ug+rwX /etc/my.cnf - -COPY ${GREATSQL_INIT} /docker-entrypoint.sh -ENTRYPOINT ["/docker-entrypoint.sh"] - -EXPOSE ${MYSQL_PORT} ${MYSQL_PORT}0 ${MYSQL_PORT}1 -CMD ["mysqld"] diff --git a/GreatSQL/README.md b/GreatSQL/README.md index 2c1e454..0172541 100644 --- a/GreatSQL/README.md +++ b/GreatSQL/README.md @@ -1,67 +1,447 @@ +# GreatSQL Docker +--- -## 关于裁剪说明 -为了让Docker镜像尽可能精简,GreatSQL在制作过程中将mysql router裁剪掉了,以及一些用不上的so文件。 +## 简介 -首先,下载GreatSQL对应OS及CPU架构的RPM包,本文以 `CentOS 8.x & x86_64` 环境为例。 +本项目用于构建GreatSQL Docker镜像。 -可以直接下载RPM集合包:[greatsql-8.0.32-24.1.el8.x86_64.rpm-bundle.tar.xz](https://gitee.com/GreatSQL/GreatSQL/releases/tag/GreatSQL-8.0.32-24),也可以自行单独下载各个PRM包。解开压缩包,得到如下文件列表: +适用于CentOS 8 x86_64/aarch64 环境,更多环境适配请自行修改Dockerfile及相关脚本中的参数。 -- greatsql-client-8.0.32-24.1.el8.x86_6464.rpm -- greatsql-devel-8.0.32-24.1.el8.x86_6464.rpm -- greatsql-icu-data-files-8.0.32-24.1.el8.x86_6464.rpm -- greatsql-server-8.0.32-24.1.el8.x86_6464.rpm -- greatsql-shared-8.0.32-24.1.el8.x86_6464.rpm +## 基本信息 +- 维护者: GreatSQL(greatsql@greatdb.com) +- 联系我们:greatsql@greatdb.com +- 最新版本:GreatSQL 8.4.4-4 +- 最后更新时间:2025-10-15 -执行下面的命令,解开RPM包到本地文件: +## 支持哪些tag + +- [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 ``` -$ pwd -/data/docker-greatsql8032 -$ for f in `ls *rpm`;do rpm2cpio $f | cpio -idm; done -172239 blocks -19714 blocks -6722 blocks -834913 blocks -14669 blocks +还可以指定具体版本号 -$ ls -CentOS-Base.repo greatsql-803224.tar.xz greatsql-init.sh my.cnf -Dockerfile greatsql-client-8.0.32-24.1.el8.x86_6464.rpm greatsql-server-8.0.32-24.1.el8.x86_6464.rpm usr -Dockerfile-x86 greatsql-devel-8.0.32-24.1.el8.x86_6464.rpm greatsql-shared-8.0.32-24.1.el8.x86_6464.rpm var -etc greatsql-icu-data-files-8.0.32-24.1.el8.x86_6464.rpm greatsql-shrink.sh +```shell +docker pull greatsql/greatsql:8.4.4-4 ``` -可以看到,多了 etc\usr\var 等几个目录。接下来是对这几个目录下的文件进行裁剪,删除不需要的文件。 -执行 `greatsql-shrink.sh` 脚本一键删除这些文件(注意先确认和修改路径)。 +如果无法从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 ``` -$ sh ./greatsql-shrink.sh + +如果是龙芯(Loongson-3A6000)架构环境,可以尝试下面的镜像: + +```bash +docker pull registry.cn-shanghai.aliyuncs.com/annda/greatsql:8.4.4-4 +``` + +**提醒**:这是社区用户 Annda](https://github.com/AnndaGH) 提交的镜像,请自行决定是否使用。 + +> 如果提示 timeout 连接超时错误,多重试几次应该就好了。 + +## GreatSQL Docker镜像使用 + +例如: + +```shell +$ docker run -d \ +--name greatsql --hostname=greatsql \ +-e TZ="Asia/Shanghai" \ +greatsql/greatsql ``` -下面是被裁剪文件的详细列表,如果不想要精简版本,可根据本项目提供的Dockerfile自行制作镜像文件。 +执行上述命令后,会创建一个GreatSQL运行环境容器,且采用空密码初始化。 + +几个参数简介: +*--name greatsql*,设定容器名称 +*--hostname=greatsql*,设定容器主机名 +*greatsql/greatsql*,指定容器使用的镜像名 + +如果想要映射外部 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 ``` -#!/bin/sh -cd /data/docker-greatsql8032/ -cd ./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 -cd /data/docker-greatsql8032/ -cd ./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/ +其中: + +- 参数 `-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* 目录。 -cd /data/docker-greatsql8032/ -cd ./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* +注意,需要先保证本地目录 `/data/greatsql/data` 是空的才行,否则 GreatSQL 在初始化检测时会报告失败,无法启动,日志中将有类似下面的内容: -cd /data/docker-greatsql8032/ -tar cf greatsql-803224.tar ./etc ./usr ./var -xz -9 -f greatsql-803224.tar +```shell +[ERROR] [MY-010457] [Server] --initialize specified but the data directory has files in it. Aborting. +[ERROR] [MY-013236] [Server] The designated data directory /data/GreatSQL/ is unusable. You can remove all files that the server added to it. +[ERROR] [MY-010119] [Server] Aborting ``` -文件裁剪完毕后,直接打包压缩,得到 `greatsql-803224.tar.xz` 文件。 -接下来就可以制作Docker镜像了: +## 连接(容器中的)MySQL +运行下面的命令进入容器 + +```shell +$ docker exec -it greatsql bash ``` -$ docker build -t greatsql803224 . + +可以使用mysql 客户端工具(在docker镜像中,只保留了mysql这个客户端工具) + +```shell +[root@greatsql /]# mysql +Welcome to the MySQL monitor. Commands end with ; or \g. +Your MySQL connection id is 34 ... +[root@GreatSQL][(none)]> SELECT version(); ++-----------+ +| version() | ++-----------+ +| 8.4.4 | ++-----------+ +1 row in set (0.00 sec) + +-- 初始化完后,执行测试脚本,验证是否支持新的特性和Oracle兼容语法等 +[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`: + +```shell +version: '2' + +services: + greatsql: + image: greatsql/greatsql + container_name: greatsql + hostname: greatsql + network_mode: bridge + restart: unless-stopped + environment: + TZ: Asia/Shanghai +``` + +运行 `docker-compose -f /data/docker/mysql.yml up -d` 即可创建一个新容器。 + +运行下面的命令查看容器运行状态: + +```shell +$ docker-compose -f /data/docker/mysql.yml ps ``` -这就完成GreatSQL Docker镜像的构建了。 +运行下面的命令进入容器: + +```shell +$ docker exec -it greatsql bash +``` + +## 如何通过docker-compose构建MGR集群(单主模式) + +下面是一个docker-compose的配置文件参考 `/data/docker/mgr.yml`: + +``` +version: '2' + +services: + mgr2: + image: greatsql/greatsql #指定镜像 + container_name: mgr2 #设定容器名字 + hostname: mgr2 #设定容器中的主机名 + networks: #指定容器使用哪个专用网络 + mgr_net: + ipv4_address: 172.18.0.2 #设置容器使用固定IP地址,避免重启后IP变化 + restart: unless-stopped #设定重启策略 + environment: #设置多个环境变量 + TZ: Asia/Shanghai #时区 + MYSQL_ALLOW_EMPTY_PASSWORD: 1 #允许root账户空密码 + MYSQL_INIT_MGR: 1 #初始化MGR集群 + MYSQL_MGR_LOCAL: '172.18.0.2:33061' #当前MGR节点的local_address + MYSQL_MGR_SEEDS: '172.18.0.2:33061,172.18.0.3:33061,172.18.0.4:33061' #MGR集群seeds + MYSQL_MGR_START_AS_PRIMARY: 1 #指定当前MGR节点为Primary角色 + MYSQL_MGR_ARBITRATOR: 0 + LOWER_CASE_TABLE_NAMES: 0 #设定lower_case_table_names值,默认为0 + mgr3: + image: greatsql/greatsql + container_name: mgr3 + hostname: mgr3 + networks: + mgr_net: + ipv4_address: 172.18.0.3 + restart: unless-stopped + depends_on: + - "mgr2" + environment: + TZ: Asia/Shanghai + MYSQL_ALLOW_EMPTY_PASSWORD: 1 + MYSQL_INIT_MGR: 1 + MYSQL_MGR_LOCAL: '172.18.0.3:33061' + MYSQL_MGR_SEEDS: '172.18.0.2:33061,172.18.0.3:33061,172.18.0.4:33061' + MYSQL_MGR_START_AS_PRIMARY: 0 + MYSQL_MGR_ARBITRATOR: 0 #既非Primary,也非Arbitrator,那么就是Secondary角色了 + LOWER_CASE_TABLE_NAMES: 0 + mgr4: + image: greatsql/greatsql + container_name: mgr4 + hostname: mgr4 + networks: + mgr_net: + ipv4_address: 172.18.0.4 + restart: unless-stopped + depends_on: + - "mgr3" + environment: + TZ: Asia/Shanghai + MYSQL_ALLOW_EMPTY_PASSWORD: 1 + MYSQL_INIT_MGR: 1 + MYSQL_MGR_LOCAL: '172.18.0.4:33061' + MYSQL_MGR_SEEDS: '172.18.0.2:33061,172.18.0.3:33061,172.18.0.4:33061' + MYSQL_MGR_START_AS_PRIMARY: 0 + MYSQL_MGR_ARBITRATOR: 1 #指定当前MGR节点为Arbitrator角色,此时不能同时指定其为Primary/Secondary角色 + LOWER_CASE_TABLE_NAMES: 0 +networks: + mgr_net: #创建独立MGR专属网络 + ipam: + config: + - subnet: 172.18.0.0/24 +``` + +启动所有容器: + +```shell +$ docker-compse -f /data/docker/mgr.yml up -d +``` + +容器启动后,会自行进行MySQL实例的初始化并自动构建MGR集群。 + +进入第一个容器,确认实例启动并成为MGR的Primary节点: + +```shell +$ docker exec -it mgr2 bash +$ mysql +... +[root@GreatSQL][(none)]> SELECT * FROM performance_schema.replication_group_members; ++---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+----------------------------+ +| 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.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节点(仲裁节点/投票节点)。 + + +## 如何通过docker-compose构建MGR集群(多主模式) + +下面是一个docker-compose的配置文件参考 `/data/docker/mgr-multi-primary.yml`: + +``` +version: '2' + +services: + mgr2: + image: greatsql/greatsql + container_name: mgr2 #设定容器名字 + hostname: mgr2 #设定容器中的主机名 + networks: #指定容器使用哪个专用网络 + mgr_net: + ipv4_address: 172.18.0.2 #设置容器使用固定IP地址,避免重启后IP变化 + restart: unless-stopped #设定重启策略 + environment: #设置多个环境变量 + TZ: Asia/Shanghai #时区 + MYSQL_ALLOW_EMPTY_PASSWORD: 1 #允许root账户空密码 + MYSQL_INIT_MGR: 1 #初始化MGR集群 + MYSQL_MGR_LOCAL: '172.18.0.2:33061' #当前MGR节点的local_address + MYSQL_MGR_SEEDS: '172.18.0.2:33061,172.18.0.3:33061,172.18.0.4:33061' #MGR集群seeds + MYSQL_MGR_START_AS_PRIMARY: 1 #指定当前MGR节点为Primary角色 + MYSQL_MGR_MULTI_PRIMARY: 1 #指定是否采用多主模式 + MYSQL_MGR_ARBITRATOR: 0 + LOWER_CASE_TABLE_NAMES: 0 + #MYSQL_MGR_VIEWID: "aaaaaaaa-bbbb-bbbb-aaaa-aaaaaaaaaaa1" + mgr3: + image: greatsql/greatsql + container_name: mgr3 + hostname: mgr3 + networks: + mgr_net: + ipv4_address: 172.18.0.3 + restart: unless-stopped + depends_on: + - "mgr2" + environment: + TZ: Asia/Shanghai + MYSQL_ALLOW_EMPTY_PASSWORD: 1 + MYSQL_INIT_MGR: 1 + MYSQL_MGR_LOCAL: '172.18.0.3:33061' + MYSQL_MGR_SEEDS: '172.18.0.2:33061,172.18.0.3:33061,172.18.0.4:33061' + MYSQL_MGR_START_AS_PRIMARY: 0 + MYSQL_MGR_MULTI_PRIMARY: 1 + MYSQL_MGR_ARBITRATOR: 0 #既非Primary,也非Arbitrator,那么就是Secondary角色了 + LOWER_CASE_TABLE_NAMES: 0 + #MYSQL_MGR_VIEWID: "aaaaaaaa-bbbb-bbbb-aaaa-aaaaaaaaaaa1" + mgr4: + image: greatsql/greatsql + container_name: mgr4 + hostname: mgr4 + networks: + mgr_net: + ipv4_address: 172.18.0.4 + restart: unless-stopped + depends_on: + - "mgr3" + environment: + TZ: Asia/Shanghai + MYSQL_ALLOW_EMPTY_PASSWORD: 1 + MYSQL_INIT_MGR: 1 + MYSQL_MGR_LOCAL: '172.18.0.4:33061' + MYSQL_MGR_SEEDS: '172.18.0.2:33061,172.18.0.3:33061,172.18.0.4:33061' + MYSQL_MGR_START_AS_PRIMARY: 0 + MYSQL_MGR_MULTI_PRIMARY: 1 + MYSQL_MGR_ARBITRATOR: 0 #指定当前MGR节点为Arbitrator角色,此时不能同时指定其为Primary/Secondary角色 + LOWER_CASE_TABLE_NAMES: 0 + #MYSQL_MGR_VIEWID: "aaaaaaaa-bbbb-bbbb-aaaa-aaaaaaaaaaa1" +networks: + mgr_net: #创建独立MGR专属网络 + ipam: + config: + - subnet: 172.18.0.0/24 +``` + +启动所有容器: + +```shell +$ docker-compse -f /data/docker/mgr-multi-primary.yml up -d +``` + +容器启动后,会自行进行MySQL实例的初始化并自动构建MGR集群。 + +进入第一个容器,确认实例启动并成为MGR的Primary节点: + +```shell +$ docker exec -it mgr2 bash +$ mysql +... +[root@GreatSQL][(none)]> SELECT * FROM performance_schema.replication_group_members; ++---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+----------------------------+ +| 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.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集群已自动构建完毕,运行模式为多主模式。 + +## Docker-Compose环境变量/参数介绍 +- **MYSQL_ROOT_PASSWORD** +设置MySQL root账号的密码。如果下面指定了MYSQL_ALLOW_EMPTY_PASSWORD=1,则本参数无效。 + +- **MYSQL_DATABASE** +是否初始化一个新的数据库。 + +- **MYSQL_ALLOW_EMPTY_PASSWORD** +是否设置MySQL root账号使用空密码,因为安全原因,不推荐这么做。 + +- **MYSQL_RANDOM_ROOT_PASSWORD** +设置MySQL root账号的密码采用随机生成方式。 + +- **MAXPERF** +设置是否采用最大性能模式运行容器,默认值:1,即默认启用该模式。如果您不需要运行该模式,请在创建容器时加上 `-e MAXPERF=0` 参数。在MAXPERF模式下,会进行如下几个调整: + + - 调整 innodb_buffer_pool_size 为物理内存的75%。 + - 调整 rapid_memory_limit 为 innodb_buffer_pool_size 的50%。 + - 调整 rapid_worker_threads 为逻辑CPU核数-2 。 + - 调整 max_connections = 4096。 + - 其他更多调整内容请参考 [脚本greatsql-init.sh](./greatsql-init.sh) 中的MAXPERF处理逻辑。 + +- **MYSQL_IBP** +设置innodb_buffer_pool_size,默认值:128M。 + +- **MYSQL_INIT_MGR** +是否初始化MGR相关设置,默认值:0(否)。如果设置为1(是),则会创建MGR服务所需账号,并设定运行 CHANGE MASTER TO 设置好MGR复制通道。 +非必选项。 + +- **MYSQL_MGR_NAME** +设置group_replication_group_name,默认值:"aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaa1"。 +非必选项。 + +- **MYSQL_MGR_LOCAL** +设置 group_replication_local_address,默认值:"172.17.0.2:33061"。 +如果 MYSQL_INIT_MGR=1 则为必选项。 + +- **MYSQL_MGR_SEEDS** +设置 group_replication_group_seeds,默认值:"172.17.0.2:33061,172.17.0.3:33061"。 +如果 MYSQL_INIT_MGR=1 则为必选项。 + +- **MYSQL_MGR_USER** +设置MGR服务所需账号,默认值:repl。 +非必选项。 + +- **MYSQL_MGR_USER_PWD** +设置MGR服务所需账号的密码,默认值:repl4MGR。 +非必选项。 + +- **MYSQL_SID** +设置server_id选项,构建MGR集群时要求每个节点的server_id是唯一的,默认值:3306+随机数 +非必选项。 + +- **MYSQL_MGR_START_AS_PRIMARY** +指定当前节点在MGR中以PRIMARY角色启动,每次都会进行MGR初始化引导操作。默认值:0。 +如果 MYSQL_INIT_MGR=1 则至少要有一个节点指定为PRIMARY角色。 + +- **MYSQL_MGR_MULTI_PRIMARY** +设置是否采用多主模式运行。默认值:0。 +如果 MYSQL_MGR_MULTI_PRIMARY=1,则【有且只能选择一个节点】设置 MYSQL_MGR_START_AS_PRIMARY=1,该节点会采用引导模式启动,其余节点不设置引导模式。 + +- **MYSQL_MGR_ARBITRATOR** +指定当前节点在MGR中以ARBITRATOR角色启动,该选项和**MYSQL_MGR_START_AS_PRIMARY**是互斥的,不能同时设置为1。默认值:0。 +非必选项。 + +- **MYSQL_MGR_VIEWID** +MySQL 8.0.26开始,可以为view change单独指定一个GTID前缀,避免和正常的事务GTID混杂一起,产生问题。默认值:AUTOMATIC。 +非必选项。 + +- **LOWER_CASE_TABLE_NAMES** +设置表名大小写选项 lower_case_table_names,设置为0表示区分大小写,设置为1表示不区分带下写。默认值:0。 +非必选项。 + +- **TZ** +设置容器时区,例如设置为 "Asia/Shanghai" 表示采用东八区(+8:00小时)。 + +## 文件介绍 +- CHANGELOG.md,更新历史 +- docker-compose,利用docker-compose拉起的示例文件 +- Dockerfile,用于构建GreatSQL Docker环境 +- greatsql-init.sh,构建镜像初始化脚本 +- greatsql-shrink.sh,在镜像中裁剪非必要文件脚本 +- greatsql-test.sql,可执行GreatSQL自测试的脚本 +- my.cnf,my.cnf模板文件 + +## 联系我们 +扫码关注微信公众号 + +![GreatSQL社区微信公众号二维码](https://images.gitee.com/uploads/images/2021/0802/143402_f9d6cb61_8779455.jpeg "greatsql社区-wx-qrcode-0.5m.jpg") diff --git a/docker-compose/mgr-3nodes-multi-primary.yml b/GreatSQL/docker-compose/mgr-3nodes-multi-primary.yml similarity index 89% rename from docker-compose/mgr-3nodes-multi-primary.yml rename to GreatSQL/docker-compose/mgr-3nodes-multi-primary.yml index d74c6bd..3093f24 100644 --- a/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: #指定容器使用哪个专用网络 @@ -18,6 +19,7 @@ services: MYSQL_MGR_START_AS_PRIMARY: 1 #指定当前MGR节点为Primary角色 MYSQL_MGR_MULTI_PRIMARY: 1 #指定是否采用多主模式 MYSQL_MGR_ARBITRATOR: 0 + LOWER_CASE_TABLE_NAMES: 0 #设定lower_case_table_names值,默认为0 #MYSQL_MGR_VIEWID: "aaaaaaaa-bbbb-bbbb-aaaa-aaaaaaaaaaa1" mgr3: image: greatsql/greatsql @@ -38,6 +40,7 @@ services: MYSQL_MGR_START_AS_PRIMARY: 0 MYSQL_MGR_MULTI_PRIMARY: 1 MYSQL_MGR_ARBITRATOR: 0 #既非Primary,也非Arbitrator,那么就是Secondary角色了 + LOWER_CASE_TABLE_NAMES: 0 #MYSQL_MGR_VIEWID: "aaaaaaaa-bbbb-bbbb-aaaa-aaaaaaaaaaa1" mgr4: image: greatsql/greatsql @@ -58,6 +61,7 @@ services: MYSQL_MGR_START_AS_PRIMARY: 0 MYSQL_MGR_MULTI_PRIMARY: 1 MYSQL_MGR_ARBITRATOR: 0 #指定当前MGR节点为Arbitrator角色,此时不能同时指定其为Primary/Secondary角色 + LOWER_CASE_TABLE_NAMES: 0 #MYSQL_MGR_VIEWID: "aaaaaaaa-bbbb-bbbb-aaaa-aaaaaaaaaaa1" networks: mgr_net: #创建独立MGR专属网络 diff --git a/docker-compose/mgr-3nodes.yml b/GreatSQL/docker-compose/mgr-3nodes.yml similarity index 87% rename from docker-compose/mgr-3nodes.yml rename to GreatSQL/docker-compose/mgr-3nodes.yml index 34a9838..df2ac56 100644 --- a/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: #指定容器使用哪个专用网络 @@ -19,8 +20,9 @@ services: MYSQL_MGR_SEEDS: '172.18.0.2:33061,172.18.0.3:33061,172.18.0.4:33061' #MGR集群seeds MYSQL_MGR_START_AS_PRIMARY: 1 #指定当前MGR节点为Primary角色 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: @@ -37,6 +39,7 @@ services: MYSQL_MGR_SEEDS: '172.18.0.2:33061,172.18.0.3:33061,172.18.0.4:33061' MYSQL_MGR_START_AS_PRIMARY: 0 MYSQL_MGR_ARBITRATOR: 0 #既非Primary,也非Arbitrator,那么就是Secondary角色了 + LOWER_CASE_TABLE_NAMES: 0 mgr4: image: greatsql/greatsql container_name: mgr4 @@ -54,6 +57,7 @@ services: MYSQL_MGR_LOCAL: '172.18.0.4:33061' MYSQL_MGR_SEEDS: '172.18.0.2:33061,172.18.0.3:33061,172.18.0.4:33061' MYSQL_MGR_ARBITRATOR: 0 #指定当前MGR节点为Arbitrator角色,此时不能同时指定其为Primary/Secondary角色 + LOWER_CASE_TABLE_NAMES: 0 networks: mgr_net: #创建独立MGR专属网络 ipam: diff --git a/GreatSQL/greatsql-init.sh b/GreatSQL/greatsql-init.sh index 9f4d164..5a12174 100755 --- a/GreatSQL/greatsql-init.sh +++ b/GreatSQL/greatsql-init.sh @@ -78,6 +78,17 @@ _get_config() { # match "datadir /some/path with/spaces in/it here" but not "--xyz=abc\n datadir (xyz)" } +file_env 'LOWER_CASE_TABLE_NAMES' +if [ ! -z "$LOWER_CASE_TABLE_NAMES" ] ; then + if [ $LOWER_CASE_TABLE_NAMES -eq 1 ]; then + echo "$(sed 's/LOWER_CASE_TABLE_NAMES/1/g' /etc/my.cnf)" > /etc/my.cnf + else + echo "$(sed 's/LOWER_CASE_TABLE_NAMES/0/g' /etc/my.cnf)" > /etc/my.cnf + fi +else + echo "$(sed 's/LOWER_CASE_TABLE_NAMES/0/g' /etc/my.cnf)" > /etc/my.cnf +fi + if [ "$1" = 'mysqld' -a -z "$wantHelp" ]; then # still need to check config, container may have started with --user _check_config "$@" @@ -103,61 +114,75 @@ if [ "$1" = 'mysqld' -a -z "$wantHelp" ]; then file_env 'MYSQL_SID' SID=3306$(date +%N%1000|cut -b 1-3) if [ "$MYSQL_SID" ] ; then - sed -i "s/MYSQL_SID/${MYSQL_SID}/ig" /etc/my.cnf + echo "$(sed "s/MYSQL_SID/${MYSQL_SID}/ig" /etc/my.cnf)" > /etc/my.cnf else - sed -i "s/MYSQL_SID/${SID}/ig" /etc/my.cnf + echo "$(sed "s/MYSQL_SID/${SID}/ig" /etc/my.cnf)" > /etc/my.cnf fi file_env 'MYSQL_IBP' if [ "$MYSQL_IBP" ] ; then - sed -i "s/MYSQL_IBP/${MYSQL_IBP}/ig" /etc/my.cnf + echo "$(sed "s/MYSQL_IBP/${MYSQL_IBP}/ig" /etc/my.cnf)" > /etc/my.cnf else - sed -i "s/MYSQL_IBP/128M/ig" /etc/my.cnf + echo "$(sed "s/MYSQL_IBP/128M/ig" /etc/my.cnf)" > /etc/my.cnf fi file_env 'MYSQL_MGR_VIEWID' if [ "$MYSQL_MGR_VIEWID" ] ; then - sed -i "s/MYSQL_MGR_VIEWID/${MYSQL_MGR_VIEWID}/ig" /etc/my.cnf + echo "$(sed "s/MYSQL_MGR_VIEWID/${MYSQL_MGR_VIEWID}/ig" /etc/my.cnf)" > /etc/my.cnf else - sed -i "s/MYSQL_MGR_VIEWID/'AUTOMATIC'/ig" /etc/my.cnf + echo "$(sed "s/MYSQL_MGR_VIEWID/'AUTOMATIC'/ig" /etc/my.cnf)" > /etc/my.cnf fi file_env 'MYSQL_MGR_NAME' if [ "$MYSQL_MGR_NAME" ] ; then - sed -i "s/MYSQL_MGR_NAME/${MYSQL_MGR_NAME}/ig" /etc/my.cnf + echo "$(sed "s/MYSQL_MGR_NAME/${MYSQL_MGR_NAME}/ig" /etc/my.cnf)" > /etc/my.cnf else - sed -i "s/MYSQL_MGR_NAME/'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaa1'/ig" /etc/my.cnf + echo "$(sed "s/MYSQL_MGR_NAME/'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaa1'/ig" /etc/my.cnf)" > /etc/my.cnf fi file_env 'MYSQL_MGR_LOCAL' if [ "${MYSQL_MGR_LOCAL}" ] ; then - sed -i "s/MYSQL_MGR_LOCAL/${MYSQL_MGR_LOCAL}/ig" /etc/my.cnf + echo "$(sed "s/MYSQL_MGR_LOCAL/${MYSQL_MGR_LOCAL}/ig" /etc/my.cnf)" > /etc/my.cnf REPORT_HOST=`echo $MYSQL_MGR_LOCAL|awk -F ':' '{print $1}'` - sed -i "s/REPORT_HOST/${REPORT_HOST}/g" /etc/my.cnf + echo "$(sed "s/REPORT_HOST/${REPORT_HOST}/g" /etc/my.cnf)" > /etc/my.cnf else - sed -i "s/MYSQL_MGR_LOCAL/'172.17.0.2:33061'/ig" /etc/my.cnf - sed -i "s/REPORT_HOST/'172.17.0.2'/g" /etc/my.cnf + echo "$(sed "s/MYSQL_MGR_LOCAL/'172.17.0.2:33061'/ig" /etc/my.cnf)" > /etc/my.cnf + echo "$(sed "s/REPORT_HOST/'172.17.0.2'/g" /etc/my.cnf)" > /etc/my.cnf fi file_env 'MYSQL_MGR_SEEDS' if [ "${MYSQL_MGR_SEEDS}" ] ; then - sed -i "s/MYSQL_MGR_SEEDS/${MYSQL_MGR_SEEDS}/ig" /etc/my.cnf + echo "$(sed "s/MYSQL_MGR_SEEDS/${MYSQL_MGR_SEEDS}/ig" /etc/my.cnf)" > /etc/my.cnf else - sed -i "s/MYSQL_MGR_SEEDS/'172.17.0.2:33061,172.17.0.3:33061'/ig" /etc/my.cnf + echo "$(sed "s/MYSQL_MGR_SEEDS/'172.17.0.2:33061,172.17.0.3:33061'/ig" /etc/my.cnf)" > /etc/my.cnf fi file_env 'MYSQL_MGR_ARBITRATOR' if [ "${MYSQL_MGR_ARBITRATOR}" ] ; then - sed -i "s/MYSQL_MGR_ARBITRATOR/${MYSQL_MGR_ARBITRATOR}/ig" /etc/my.cnf + if [ ${MYSQL_MGR_ARBITRATOR} -eq 1 ]; then + echo "$(sed "s/MYSQL_MGR_ARBITRATOR/ON/ig" /etc/my.cnf)" > /etc/my.cnf + else + echo "$(sed "s/MYSQL_MGR_ARBITRATOR/OFF/ig" /etc/my.cnf)" > /etc/my.cnf + fi else - sed -i "s/MYSQL_MGR_ARBITRATOR/0/ig" /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 - sed -i "s/SINGLE_PRIMARY/0/g" /etc/my.cnf - else - sed -i "s/SINGLE_PRIMARY/1/g" /etc/my.cnf + if [ ${MYSQL_MGR_MULTI_PRIMARY} -eq 1 ]; then + 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/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/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" @@ -231,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 @@ -239,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} @@ -271,6 +295,7 @@ if [ "$1" = 'mysqld' -a -z "$wantHelp" ]; then fi echo + mkdir -p /docker-entrypoint-initdb.d ls /docker-entrypoint-initdb.d/ > /dev/null for f in /docker-entrypoint-initdb.d/*; do process_init_file "$f" "${mysql[@]}" @@ -288,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 @@ -302,16 +328,55 @@ fi file_env 'MYSQL_INIT_MGR' file_env 'MYSQL_MGR_START_AS_PRIMARY' if [ "${MYSQL_INIT_MGR}" ]; then - if [ $MYSQL_MGR_START_AS_PRIMARY -eq 1 ]; then - sed -i "s/START_MGR/ON/ig" /etc/my.cnf - sed -i "s/BOOTSTRAP_MGR/ON/ig" /etc/my.cnf + if [ ${MYSQL_MGR_START_AS_PRIMARY} -eq 1 ]; then + echo "$(sed "s/START_MGR/ON/ig" /etc/my.cnf)" > /etc/my.cnf + echo "$(sed "s/BOOTSTRAP_MGR/ON/ig" /etc/my.cnf)" > /etc/my.cnf else - sed -i "s/START_MGR/ON/ig" /etc/my.cnf - sed -i "s/BOOTSTRAP_MGR/OFF/ig" /etc/my.cnf + echo "$(sed "s/START_MGR/ON/ig" /etc/my.cnf)" > /etc/my.cnf + echo "$(sed "s/BOOTSTRAP_MGR/OFF/ig" /etc/my.cnf)" > /etc/my.cnf fi else - sed -i "s/START_MGR/OFF/ig" /etc/my.cnf - sed -i "s/BOOTSTRAP_MGR/OFF/ig" /etc/my.cnf + echo "$(sed "s/START_MGR/OFF/ig" /etc/my.cnf)" > /etc/my.cnf + echo "$(sed "s/BOOTSTRAP_MGR/OFF/ig" /etc/my.cnf)" > /etc/my.cnf +fi + +file_env 'MAXPERF' +mem=`free -m|grep Mem|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=${MAXPERF} +fi + +if [ "${MAXPERF}" == "1" ]; then + echo "$(sed "s/\(^max_connections\).*/\1 = 4096/ig" /etc/my.cnf)" > /etc/my.cnf + echo "$(sed "s/\(^open_files_limit\).*/\1 = 65535/ig" /etc/my.cnf)" > /etc/my.cnf + echo "$(sed "s/\(^table_open_cache\).*/\1 = 10240/ig" /etc/my.cnf)" > /etc/my.cnf + echo "$(sed "s/\(^table_definition_cache\).*/\1 = 10240/ig" /etc/my.cnf)" > /etc/my.cnf + echo "$(sed "s/\(^sort_buffer_size\).*/\1 = 16M/ig" /etc/my.cnf)" > /etc/my.cnf + echo "$(sed "s/\(^join_buffer_size\).*/\1 = 16M/ig" /etc/my.cnf)" > /etc/my.cnf + echo "$(sed "s/\(^read_buffer_size\).*/\1 = 16M/ig" /etc/my.cnf)" > /etc/my.cnf + echo "$(sed "s/\(^read_rnd_buffer_size\).*/\1 = 16M/ig" /etc/my.cnf)" > /etc/my.cnf + echo "$(sed "s/\(^thread_cache_size\).*/\1 = 8192/ig" /etc/my.cnf)" > /etc/my.cnf + echo "$(sed "s/\(^tmp_table_size\).*/\1 = 512M/ig" /etc/my.cnf)" > /etc/my.cnf + echo "$(sed "s/\(^max_heap_table_size\).*/\1 = 512M/ig" /etc/my.cnf)" > /etc/my.cnf + echo "$(sed "s/\(^temptable_max_ram\).*/\1 = 2G/ig" /etc/my.cnf)" > /etc/my.cnf + + echo "$(sed "s/\(^innodb_buffer_pool_size\).*/\1 = ${ibp_maxperf}M/ig" /etc/my.cnf)" > /etc/my.cnf + echo "$(sed "s/\(^innodb_redo_log_capacity\).*/\1 = 8G/ig" /etc/my.cnf)" > /etc/my.cnf + echo "$(sed "s/\(^innodb_io_capacity\).*/\1 = 40000/ig" /etc/my.cnf)" > /etc/my.cnf + echo "$(sed "s/\(^innodb_io_capacity_max\).*/\1 = 80000/ig" /etc/my.cnf)" > /etc/my.cnf + echo "$(sed "s/\(^innodb_open_files\).*/\1 = 65535/ig" /etc/my.cnf)" > /etc/my.cnf + echo "$(sed "s/\(^innodb_max_undo_log_size\).*/\1 = 16G/ig" /etc/my.cnf)" > /etc/my.cnf + echo "$(sed "s/\(^innodb_online_alter_log_max_size\).*/\1 = 16G/ig" /etc/my.cnf)" > /etc/my.cnf + + echo "$(sed "s/\(.*rapid_memory_limit\).*/\1 = ${rapid_mem_maxperf}M/ig" /etc/my.cnf)" > /etc/my.cnf + 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 fi exec "$@" diff --git a/GreatSQL/greatsql-shrink.sh b/GreatSQL/greatsql-shrink.sh index 49daf07..a910d19 100755 --- a/GreatSQL/greatsql-shrink.sh +++ b/GreatSQL/greatsql-shrink.sh @@ -1,20 +1,40 @@ #!/bin/sh -cd /data/docker-greatsql8032/ -cd ./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 +basedir=/usr/local/GreatSQL -cd /data/docker-greatsql8032/ -cd ./usr/sbin -rm -fr mysqld-debug +rm -fr $basedir/include -cd /data/docker-greatsql8032/ -cd ./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 /data/docker-greatsql8032/ -cd ./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 /data/docker-greatsql8032/ -tar cf greatsql-803224.tar ./etc ./usr ./var -xz -9 -f greatsql-803224.tar +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 new file mode 100644 index 0000000..8219ce3 --- /dev/null +++ b/GreatSQL/greatsql-test.sql @@ -0,0 +1,311 @@ +-- +-- greatsql-test.sql +-- GreatSQL 主要功能特性自测脚本,适配版本:8.4.4-4 +-- +-- +-- 主要测试项 +-- 1. 版本号以及Revision +-- 2. 采用Oracle数据类型建表 +-- 3. Oracle语法用法 +-- 4. 测试rapid引擎 +-- 5. 测试Clone加密 +-- 6. 测试MGR特性 +-- 7. 测试greatdb_ha特性 +-- 8. 测试turbo引擎 +-- +-- 关于检查结果: +-- 当检查结果输出内容包含 OK 时,表示检查结果正确 +-- 当检查结果输出内容包含 NG(NOT GOOD缩写) 时,表示检查结果异常,需要人为再确认 +-- +-- CHANGELOG +-- # 2025.10.15 +-- 1. 升级到 GreatSQL 8.4.4-4 +-- 2. 调整audit log filter测试方案 +-- 3. 修改相应的库名、表名 +-- + + +SET NAMES utf8mb4; + +-- 1. 版本号 +SELECT '--- 1. checking VERSION() ---' AS STAGE_1; +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 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. Oracle兼容性 +SELECT '--- 2. checking CREATE NEW DB & TABLE, INSERT & SELECT ROWS & Oracle compatibility ---' AS STAGE_2; + +-- 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 '', +c3 NUMBER UNSIGNED NOT NULL DEFAULT 0, +c4 PLS_INTEGER UNSIGNED NOT NULL DEFAULT 0 +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +-- 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)), +(8, rand(), rand(), ROUND(RAND()*1024000), ROUND(RAND()*1024000)), +(16, rand(), rand(), ROUND(RAND()*1024000), ROUND(RAND()*1024000)), +(32, rand(), rand(), ROUND(RAND()*1024000), ROUND(RAND()*1024000)); +SELECT IF(ROW_COUNT() = 6, 'OK, INSERT 6 ROWS', CONCAT('NG, INSERT ', ROW_COUNT(), ' ROWS')) AS 'check: INSERT ROWS WITH ORACLE DATA TYPE COLUMNS' FROM DUAL; +SELECT ' ' FROM DUAL; +SELECT ' ' FROM DUAL; + + +-- 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; + +-- 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; + +-- 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; + +-- SYSDATE +SELECT SYSDATE(), SYSDATE; +SELECT ' ' FROM DUAL; + +-- 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; + + +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; + +-- 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; + +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; + +-- INSERT ROWS +INSERT INTO t_8444_rapid VALUES +(1, RAND()*1024000, RAND()*1024000), +(2, RAND()*1024000, RAND()*1024000), +(4, RAND()*1024000, RAND()*1024000), +(8, RAND()*1024000, RAND()*1024000), +(16, RAND()*1024000, RAND()*1024000), +(32, RAND()*1024000, RAND()*1024000); +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; + +-- SECONDARY_LOAD +ALTER TABLE t_8444_rapid SECONDARY_LOAD; + +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; + +-- 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_8444_rapid; +SELECT ' ' FROM DUAL; + +-- 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. 并行LOAD DATA +SELECT '--- 5. checking PARALLEL LOAD DATA ---' AS STAGE_5; +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功能 +SELECT '--- 6. checking clone encrypt ---' AS STAGE_6; +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 ' ' FROM DUAL; + +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特性 +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'; +SELECT ' ' FROM DUAL; + +SELECT IF(VARIABLE_NAME = "group_replication_arbitrator", "OK, SUPPORT MGR arbitrator", "NG, NOT SUPPORT MGR arbitrator") AS '7.2 check: MGR arbitrator' FROM performance_schema.global_variables where variable_name = 'group_replication_arbitrator'; +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"; +SELECT IF(VARIABLE_NAME = "greatdb_ha_enable_mgr_vip", "OK, SUPPORT greatdb_ha", "NG, NOT SUPPORT greatdb_ha") AS '7.4 check: greatdb_ha' FROM performance_schema.global_variables where variable_name = 'greatdb_ha_enable_mgr_vip'; +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. 安全特性检查 +-- 支持审计日志写表 & 用户的登录信息记录 +-- 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 e0b2d15..ae4f498 100644 --- a/GreatSQL/my.cnf +++ b/GreatSQL/my.cnf @@ -1,149 +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" +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 -#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 +# 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 -#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_cache_size = 2G -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 +# 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 -#myisam settings -key_buffer_size = 32M -myisam_sort_buffer_size = 128M +# 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 -#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 +# Disalbe InnoDB PQ +loose-force_parallel_execute=OFF -#parallel query -loose-force_parallel_execute = ON +# Parallel LOAD DATA +loose-gdb_parallel_load=ON +loose-innodb_optimize_no_pk_parallel_load=ON -#parallel load data -loose-gdb_parallel_load = 1 +# 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 -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 cfa2881..febbb3e 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ --- ## 介绍 -GreatSQL软件相关Docker镜像集。 +GreatSQL相关Docker镜像集。 Dockerfiles可用于自定义和构建docker映像。[戳此阅读更多关于Dockerfiles的文档](https://docs.docker.com/engine/reference/builder/)。 @@ -13,333 +13,15 @@ Dockerfiles可用于自定义和构建docker映像。[戳此阅读更多关于Do 如果您发现任何GreatSQL-Docker项目相关的问题、bug,都可以[戳此提交issue](https://gitee.com/GreatSQL/GreatSQL-Docker/issues),我们将尽快处理。 - -## 快速使用 +## 基本信息 - 维护者: GreatSQL(greatsql@greatdb.com) - 联系人: greatsql@greatdb.com -## 支持哪些tag -- [latest](https://hub.docker.com/layers/greatsql/greatsql/latest/images/sha256-0d1ee8a01e4dec5d3698053319978c1817ca455eb6a11de9fa7e13b747fa9f3e?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-arch64](https://hub.docker.com/layers/greatsql/greatsql/latest-aarch64/images/sha256-97dfa7074a1c5b2e0355fcf5fc829e8074edca6db7c2e528059786fb0c48a523?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) - - -## 如何使用GreatSQL镜像 -例如: -``` -$ docker run -d \ ---name greatsql --hostname=greatsql \ -greatsql/greatsql -``` - -执行上述命令后,会创建一个GreatSQL运行环境容器,且采用空密码初始化。 - -几个参数简介: -*--name greatsql*,设定容器名称 -*--hostname=greatsql*,设定容器主机名 -*greatsql/greatsql*,指定容器使用的镜像名 - - -## 连接(容器中的)MySQL -运行下面的命令进入容器 -``` -$ docker exec -it greatsql bash -``` - -可以使用mysql 客户端工具(在docker镜像中,只保留了mysql这个客户端工具) -``` -[root@greatsql /]# mysql -Welcome to the MySQL monitor. Commands end with ; or \g. -Your MySQL connection id is 34 -Server version: 8.0.32-24 GreatSQL (GPL), Release 24, Revision c2e83f27394 -... -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-24 GreatSQL (GPL), Release 24, Revision c2e83f27394 -... -[root@GreatSQL][(none)]>select version(); -+-----------+ -| version() | -+-----------+ -| 8.0.32-24 | -+-----------+ -1 row in set (0.00 sec) -``` - -## 如何通过 docker-compose 使用GreatSQL镜像 - -下面是一个docker-compose的配置文件参考 `/data/docker/mysql.yml`: -``` -version: '2' - -services: - greatsql: - image: greatsql/greatsql - container_name: greatsql - hostname: greatsql - network_mode: bridge - restart: unless-stopped - environment: - TZ: Asia/Shanghai -``` - -运行 `docker-compose -f /data/docker/mysql.yml up -d` 即可创建一个新容器。 -运行下面的命令查看容器运行状态: -``` -$ docker-compose -f /data/docker/mysql.yml ps -``` - -运行下面的命令进入容器: -``` -$ docker exec -it greatsql bash -``` - -## 如何通过docker-compose构建MGR集群(单主模式) - -下面是一个docker-compose的配置文件参考 `/data/docker/mgr.yml`: -``` -version: '2' - -services: - mgr2: - image: greatsql/greatsql #指定镜像 - container_name: mgr2 #设定容器名字 - hostname: mgr2 #设定容器中的主机名 - networks: #指定容器使用哪个专用网络 - mgr_net: - ipv4_address: 172.18.0.2 #设置容器使用固定IP地址,避免重启后IP变化 - restart: unless-stopped #设定重启策略 - environment: #设置多个环境变量 - TZ: Asia/Shanghai #时区 - MYSQL_ALLOW_EMPTY_PASSWORD: 1 #允许root账户空密码 - MYSQL_INIT_MGR: 1 #初始化MGR集群 - MYSQL_MGR_LOCAL: '172.18.0.2:33061' #当前MGR节点的local_address - MYSQL_MGR_SEEDS: '172.18.0.2:33061,172.18.0.3:33061,172.18.0.4:33061' #MGR集群seeds - MYSQL_MGR_START_AS_PRIMARY: 1 #指定当前MGR节点为Primary角色 - MYSQL_MGR_ARBITRATOR: 0 - mgr3: - image: greatsql/greatsql - container_name: mgr3 - hostname: mgr3 - networks: - mgr_net: - ipv4_address: 172.18.0.3 - restart: unless-stopped - depends_on: - - "mgr2" - environment: - TZ: Asia/Shanghai - MYSQL_ALLOW_EMPTY_PASSWORD: 1 - MYSQL_INIT_MGR: 1 - MYSQL_MGR_LOCAL: '172.18.0.3:33061' - MYSQL_MGR_SEEDS: '172.18.0.2:33061,172.18.0.3:33061,172.18.0.4:33061' - MYSQL_MGR_START_AS_PRIMARY: 0 - MYSQL_MGR_ARBITRATOR: 0 #既非Primary,也非Arbitrator,那么就是Secondary角色了 - mgr4: - image: greatsql/greatsql - container_name: mgr4 - hostname: mgr4 - networks: - mgr_net: - ipv4_address: 172.18.0.4 - restart: unless-stopped - depends_on: - - "mgr3" - environment: - TZ: Asia/Shanghai - MYSQL_ALLOW_EMPTY_PASSWORD: 1 - MYSQL_INIT_MGR: 1 - MYSQL_MGR_LOCAL: '172.18.0.4:33061' - MYSQL_MGR_SEEDS: '172.18.0.2:33061,172.18.0.3:33061,172.18.0.4:33061' - MYSQL_MGR_START_AS_PRIMARY: 0 - MYSQL_MGR_ARBITRATOR: 1 #指定当前MGR节点为Arbitrator角色,此时不能同时指定其为Primary/Secondary角色 -networks: - mgr_net: #创建独立MGR专属网络 - ipam: - config: - - subnet: 172.18.0.0/24 -``` - -启动所有容器: -``` -$ docker-compse -f /data/docker/mgr.yml up -d -``` - -容器启动后,会自行进行MySQL实例的初始化并自动构建MGR集群。 - -进入第一个容器,确认实例启动并成为MGR的Primary节点: -``` -$ docker exec -it mgr2 bash -$ mysql -... -[root@GreatSQL][(none)]>select * from performance_schema.replication_group_members; -+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+----------------------------+ -| 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 | -+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+----------------------------+ -``` -可以看到,一个三节点的MGR集群已自动构建完毕,并且其中还包含一个ARBITRATOR节点(仲裁节点/投票节点)。 - - -## 如何通过docker-compose构建MGR集群(多主模式) - -下面是一个docker-compose的配置文件参考 `/data/docker/mgr-multi-primary.yml`: -``` -version: '2' - -services: - mgr2: - image: greatsql/greatsql - container_name: mgr2 #设定容器名字 - hostname: mgr2 #设定容器中的主机名 - networks: #指定容器使用哪个专用网络 - mgr_net: - ipv4_address: 172.18.0.2 #设置容器使用固定IP地址,避免重启后IP变化 - restart: unless-stopped #设定重启策略 - environment: #设置多个环境变量 - TZ: Asia/Shanghai #时区 - MYSQL_ALLOW_EMPTY_PASSWORD: 1 #允许root账户空密码 - MYSQL_INIT_MGR: 1 #初始化MGR集群 - MYSQL_MGR_LOCAL: '172.18.0.2:33061' #当前MGR节点的local_address - MYSQL_MGR_SEEDS: '172.18.0.2:33061,172.18.0.3:33061,172.18.0.4:33061' #MGR集群seeds - MYSQL_MGR_START_AS_PRIMARY: 1 #指定当前MGR节点为Primary角色 - MYSQL_MGR_MULTI_PRIMARY: 1 #指定是否采用多主模式 - MYSQL_MGR_ARBITRATOR: 0 - #MYSQL_MGR_VIEWID: "aaaaaaaa-bbbb-bbbb-aaaa-aaaaaaaaaaa1" - mgr3: - image: greatsql/greatsql - container_name: mgr3 - hostname: mgr3 - networks: - mgr_net: - ipv4_address: 172.18.0.3 - restart: unless-stopped - depends_on: - - "mgr2" - environment: - TZ: Asia/Shanghai - MYSQL_ALLOW_EMPTY_PASSWORD: 1 - MYSQL_INIT_MGR: 1 - MYSQL_MGR_LOCAL: '172.18.0.3:33061' - MYSQL_MGR_SEEDS: '172.18.0.2:33061,172.18.0.3:33061,172.18.0.4:33061' - MYSQL_MGR_START_AS_PRIMARY: 0 - MYSQL_MGR_MULTI_PRIMARY: 1 - MYSQL_MGR_ARBITRATOR: 0 #既非Primary,也非Arbitrator,那么就是Secondary角色了 - #MYSQL_MGR_VIEWID: "aaaaaaaa-bbbb-bbbb-aaaa-aaaaaaaaaaa1" - mgr4: - image: greatsql/greatsql - container_name: mgr4 - hostname: mgr4 - networks: - mgr_net: - ipv4_address: 172.18.0.4 - restart: unless-stopped - depends_on: - - "mgr3" - environment: - TZ: Asia/Shanghai - MYSQL_ALLOW_EMPTY_PASSWORD: 1 - MYSQL_INIT_MGR: 1 - MYSQL_MGR_LOCAL: '172.18.0.4:33061' - MYSQL_MGR_SEEDS: '172.18.0.2:33061,172.18.0.3:33061,172.18.0.4:33061' - MYSQL_MGR_START_AS_PRIMARY: 0 - MYSQL_MGR_MULTI_PRIMARY: 1 - MYSQL_MGR_ARBITRATOR: 0 #指定当前MGR节点为Arbitrator角色,此时不能同时指定其为Primary/Secondary角色 - #MYSQL_MGR_VIEWID: "aaaaaaaa-bbbb-bbbb-aaaa-aaaaaaaaaaa1" -networks: - mgr_net: #创建独立MGR专属网络 - ipam: - config: - - subnet: 172.18.0.0/24 -``` - -启动所有容器: -``` -$ docker-compse -f /data/docker/mgr-multi-primary.yml up -d -``` - -容器启动后,会自行进行MySQL实例的初始化并自动构建MGR集群。 - -进入第一个容器,确认实例启动并成为MGR的Primary节点: -``` -$ docker exec -it mgr2 bash -$ mysql -... -[root@GreatSQL][(none)]>select * from performance_schema.replication_group_members; -+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+----------------------------+ -| 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 | -+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+----------------------------+ -``` -可以看到,一个三节点的MGR集群已自动构建完毕,运行模式为多主模式。 - -## Docker-Compose环境变量/参数介绍 -- **MYSQL_ROOT_PASSWORD** -设置MySQL root账号的密码。如果下面指定了MYSQL_ALLOW_EMPTY_PASSWORD=1,则本参数无效。 - -- **MYSQL_DATABASE** -是否初始化一个新的数据库。 - -- **MYSQL_ALLOW_EMPTY_PASSWORD** -是否设置MySQL root账号使用空密码,因为安全原因,不推荐这么做。 - -- **MYSQL_RANDOM_ROOT_PASSWORD** -设置MySQL root账号的密码采用随机生成方式。 - -- **MYSQL_IBP** -设置innodb_buffer_pool_size,默认值:128M。 - -- **MYSQL_INIT_MGR** -是否初始化MGR相关设置,默认值:0(否)。如果设置为1(是),则会创建MGR服务所需账号,并设定运行 CHANGE MASTER TO 设置好MGR复制通道。 -非必选项。 - -- **MYSQL_MGR_NAME** -设置group_replication_group_name,默认值:"aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaa1"。 -非必选项。 - -- **MYSQL_MGR_LOCAL** -设置 group_replication_local_address,默认值:"172.17.0.2:33061"。 -如果 MYSQL_INIT_MGR=1 则为必选项。 - -- **MYSQL_MGR_SEEDS** -设置 group_replication_group_seeds,默认值:"172.17.0.2:33061,172.17.0.3:33061"。 -如果 MYSQL_INIT_MGR=1 则为必选项。 - -- **MYSQL_MGR_USER** -设置MGR服务所需账号,默认值:repl。 -非必选项。 - -- **MYSQL_MGR_USER_PWD** -设置MGR服务所需账号的密码,默认值:repl4MGR。 -非必选项。 - -- **MYSQL_SID** -设置server_id选项,构建MGR集群时要求每个节点的server_id是唯一的,默认值:3306+随机数 -非必选项。 - -- **MYSQL_MGR_START_AS_PRIMARY** -指定当前节点在MGR中以PRIMARY角色启动,每次都会进行MGR初始化引导操作。默认值:0。 -如果 MYSQL_INIT_MGR=1 则至少要有一个节点指定为PRIMARY角色。 - -- **MYSQL_MGR_MULTI_PRIMARY** -设置是否采用多主模式运行。默认值:0。 -如果 MYSQL_MGR_MULTI_PRIMARY=1,则【有且只能选择一个节点】设置 MYSQL_MGR_START_AS_PRIMARY=1,该节点会采用引导模式启动,其余节点不设置引导模式。 - -- **MYSQL_MGR_ARBITRATOR** -指定当前节点在MGR中以ARBITRATOR角色启动,该选项和**MYSQL_MGR_START_AS_PRIMARY**是互斥的,不能同时设置为1。默认值:0。 -非必选项。 - -- **MYSQL_MGR_VIEWID** -MySQL 8.0.26开始,可以为view change单独指定一个GTID前缀,避免和正常的事务GTID混杂一起,产生问题。默认值:AUTOMATIC。 -非必选项。 +## 镜像仓库列表 +- GreatSQL,构建GreatSQL运行环境的Docker镜像 +- GreatSQL-Build,构建GreatSQL编译环境的Docker镜像 +- GreatSQL-Shell,构建MySQL Shell for GreatSQL运行环境的Docker镜像 +- GreatSQL-Shell-Build,构建MySQL Shell for GreatSQL编译环境的Docker镜像 ## 联系我们 扫码关注微信公众号 diff --git a/deppkgs/antlr4-4.10.tar.xz b/deppkgs/antlr4-4.10.tar.xz new file mode 100644 index 0000000..d3f25ef Binary files /dev/null and b/deppkgs/antlr4-4.10.tar.xz differ diff --git a/deppkgs/deps-v8/yum-repos.tar.xz b/deppkgs/deps-v8/yum-repos.tar.xz new file mode 100644 index 0000000..049b2b9 Binary files /dev/null and b/deppkgs/deps-v8/yum-repos.tar.xz differ diff --git a/deppkgs/patchelf-0.14.5.tar.gz b/deppkgs/patchelf-0.14.5.tar.gz new file mode 100644 index 0000000..49bc5d7 Binary files /dev/null and b/deppkgs/patchelf-0.14.5.tar.gz differ diff --git a/deppkgs/protobuf-3.19.4.tar.xz b/deppkgs/protobuf-3.19.4.tar.xz new file mode 100644 index 0000000..f3b1655 Binary files /dev/null and b/deppkgs/protobuf-3.19.4.tar.xz differ diff --git a/deppkgs/rpcgen-1.3.1-4.el8.aarch64.rpm b/deppkgs/rpcgen-1.3.1-4.el8.aarch64.rpm new file mode 100644 index 0000000..2cf092a Binary files /dev/null and b/deppkgs/rpcgen-1.3.1-4.el8.aarch64.rpm differ diff --git a/deppkgs/rpcgen-1.3.1-4.el8.x86_64.rpm b/deppkgs/rpcgen-1.3.1-4.el8.x86_64.rpm new file mode 100644 index 0000000..2202ca1 Binary files /dev/null and b/deppkgs/rpcgen-1.3.1-4.el8.x86_64.rpm differ