diff --git a/README.md b/README.md index 26f71acd4b92ed1ec5dae921d40c7bc740ff9855..5a1330ca5d9a28a366a8aa98a1973af4c777dd07 100644 --- a/README.md +++ b/README.md @@ -2,11 +2,11 @@ GreatSQL 数据库是一款 **开源免费** 数据库,可在普通硬件上满足金融级应用场景,具有 **高可用**、**高性能**、**高兼容**、**高安全** 等特性,可作为 MySQL 或 Percona Server for MySQL 的理想可选替换。 -最新版本:GreatSQL 8.0.32-26。 +最新版本:GreatSQL 8.0.32-27。 ## 下载GreatSQL -- [下载 GreatSQL 最新版本](https://gitee.com/GreatSQL/GreatSQL/releases/GreatSQL-8.0.32-26) +- [下载 GreatSQL 最新版本](https://gitee.com/GreatSQL/GreatSQL/releases/GreatSQL-8.0.32-27) - [下载 GreatSQL 历史版本](https://gitee.com/GreatSQL/GreatSQL/releases/) # GreatSQL核心特性 @@ -31,13 +31,16 @@ GreatSQL 数据库是一款 **开源免费** 数据库,可在普通硬件上 - 优化了 MGR 事务认证队列清理算法,高负载下不复存在每 60 秒性能抖动问题。 - 解决了 MGR 中长事务造成无法选主的问题。 - 修复了 MGR recovery 过程中长时间等待的问题。 +- 优化了MGR大事务传输时压缩超过限制的处理机制。 更多信息详见文档:[高可用](https://greatsql.cn/docs/5-enhance/5-2-ha.html)。 ### [高性能](https://greatsql.cn/docs/5-enhance/5-1-highperf.html) -相对 MySQL 及 Percona Server For MySQL 的性能表现更稳定优异,支持 Rapid 引擎、事务无锁化、并行 LOAD DATA、异步删除大表、线程池、非阻塞式 DDL、NUMA 亲和调度优化 等特性,在 TPC-C 测试中相对 MySQL 性能提升超过 30%,在 TPC-H 测试中的性能表现是 MySQL 的十几倍甚至上百倍。 + +相对 MySQL 及 Percona Server For MySQL 的性能表现更稳定优异,支持 Rapid 引擎、Turbo引擎、事务无锁化、并行 LOAD DATA、异步删除大表、线程池、非阻塞式 DDL、NUMA 亲和调度优化 等特性,在 [TPC-C 测试中相对 MySQL 性能提升超过 30%](https://greatsql.cn/docs/10-optimize/3-5-benchmark-greatsql-vs-mysql-tpcc-report.html),在 [TPC-H 测试中的性能表现是 MySQL 的十几倍甚至上百倍](https://greatsql.cn/docs/10-optimize/3-3-benchmark-greatsql-tpch-report.html)。 - 支持 [大规模并行、基于内存查询、高压缩比的高性能 Rapid 引擎](https://greatsql.cn/docs/5-enhance/5-1-highperf-rapid-engine.html),可将数据分析性能提升几个数量级。 +- 支持 [高性能并行查询引擎Turbo](https://greatsql.cn/docs/5-enhance/5-1-highperf-turbo-engine.html),使GreatSQL具备多线程并发的向量化实时查询功能。 - 优化 InnoDB 事务系统,实现了大锁拆分及无锁化等多种优化方案,OLTP 场景整体性能提升约 20%。 - 支持 [并行 LOAD DATA](https://greatsql.cn/docs/5-enhance/5-1-highperf-parallel-load.html),适用于频繁导入大批量数据的应用场景,性能可提升约 20 多倍;对于无显式定义主键的场景亦有优化提升。 - 支持 [异步删除大表](https://greatsql.cn/docs/5-enhance/5-1-highperf-async-purge-big-table.html),提高 InnoDB 引擎运行时性能的稳定性。 @@ -68,14 +71,19 @@ GreatSQL 支持逻辑备份加密、CLONE 备份加密、审计、表空间国 ### [其他](https://greatsql.cn/docs/5-enhance/5-5-others.html) - 支持 [Clone 在线全量热备、增备及恢复](https://greatsql.cn/docs/5-enhance/5-5-clone-compressed-and-incrment-backup.html),结合 Binlog 可实现恢复到指定时间点。此外,Clone 备份还支持压缩功能。 +- 支持 [InnoDB Page透明压缩采用Zstd算法](https://greatsql.cn/docs/5-enhance/5-5-innodb-page-compression.html),进一步提高数据压缩率,尤其是当有大量长文本重复数据时。 ## 安装GreatSQL ### 安装 jemalloc(推荐) -运行 GreatSQL 时如果有 jemalloc 支持,则数据库进程的内存分配会更稳定、高效,因此建议安装 jemalloc(非必须)。采用类似下面的方法安装 jemalloc 软件包: +运行 GreatSQL 时如果有 jemalloc 支持,则数据库进程的内存分配会更稳定、高效,因此建议安装 jemalloc(非必须)。 -``` +如果是ARM环境下,可以不必安装配置 jemalloc 依赖。 + +以 CentOS 8 x86_64 系统为例,采用类似下面的方法安装 jemalloc 软件包: + +```bash # 先安装 epel 源 $ yum install -y epel-release @@ -85,14 +93,14 @@ $ yum -y install jemalloc jemalloc-devel 也可以把自行安装的动态库so文件路径加到系统配置文件中,例如: -``` +```bash $ cat /etc/ld.so.conf /usr/local/lib64/ ``` 而后执行下面的操作加载libjemalloc库,并确认是否已存在 -``` +```bash $ ldconfig $ ldconfig -p | grep libjemalloc @@ -146,15 +154,14 @@ $ systemctl status mysqld ... ``` -## my.cnf参考 - -RPM方式安装后的GreatSQL默认配置不是太合理,建议参考下面这份my.cnf文档: +就可以正常启动 GreatSQL 服务了。 -- [my.cnf for GreatSQL 8.0.32-26](https://gitee.com/GreatSQL/GreatSQL-Doc/blob/master/docs/my.cnf-example-greatsql-8.0.32-26) +想要 GreatSQL 更高效运行,建议参考这份 my.cnf 配置模板:[my.cnf for GreatSQL](https://gitee.com/GreatSQL/GreatSQL-Doc/blob/master/docs/my.cnf-example)。 调整文档中关于`datadir`目录配置等相关选项,默认 `datadir=/var/lib/mysql` 通常都会改掉,例如替换成 `datadir=/data/GreatSQL`,修改完后保存退出, 替换原来的 `/etc/my.cnf`,然后重启GreatSQL,会重新进行初始化。 -``` + +```bash # 新建 /data/GreatSQL 空目录,并修改目录所有者 $ mkdir -p /data/GreatSQL $ chown -R mysql:mysql /data/GreatSQL @@ -164,19 +171,22 @@ $ systemctl restart mysqld ``` ## 登入GreatSQL + 首次登入GreatSQL前,需要先找到初始化时随机生成的root密码: -``` + +```bash $ grep root /data/GreatSQL/error.log [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: dt_)MtExl594 ``` 其中的 **dt_)MtExl594** 就是初始化时随机生成的密码,在登入GreatSQL时输入该密码: -``` + +```bash $ mysql -uroot -p'dt_)MtExl594' mysql: [Warning] Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 8 -Server version: 8.0.32-26 +Server version: 8.0.32-27 Copyright (c) 2021-2021 GreatDB Software Co., Ltd Copyright (c) 2009-2021 Percona LLC and/or its affiliates @@ -203,8 +213,8 @@ Query OK, 0 rows affected (0.02 sec) ## 创建新用户、测试库&表,及写入数据 修改完root密码后,应尽快创建普通用户,用于数据库的日常使用,减少超级用户root的使用频率,避免误操作意外删除重要数据。 ``` -#创建一个新用户GreatSQL,只允许从192.168.0.0/16网络连入,密码是 GreatSQL-2024 -mysql> CREATE USER GreatSQL@'192.168.0.0/16' IDENTIFIED BY 'GreatSQL-2024'; +#创建一个新用户GreatSQL,只允许从192.168.0.0/16网络连入,密码是 GreatSQL-2025 +mysql> CREATE USER GreatSQL@'192.168.0.0/16' IDENTIFIED BY 'GreatSQL-2025'; Query OK, 0 rows affected (0.06 sec) #创建一个新的用户库,并对GreatSQL用户授予读写权限 @@ -217,7 +227,7 @@ Query OK, 0 rows affected (0.03 sec) 切换到普通用户GreatSQL登入,创建测试表,写入数据: ``` -$ mysql -h192.168.1.10 -uGreatSQL -p'GreatSQL-2024' +$ mysql -h192.168.1.10 -uGreatSQL -p'GreatSQL-2025' ... # 切换到GreatSQL数据库下 mysql> use GreatSQL; @@ -248,36 +258,13 @@ mysql> SELECT * FROM t1; 戳此查看 [GreatSQL 版本历史](https://greatsql.cn/docs/1-docs-intro/1-2-release-history.html)。 ## QA测试 -GreatSQL 8.0.32-25 已经在 openEuler 24.03 LTS 环境下通过 QA 测试,表明 GreatSQL 与 openEuler 开源操作系统完全兼容,功能齐全,测试完备。 - -相关测试报告详见:[openEuler-24.03-LTS-GreatSQL测试报告](https://gitee.com/openeuler/QA/blob/master/Test_Result/openEuler_24.03_LTS/openEuler-24.03-LTS-GreatSQL%E6%B5%8B%E8%AF%95%E6%8A%A5%E5%91%8A.md)。 +GreatSQL 8.0.32-27 已经在 openEuler-25.03 环境下通过回归测试,表明 GreatSQL 与 openEuler-25.03 完全兼容,功能齐全,测试完备。 -GreatSQL 8.0.25-16 已经在 openEuler 20.03 (LTS-SP2) 环境下通过 MTR 回归测试,表明 GreatSQL 与 openEuler 开源操作系统完全兼容,功能齐全,测试完备。 - -相关MTR测试报告详见:[GreatSQL 8.0.25-16通过MTR回归测试](https://gitee.com/src-openeuler/greatsql/blob/master/greatsql-802516-mtr-passed.md)。 - -## 更多使用文档 ---- -- [GreatSQL MGR FAQ](https://gitee.com/GreatSQL/GreatSQL-Doc/blob/master/docs/GreatSQL-FAQ.md) -- [在Linux下源码编译安装GreatSQL](https://gitee.com/GreatSQL/GreatSQL-Doc/blob/master/docs/build-greatsql-with-source.md) -- [在openEuler环境下快速编译GreatSQL RPM包](https://gitee.com/GreatSQL/GreatSQL-Doc/blob/master/docs/build-greatsql-rpm-under-openeuler.md) -- [利用Ansible安装GreatSQL并构建MGR集群](https://gitee.com/GreatSQL/GreatSQL-Doc/blob/master/docs/install-greatsql-with-ansible.md) -- [在Docker中部署GreatSQL并构建MGR集群](https://gitee.com/GreatSQL/GreatSQL-Doc/blob/master/docs/install-greatsql-with-docker.md) -- [利用GreatSQL部署MGR集群](https://gitee.com/GreatSQL/GreatSQL-Doc/blob/master/docs/using-greatsql-to-build-mgr-and-node-manage.md) -- [MySQL InnoDB Cluster+GreatSQL部署MGR集群](https://gitee.com/GreatSQL/GreatSQL-Doc/blob/master/docs/mysql-innodb-cluster-with-greatsql.md) -- [利用systemd管理MySQL单机多实例](https://gitee.com/GreatSQL/GreatSQL-Doc/blob/master/docs/build-multi-instance-with-systemd.md) - -## 专栏文章 -- [深入浅出MGR专栏文章](https://gitee.com/GreatSQL/GreatSQL-Doc/blob/master/deep-dive-mgr),深入浅出MGR相关知识点、运维管理实操,配合「实战MGR」视频内容食用更佳。 - -## 相关资源 -- [GreatSQL用户手册](https://gitee.com/GreatSQL/GreatSQL-Manual),最新版本GreatSQL用户手册 -- [GreatSQL-Docker](https://gitee.com/GreatSQL/GreatSQL-Docker),在Docker中运行GreatSQL -- [GreatSQL-Ansible](https://gitee.com/GreatSQL/GreatSQL-Ansible),利用Ansible一键安装GreatSQL并完成MGR集群部署 +相关回归测试报告详见:[openEuler-25.03-GreatSQL测试报告](./openEuler-25.03-GreatSQL测试报告.md)。 ## GreatSQL vs MySQL -| **1.主要特性** | GreatSQL 8.0.32-26 | MySQL 8.0.32 | +| **1.主要特性** | GreatSQL 8.0.32-27 | MySQL 8.0.32 | | :--- | :---: | :---: | | 开源 | :heavy_check_mark: | :heavy_check_mark: | |ACID 完整性| :heavy_check_mark: | :heavy_check_mark: | @@ -297,8 +284,9 @@ GreatSQL 8.0.25-16 已经在 openEuler 20.03 (LTS-SP2) 环境下通过 MTR 回 |组复制(MGR)| :heavy_check_mark: | :heavy_check_mark: | |MyRocks 引擎| :heavy_check_mark: | ❌ | |支持龙芯架构| :heavy_check_mark: | ❌ | -| **2. 性能提升扩展** | GreatSQL 8.0.32-26 | MySQL 8.0.32 | -|AP 引擎| :heavy_check_mark: | 仅云上HeatWave | +| **2. 性能提升扩展** | GreatSQL 8.0.32-27 | MySQL 8.0.32 | +|Rapid 引擎| :heavy_check_mark: | 仅云上HeatWave | +|Turbo 引擎| :heavy_check_mark: | ❌ | |NUMA 亲和性优化| :heavy_check_mark: | ❌ | |非阻塞式 DDL| :heavy_check_mark: | ❌ | |无主键表导入优化 | :heavy_check_mark: | ❌ | @@ -306,6 +294,7 @@ GreatSQL 8.0.25-16 已经在 openEuler 20.03 (LTS-SP2) 环境下通过 MTR 回 |并行 LOAD DATA| :heavy_check_mark: | ❌ | |InnoDB 事务 ReadView 无锁优化| :heavy_check_mark: | ❌ | |InnoDB 事务大锁拆分优化| :heavy_check_mark: | ❌ | +|InnoDB page压缩支持zstd| :heavy_check_mark: | ❌ | |InnoDB 资源组| :heavy_check_mark: | :heavy_check_mark: | |自定义 InnoDB 页大小| :heavy_check_mark: | :heavy_check_mark: | |Contention-Aware Transaction Scheduling| :heavy_check_mark: | :heavy_check_mark: | @@ -316,7 +305,7 @@ GreatSQL 8.0.25-16 已经在 openEuler 20.03 (LTS-SP2) 环境下通过 MTR 回 |InnoDB 快速索引创建优化| :heavy_check_mark: | ❌ | |VARCHAR/BLOB/JSON 类型存储单列压缩| :heavy_check_mark: | ❌ | |数据字典中存储单列压缩信息| :heavy_check_mark: | ❌ | -| **3. 面向开发者提升改进** | GreatSQL 8.0.32-26 | MySQL 8.0.32 | +| **3. 面向开发者提升改进** | GreatSQL 8.0.32-27 | MySQL 8.0.32 | |X API| :heavy_check_mark: | :heavy_check_mark: | |JSON| :heavy_check_mark: | :heavy_check_mark: | |NoSQL Socket-Level接口| :heavy_check_mark: | :heavy_check_mark: | @@ -326,7 +315,7 @@ GreatSQL 8.0.25-16 已经在 openEuler 20.03 (LTS-SP2) 环境下通过 MTR 回 |Oracle 兼容-函数| :heavy_check_mark: | ❌ | |Oracle 兼容-SQL语法| :heavy_check_mark: | ❌ | |Oracle 兼容-存储程序| :heavy_check_mark: | ❌ | -| **4. 基础特性提升改进** | GreatSQL 8.0.32-26 | MySQL 8.0.32 | +| **4. 基础特性提升改进** | GreatSQL 8.0.32-27 | MySQL 8.0.32 | |MGR 提升-地理标签| :heavy_check_mark: | ❌ | |MGR 提升-仲裁节点| :heavy_check_mark: | ❌ | |MGR 提升-读写节点绑定VIP| :heavy_check_mark: | ❌ | @@ -337,6 +326,7 @@ GreatSQL 8.0.25-16 已经在 openEuler 20.03 (LTS-SP2) 环境下通过 MTR 回 |MGR 提升-节点异常退出处理 | :heavy_check_mark: | ❌ | |MGR 提升-节点磁盘满处理 | :heavy_check_mark: | ❌ | |MGR 提升-自动选择 donor 节点| :heavy_check_mark: | ❌ | +|MGR 提升-大事务压缩优化| :heavy_check_mark: | ❌ | |Clone 增量备份| :heavy_check_mark: | ❌ | |Clone 备份压缩| :heavy_check_mark: | ❌ | |Binlog 读取限速| :heavy_check_mark: | ❌ | @@ -354,7 +344,7 @@ GreatSQL 8.0.25-16 已经在 openEuler 20.03 (LTS-SP2) 环境下通过 MTR 回 |临时表信息增强| :heavy_check_mark: | ❌ | |用户统计信息增强| :heavy_check_mark: | ❌ | |Slow log 信息增强| :heavy_check_mark: | ❌ | -| **5.安全性提升** | GreatSQL 8.0.32-26 | MySQL 8.0.32 | +| **5.安全性提升** | GreatSQL 8.0.32-27 | MySQL 8.0.32 | |国密支持| :heavy_check_mark: | ❌ | |备份加密| :heavy_check_mark: | ❌ | |审计| :heavy_check_mark: | 仅企业版 | @@ -372,7 +362,7 @@ GreatSQL 8.0.25-16 已经在 openEuler 20.03 (LTS-SP2) 环境下通过 MTR 回 |二进制日志加密| :heavy_check_mark: | ❌ | |临时文件加密| :heavy_check_mark: | ❌ | |强制加密| :heavy_check_mark: | ❌ | -| **6. 运维便利性提升** | GreatSQL 8.0.32-26 | MySQL 8.0.32 | +| **6. 运维便利性提升** | GreatSQL 8.0.32-27 | MySQL 8.0.32 | |DDL 原子性| :heavy_check_mark: | :heavy_check_mark: | |数据字典存储 InnoDB 表| :heavy_check_mark: | :heavy_check_mark: | |快速 DDL| :heavy_check_mark: | :heavy_check_mark: | @@ -385,7 +375,9 @@ GreatSQL 8.0.25-16 已经在 openEuler 20.03 (LTS-SP2) 环境下通过 MTR 回 |杀掉不活跃事务| :heavy_check_mark: | ❌ | |START TRANSACTION WITH CONSISTENT SNAPSHOT 扩展| :heavy_check_mark: | ❌ | -GreatSQL 8.0.32-26 基于 Percona Server for MySQL 8.0.32 版本,它在 MySQL 8.0.32 基础上做了大量的改进和提升以及众多新特性,详情请见:[**Percona Server for MySQL feature comparison**](https://docs.percona.com/percona-server/8.0/feature-comparison.html),这其中包括线程池、审计、数据脱敏等 MySQL 企业版才有的特性,以及 performance_schema 提升、information_schema 提升、性能和可扩展性提升、用户统计增强、PROCESSLIST 增强、Slow Log 增强等大量改进和提升,这里不一一重复列出。 +GreatSQL 8.0.32-27 基于 Percona Server for MySQL 8.0.32 版本,它在 MySQL 8.0.32 基础上做了大量的改进和提升以及众多新特性,详情请见:[**Percona Server for MySQL feature comparison**](https://docs.percona.com/percona-server/8.0/feature-comparison.html),这其中包括线程池、审计、数据脱敏等 MySQL 企业版才有的特性,以及 performance_schema 提升、information_schema 提升、性能和可扩展性提升、用户统计增强、PROCESSLIST 增强、Slow Log 增强等大量改进和提升,这里不一一重复列出。 + +GreatSQL同时也是gitee(码云)平台上的GVP项目,详见:[https://gitee.com/gvp/database-related](https://gitee.com/gvp/database-related) **数据库相关**类目。 ## 许可/Licensing diff --git a/add-riscv64-support.patch b/add-riscv64-support.patch index aebf683349258450813411ac959d1f2b9fd48127..90b5f128848fa0c209414a371c3abe5509d2d081 100644 --- a/add-riscv64-support.patch +++ b/add-riscv64-support.patch @@ -1,271 +1,25 @@ -From 4b4dda1680186c8f66fd011123fe292d42fbdbf1 Mon Sep 17 00:00:00 2001 -From: sammmmy <843683531@qq.com> +From: GreatSQL Date: Mon, 30 Sep 2024 20:32:57 +0800 -Subject: [PATCH 1/2] add riscv64 support +Date: Thu, 06 Mar 2025 14:08:51 +0800 +Subject: [PATCH] add riscv64 support ---- - ...36\345\275\222\346\265\213\350\257\225.md" | 244 +++++++++ - storage/ndb/include/portlib/mt-asm.h | 13 + - ...57\221\345\256\211\350\243\205GreatSQL.md" | 513 ++++++++++++++++++ - 3 files changed, 770 insertions(+) - create mode 100644 "GreatSQL 8.0.32-25\345\234\250openEuler riscv64\344\270\255\345\256\214\346\210\220MTR\345\233\236\345\275\222\346\265\213\350\257\225.md" - create mode 100644 "\345\234\250OpenEuler RISC-V\347\216\257\345\242\203\344\270\213\346\272\220\347\240\201\347\274\226\350\257\221\345\256\211\350\243\205GreatSQL.md" - -diff --git "a/GreatSQL 8.0.32-25\345\234\250openEuler riscv64\344\270\255\345\256\214\346\210\220MTR\345\233\236\345\275\222\346\265\213\350\257\225.md" "b/GreatSQL 8.0.32-25\345\234\250openEuler riscv64\344\270\255\345\256\214\346\210\220MTR\345\233\236\345\275\222\346\265\213\350\257\225.md" -new file mode 100644 -index 00000000000..ba68d2665b5 ---- /dev/null -+++ "b/GreatSQL 8.0.32-25\345\234\250openEuler riscv64\344\270\255\345\256\214\346\210\220MTR\345\233\236\345\275\222\346\265\213\350\257\225.md" -@@ -0,0 +1,244 @@ -+# GreatSQL 8.0.32-25在openEuler riscv64中完成MTR回归测试 -+ -+## 1. 测试目的与思路 -+ -+本测试开展于将GreatSQL 8.0.32-25通过源码编译移植到openEuler riscv64环境之后,旨在测试GreatSQL是否成功移植,基本功能是否正常,能否跑过常规的MTR测例。 -+ -+MTR测例有pass、fail、skipped、disabled四种情况,其中只有fail用例会导致测试终止。测试开展思路是在OpenEuler x86上安装GreatSQL 8.0.32-25作为对比环境,运行多个相同的测试用例集。如果两台机器都因为相同的fail用例而停止,且completed tests数量相同、restarted/reinitialized次数相同、skipped用例数量相同、fail用例的错误日志内容相同,则说明不是riscv架构的原因,删除fail用例继续执行即可。 -+ -+在实际测试过程中,我们发现在x86中的所有fail用例在riscv64也同样fail了,但是riscv64相比x86有少量额外fail和pass的用例,两环境通过用例的总数相近,分别是6904和6875。所以认为GreatSQL在openEuler riscv64环境中成功移植,能跑过常规的MTR测例。 -+ -+## 2. 测试环境与命令 -+ -+### 2.1 准备openEuler x86 24.03环境 -+ -+参考[VMware虚拟机安装openEuler系统](https://blog.csdn.net/m0_74451345/article/details/136060845)。 -+ -+### 2.2 使用RPM安装GreatSQL 8.0.32-25 -+ -+参考[手册](https://greatsql.cn/docs/8.0.32-25/4-install-guide/2-install-with-rpm.html),在[欧拉目录](https://repo.huaweicloud.com/openeuler/openEuler-24.03-LTS/everything/x86_64/Packages/)安装8个greatsql的rpm包,注意一定要安装greatsql-test包,这样才包含mysql-test组件。 -+ -+安装过程中如果出现找不到libssl.so.1.1和libcrypto.so.1.1的问题,可通过软链接解决。如果出现了系统升级相关的报错,无需理会。 -+ -+使用`systemctl status mysqld`启动时,如果因为内存带下进程被杀,把innodb的参数注释或调小即可。注意每次重启服务清空/data/GreatSQL/*。 -+ -+### 2.3 运行MTR -+ -+x86在/usr/share/mysql-test目录,riscv在/usr/local/GreatSQL-8.0.32-25/mysql-test目录,运行`./mtr --record --nowarnings --big-test`: -+ -+- --big-test:执行标记为 `big` 的用例,也就是同时覆盖非 big + big。这是因为标记为 big 的 case 较大、耗时较长,默认不会执行。 -+- --record:是否记录 results 结果,让其自动生成 `.results` 文件。 -+- --nowarnings:忽略 warnings 错误。 -+ -+因为用例数目众多容易超时,建议依次测试每个用例集,修改mtr文件的`@DEFAULT_SUITES`即可。 -+ -+### 2.4 测试信息 -+ -+本节描述被测对象的版本信息和测试的时间及测试轮次,包括依赖的硬件。 -+ -+| 被测软件版本 | 系统版本 | 硬件信息 | 硬件配置信息 | 测试起始时间 | 测试结束时间 | -+| ------------------ | --------------- | -------- | ------------- | ------------ | ------------ | -+| GreatSQL-8.0.32-25 | openEuler 24.03 | x86 | 8核心 32G内存 | 2024-09-11 | 2024-09-30 | -+| | openEuler 23.09 | riscv64 | 8核心 16G内存 | | | -+ -+## 3. 测试结果 -+ -+### 3.1 概述 -+ -+本次对`GreatSQL-8.0.32-25`版本进行回归测试,共执行测试用例9507个。其中x86中通过6904个,riscv64中通过6875个。 -+ -+### 3.2 总览 -+ -+| | x86 pass用例数 | riscv pass用例数 | x86 test文件个数 | riscv64 test文件个数 | riscv额外fail的用例数 | riscv额外fail的用例 | | | | | | | -+| ------------------------------- | -------------- | ---------------- | ---------------- | -------------------- | --------------------- | --------------------------------------------------- | --------------------------------------------------- | ------------------------------------ | --------------------------------- | ------------------------------ | --------------------------------- | ---------------------- | -+| auth_sec | 1184 | 500 | 114 | 113 | 1 | plugin_auth_caching_sha2_password_digest_rounds_max | | | | | | | -+| binlog | | | 171 | 169 | 2 | binlog_reset_master_delete_file_failure | percona_binlog_unsafe_limit | | | | | | -+| binlog_nogtid | | | 60 | 60 | | | | | | | | | -+| collations | | | 32 | 32 | | | | | | | | | -+| connection_control | | | 9 | 9 | | | | | | | | | -+| encryption | | | 10 | 10 | | | | | | | | | -+| funcs_2 | | | 3 | 3 | | | | | | | | | -+| gcol | | | 36 | 36 | | | | | | | | | -+| gis | | | 69 | 69 | | | | | | | | | -+| information_schema | | 152 | 9 | 9 | | | | | | | | | -+| innodb_fts | | | 66 | 66 | | | | | | | | | -+| innodb_gis | | | 41 | 40 | 1 | rtree_compress2 | | | | | | | -+| innodb_undo | | | 39 | 39 | | | | | | | | | -+| innodb_zip | | | 28 | 28 | | | | | | | | | -+| interactive_utilities | | | 3 | 3 | | | | | | | | | -+| json | | | 19 | 19 | | | | | | | | | -+| opt_trace | | | 28 | 28 | | | | | | | | | -+| parts | | 86 | 95 | 90 | 7 | partition_alter1_1_2_innodb | partition_alter1_2_innodb | partition_alter4_innodb | partition_alter2_2_2_innodb | part_supported_sql_func_innodb | partition_alter4_innodb | partition_basic_innodb | -+| query_rewrite_plugins | | 38 | 38 | 38 | | | | | | | | | -+| secondary_engine | | 36 | 19 | 19 | | | | | | | | | -+| service_status_var_registration | | | 5 | 5 | | | | | | | | | -+| service_sys_var_registration | | | 9 | 9 | | | | | | | | | -+| service_udf_registration | | | 9 | 9 | | | | | | | | | -+| test_service_sql_api | | 94 | 25 | 25 | | | | | | | | | -+| test_services | | | 15 | 15 | | | | | | | | | -+| component_keyring_file | | | 60 | 60 | | | | | | | | | -+| audit_log | | | 22 | 22 | | | | | | | | | -+| binlog_57_decryption | | | 2 | 2 | | | | | | | | | -+| percona-pam-for-mysql | | 16 | 2 | 0(没有该文件夹) | | | | | | | | | -+| data_masking | | | 14 | 14 | | | | | | | | | -+| procfs | | | 1 | 1 | | | | | | | | | -+| rocksdb_sys_vars | | | 170 | 170 | | | | | | | | | -+| rocksdb_stress | | | 3 | 3 | | | | | | | | | -+| rpl_encryption | | 35 | 3 | 3 | | | | | | | | | -+| tokudb_add_index | | | 29 | 29 | | | | | | | | | -+| tokudb_perfschema | | | 3 | 3 | | | | | | | | | -+| audit_null | | | 14 | 14 | | | | | | | | | -+| engines/iuds | | | 16 | 16 | | | | | | | | | -+| funcs_1 | | 108 | 121 | 121 | | | | | | | | | -+| jp | | 112 | 111 | 111 | | | | | | | | | -+| stress | | 3 | 5 | 2 | 3 | ddl_innodb | ddl_memory | ddl_myisam | | | | | -+| group_replication | 473 | 472 | 831 | 830 | 1 | gr_ssl_mode_tls_source_incompatible_certificates | | | | | | | -+| federated | 300 | 9 | 14 | 14 | | | | | | | | | -+| engines/funcs | | 289 | 291 | 288 | 3 | ta_add_column_first | ta_add_column | ta_add_column_middle | | | | | -+| clone | 88 | 88 | 79 | 79 | | | | | | | | | -+| binlog_gtid | | | 74 | 74 | | | | | | | | | -+| tokudb_parts | | | 54 | 54 | | | | | | | | | -+| tokudb_bugs | | | 125 | 125 | | | | | | | | | -+| tokudb_alter_table | | | 69 | 69 | | | | | | | | | -+| tokudb | 1 | 1 | 276 | 276 | | | | | | | | | -+| tokudb_rpl | | | 70 | 70 | | | | | | | | | -+| sysschema | 840 | 88 | 90 | 90 | | | | | | | | | -+| sys_vars | | 751 | 841 | 839 | 2 | myisam_data_pointer_size_func | persisted_sysvars_with_aliases | | | | | | -+| rpl_nogtid | 421 | 235 | 187 | 181 | 6 | rpl_mixed_mixing_engines | rpl_stm_mixing_engines | rpl_non_direct_mixed_mixing_engines | rpl_non_direct_row_mixing_engines | rpl_row_mixing_engines | rpl_non_direct_stm_mixing_engines | | -+| rpl_gtid | | 180 | 227 | 226 | 1 | mysqldump_bug33630199 | | | | | | | -+| rpl | 930 | 927 | 681 | 678 | 3 | rpl_semi_sync_alias | rpl_shutdown_with_optimize_for_static_plugin_config | rpl_deprecations | | | | | -+| rocksdb_rpl | 1 | 1 | 52 | 52 | | | | | | | | | -+| rocksdb | 1 | | 330 | 330 | | | | | | | | | -+| perfschema | 613 | 613 | 749 | 749 | | | | | | | | | -+| parallel_query | | | 42 | 42 | | | | | | | | | -+| main | 1319 | 1314 | 1649 | 1644 | 5 | percona_encryption_udf_dh_4096_ext | percona_encryption_udf_dsa_9984_ext | percona_encryption_udf_rsa_16384_ext | ds_mrr-big | greedy_optimizer | | | -+| innodb | 433 | 428 | 875 | 868 | 6 | analyze_table | bug54330 | histogram | innochecksum_1 | end_range_check | innodb_autoextend_table_ddl | | -+| x | 300 | 299 | 322 | 322 | | | | | | | | | -+| 总通过数 | 6904 | 6875 | | | | | | | | | | | -+ -+### 3.3 x86中fail的用例 -+ -+共失败51个用例。 -+ -+| 用例集 | 错误用例 | 数量 | -+| ---------------------------- | ------------------------------------------------------- | ---- | -+| binlog_gtid | bug93631 | 1 | -+| clone | remote_basic_replace | 3 | -+| | remote_dml_replace | | -+| | remote_dml_upgrade | | -+| group_replication | gr_clone_integration_error_fallback | 18 | -+| | gr_clone_integration_basics_with_ssl_mysql | | -+| | gr_clone_integration_clone_operations_on_running_member | | -+| | gr_clone_integration_different_recovery_user | | -+| | gr_clone_integration_no_privileges | | -+| | gr_clone_integration_purged_donor | | -+| | gr_clone_with_consistency_after | | -+| | gr_recovery_endpoints_iterate_list_clone | | -+| | gr_recovery_endpoints_no_fallback | | -+| | gr_clone_applier_reset | | -+| | gr_clone_integration_recovery_priv_user_preservation | | -+| | gr_recovery_endpoints_ipv6_ipv4 | | -+| | gr_start_gr_credential_options_clone | | -+| | gr_autorejoin_with_clone_while_recovery_locked | | -+| | gr_clone_integration_basics | | -+| | gr_clone_integration_clone_on_server_start | | -+| | gr_recovery_endpoints_multiple_valid | | -+| | gr_view_changes | | -+| x | notices_gr_single_primary | 3 | -+| | connection_unixsocket_invalid | | -+| | resource_groups | | -+| audit_null | audit_plugin_2 | 3 | -+| | authentication_abort | | -+| | authentication_abort_ps | | -+| binlog_nogtid | binlog_persist_only_variables | 2 | -+| | binlog_persist_variables | | -+| service_sys_var_registration | sys_var_service_errors | 1 | -+| test_services | test_host_application_signal_plugin | 1 | -+| component_keyring_file | migration | 1 | -+| rpl | rpl_flush_logs | 4 | -+| | percona_bug1008278 | | -+| | rpl_cloned_slave_relay_log_info | | -+| | rpl_slave_start_after_clone | | -+| rpl_gtid | rpl_pump | 2 | -+| | rpl_gtid_only_start_replica_after_clone | | -+| rpl_nogtid | rpl_binlog_sql_mode | 2 | -+| | rpl_assign_gtids_to_anonymous_transactions_clone | | -+| sys_vars | lc_time_names_basic | 2 | -+| | log_error_services_basic | | -+| rocksdb | show_table_status | 3 | -+| | rocksdb_icp | | -+| | rocksdb_icp_rev | | -+| main | admin_interface | 4 | -+| | percona_encryption_udf_dh_4096 | | -+| | multiaddress_bind | | -+| | parser-big-64bit | | -+| innodb | innodb_bug14704286 | 1 | -+ -+### 3.4 riscv64额外fail的用例 -+ -+共失败41个用例。 -+ -+| 用例集 | 错误用例 | 数量 | -+| ----------------- | --------------------------------------------------- | ---- | -+| binlog | binlog_reset_master_delete_file_failure | 2 | -+| | percona_binlog_unsafe_limit | | -+| auth_sec | plugin_auth_caching_sha2_password_digest_rounds_max | 1 | -+| stress | ddl_myisam | 1 | -+| innodb_gis | rtree_compress2 | 1 | -+| parts | partition_alter1_1_2_innodb | 7 | -+| | partition_alter1_2_innodb | | -+| | partition_alter4_innodb | | -+| | partition_alter2_2_2_innodb | | -+| | part_supported_sql_func_innodb | | -+| | partition_alter4_innodb | | -+| | partition_basic_innodb | | -+| stress | ddl_innodb | 2 | -+| | ddl_memory | | -+| group_replication | gr_ssl_mode_tls_source_incompatible_certificates | 1 | -+| engines.funcs | ta_add_column_first | 3 | -+| | ta_add_column | | -+| | ta_add_column_middle | | -+| sys_vars | myisam_data_pointer_size_func | 2 | -+| | persisted_sysvars_with_aliases | | -+| rpl_gtid | mysqldump_bug33630199 | 1 | -+| rpl_nogtid | rpl_mixed_mixing_engines | 6 | -+| | rpl_stm_mixing_engines | | -+| | rpl_non_direct_mixed_mixing_engines | | -+| | rpl_non_direct_row_mixing_engines | | -+| | rpl_row_mixing_engines | | -+| | rpl_non_direct_stm_mixing_engines | | -+| rpl | rpl_semi_sync_alias | 3 | -+| | rpl_shutdown_with_optimize_for_static_plugin_config | | -+| | rpl_deprecations | | -+| innodb | analyze_table | 6 | -+| | bug54330 | | -+| | histogram | | -+| | innochecksum_1 | | -+| | end_range_check | | -+| | innodb_autoextend_table_ddl | | -+| main | percona_encryption_udf_dh_4096_ext | 5 | -+| | percona_encryption_udf_dsa_9984_ext | | -+| | percona_encryption_udf_rsa_16384_ext | | -+| | ds_mrr-big | | -+| | greedy_optimizer | | -+ -+### 3.5 分析 -+ -+观察实验结果,我们发现一个test文件一般对应一个测试用例,但也可能一个test文件包含多个测试用例,比如rpl中通过用例数大于文件数;此外x86和riscv64通过用例的差值并不等于riscv64中额外fail的用例,这说明对于相同的用例,可能在一个环境中skip/disabled但没有fail,在另一个环境中pass了。 -+ -+fail用例的出错原因大多因为配置不完整,本测试基于单机器,没有配置好master/slave主从节点,但部分测试与主从复制有关,有对应的master/slave.opt文件;此外还包含本身预期失败的用例,目的是验证测试框架对异常测例的识别能力。对于riscv64额外报错的用例,我们尚在排查,报错如Cannot connect to mysql group replication instance、Can't connect to local MySQL server through socket,大概率和配置文件有关。 -+ -+### 3.6 测试结论 -+ -+本次MTR测试共执行用例9507个。其中x86中通过6904个,riscv64中通过了6875个,是x86的99.5%。虽然暂时有额外的出错用例未排查出出错原因,但比例很小,不影响大部分基本功能的使用,所以认为通过。 -+ -+## 4. 参考 -+ -+[GreatSQL 8.0.25-16通过MTR回归测试](https://gitee.com/src-openeuler/greatsql/blob/master/greatsql-802516-mtr-passed.md) -+ -+[MySQL Test Run 测试框架介绍](https://mp.weixin.qq.com/s/JA5hfaZuRMPFa7LmLUvfbQ) -+ -+[Introduction to the MySQL Test Framework](https://dev.mysql.com/doc/dev/mysql-server/latest/PAGE_INTRODUCTION.html) -+ -+ -+ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index e58d2efa2b1..c31f3c6992c 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -722,6 +722,7 @@ SET(KNOWN_64BIT_ARCHITECTURES + s390x + x86_64 + sw_64 ++ riscv64 + ) + + # Include the platform-specific file. To allow exceptions, this code diff --git a/storage/ndb/include/portlib/mt-asm.h b/storage/ndb/include/portlib/mt-asm.h -index 418b8d9c711..f64ea6fab3a 100644 +index a63fae161e4..cc7ea267028 100644 --- a/storage/ndb/include/portlib/mt-asm.h +++ b/storage/ndb/include/portlib/mt-asm.h -@@ -83,6 +83,19 @@ cpu_pause() +@@ -84,6 +84,19 @@ cpu_pause() } #endif @@ -280,574 +34,8 @@ index 418b8d9c711..f64ea6fab3a 100644 + +#define mb() RISCV_FENCE(iorw,iorw) +#define rmb() RISCV_FENCE(ir,ir) -+#define wmb() RISCV_FENCE(ow,ow) ++#define wmb() RISCV_FENCE(ow,ow) + #elif defined(__sparc__) #define NDB_HAVE_MB -diff --git "a/\345\234\250OpenEuler RISC-V\347\216\257\345\242\203\344\270\213\346\272\220\347\240\201\347\274\226\350\257\221\345\256\211\350\243\205GreatSQL.md" "b/\345\234\250OpenEuler RISC-V\347\216\257\345\242\203\344\270\213\346\272\220\347\240\201\347\274\226\350\257\221\345\256\211\350\243\205GreatSQL.md" -new file mode 100644 -index 00000000000..3d4ce63d0c9 ---- /dev/null -+++ "b/\345\234\250OpenEuler RISC-V\347\216\257\345\242\203\344\270\213\346\272\220\347\240\201\347\274\226\350\257\221\345\256\211\350\243\205GreatSQL.md" -@@ -0,0 +1,513 @@ -+# 在OpenEuler RISC-V环境下源码编译安装GreatSQL -+ -+本文介绍如何在OpenEuler RISC-V环境下源码编译安装GreatSQL,并通过常规的MTR测试用例。 -+ -+## 1. **准备**openEuler RISC-V 23.09 环境 -+ -+根据[安装指导](https://docs.openeuler.org/zh/docs/23.09/docs/Installation/riscv_qemu.html),使用Qemu安装openEuler RISC-V 23.09(含全量软件源)。运行环境如下: -+ -+```shell -+$ lscpu -+Architecture: riscv64 -+ Byte Order: Little Endian -+CPU(s): 8 -+ On-line CPU(s) list:0-7 -+NUMA: -+ NUMA node(s): 1 -+ NUMA node0 CPU(s):0-7 -+$ cat /etc/os-release -+NAME="openEuler" -+VERSION="23.09" -+ID="openEuler" -+VERSION_ID="23.09" -+PRETTY_NAME="openEuler 23.09" -+ANSI_COLOR="0;31" -+``` -+ -+## 2. 编译前准备工作 -+ -+提前安装必要的一些基础包 -+ -+```shell -+$ dnf makecache -+$ dnf install -y automake bison bison-devel boost-devel bzip2 bzip2-devel clang cmake cmake3 diffutils expat-devel file flex gcc gcc-c++ git jemalloc jemalloc-devel graphviz libaio-devel libarchive libcurl-devel libevent-devel libffi-devel libicu-devel libssh libtirpc libtirpc-devel libtool libxml2-devel libzstd libzstd-devel lz4-devel lz4-static make ncurses-devel ncurses-libs net-tools numactl numactl-devel numactl-libs openldap-clients openldap-devel openssl openssl-devel pam pam-devel perl perl-Env perl-JSON perl-Memoize perl-Time-HiRes pkg-config psmisc re2-devel readline-devel snappy-devel tar time unzip vim wget zlib-devel -+``` -+ -+然后进入/opt文件夹,使用curl下载boost/patchelf//rpcsvc-proto三个依赖包和greatesql-8.0.32-25源码包,并解压到当前文件夹: -+ -+```shell -+$ curl -o boost_1_77_0.tar.gz -L https://boostorg.jfrog.io/artifactory/main/release/1.77.0/source/boost_1_77_0.tar.gz -+$ tar zxvf boost_1_77_0.tar.gz -+$ curl -o patchelf-0.14.5.tar.gz -L https://github.com/NixOS/patchelf/releases/download/0.14.5/patchelf-0.14.5.tar.gz -+$ tar zxvf patchelf-0.14.5.tar.gz && cd patchelf-0.14.5 && ./bootstrap.sh && ./configure && make && make install -+$ curl -o rpcsvc-proto-1.4.tar.gz -L https://github.com/thkukuk/rpcsvc-proto/releases/download/v1.4/rpcsvc-proto-1.4.tar.gz -+$ tar zxvf rpcsvc-proto-1.4.tar.gz && cd rpcsvc-proto-1.4/ && ./configure && make && make install -+$ curl -o greatsql-8.0.32-25.tar.xz -L https://product.greatdb.com/GreatSQL-8.0.32-25/greatsql-8.0.32-25.tar.xz -+$ tar Jcvf greatsql-8.0.32-25.tar.xz -+``` -+ -+确定glibc和gcc版本: -+ -+```shell -+$ gcc --version -+gcc (GCC) 12.3.1 (openEuler 12.3.1-16.oe2309) -+Copyright (C) 2022 Free Software Foundation, Inc. -+This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -+$ ldd --version -+ldd (GNU libc) 2.38 -+Copyright (C) 2022 Free Software Foundation, Inc. -+This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -+``` -+ -+## 3. 编译GreatSQL -+ -+在开始编译前,需要修改一处GreatSQL源码,使用FENCE指令添加[RISCV的内存屏障](https://blog.csdn.net/u011011827/article/details/124563277#RISCVCPU_135): -+ -+```c -+$ vim /opt/greatsql-8.0.32-25/storage/ndb/include/portlib/mt-asm.h -+#if defined(HAVE_PAUSE_INSTRUCTION) // 第68行 -+... -+#else // 第76行 -+... -+#endif // 第84行 -+// 添加以下代码 -+#elif defined(__riscv) -+ -+#define NDB_HAVE_MB -+#define NDB_HAVE_RMB -+#define NDB_HAVE_WMB -+ -+#define RISCV_FENCE(p, s) \ -+ __asm__ __volatile__ ("fence " #p "," #s : : : "memory") -+ -+#define mb() RISCV_FENCE(iorw,iorw) -+#define rmb() RISCV_FENCE(ir,ir) -+#define wmb() RISCV_FENCE(ow,ow) -+ -+#elif defined(__sparc__) // 第99行 -+``` -+ -+随后源码编译二进制文件包: -+ -+```shell -+$ cd /opt/greatsql-8.0.32-25 && \ -+rm -fr bld && \ -+mkdir bld && \ -+cd bld && \ -+cmake .. -DBOOST_INCLUDE_DIR=/opt/boost_1_77_0 \ -+-DLOCAL_BOOST_DIR=/opt/boost_1_77_0 \ -+-DCMAKE_INSTALL_PREFIX=/usr/local/GreatSQL-8.0.32-25 \ -+-DWITH_ZLIB=bundled \ -+-DCMAKE_BUILD_TYPE=RelWithDebInfo -DBUILD_CONFIG=mysql_release \ -+-DWITH_TOKUDB=OFF \ -+-DWITH_ROCKSDB=OFF \ -+-DCOMPILATION_COMMENT="GreatSQL (GPL)" \ -+-DMAJOR_VERSION=8 \ -+-DMINOR_VERSION=0 \ -+-DPATCH_VERSION=32 \ -+-DWITH_UNIT_TESTS=OFF \ -+-DWITH_NDBCLUSTER=OFF \ -+-DWITH_SSL=system \ -+-DWITH_SYSTEMD=ON \ -+-DWITH_AUTHENTICATION_LDAP=OFF \ -+&& make -j16 VERBOSE=1 && make install -+``` -+ -+参数 *-j16* 设定为并行编译的逻辑CPU数量,可以指定为比逻辑CPU总数少一点,不要把所有CPU都跑满。如果并行产生难以解决的报错,那就使用`make`串行编译。 -+ -+编译完成后,就会将二进制文件安装到 */usr/local/GreatSQL-8.0.32-25* 目录下。 -+ -+因为openEuler RISC-V安装时空间默认大小为20G,在`make install`时会有内存不足的问题,注意需要进行虚拟机扩容。 -+ -+## 4. 安装GreatSQL -+ -+### 4.1 配置GreatSQL systemd服务 -+ -+```ini -+$ vim /lib/systemd/system/greatsql.service -+ -+[Unit] -+Description=GreatSQL Server -+Documentation=man:mysqld(8) -+Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html -+After=network.target -+After=syslog.target -+[Install] -+WantedBy=multi-user.target -+[Service] -+ -+# some limits -+# file size -+LimitFSIZE=infinity -+# cpu time -+LimitCPU=infinity -+# virtual memory size -+LimitAS=infinity -+# open files -+LimitNOFILE=65535 -+# processes/threads -+LimitNPROC=65535 -+# locked memory -+LimitMEMLOCK=infinity -+# total threads (user+kernel) -+TasksMax=infinity -+TasksAccounting=false -+ -+User=mysql -+Group=mysql -+#如果是GreatSQL 5.7版本,此处需要改成simple模式,否则可能服务启用异常 -+#如果是GreatSQL 8.0版本则可以使用notify模式 -+#Type=simple -+Type=notify -+TimeoutSec=0 -+PermissionsStartOnly=true -+ExecStartPre=/usr/local/GreatSQL-8.0.32/bin/mysqld_pre_systemd -+ExecStart=/usr/local/GreatSQL-8.0.32-25/bin/mysqld $MYSQLD_OPTS -+EnvironmentFile=-/etc/sysconfig/mysql -+LimitNOFILE = 10000 -+Restart=on-failure -+RestartPreventExitStatus=1 -+Environment=MYSQLD_PARENT_PID=1 -+PrivateTmp=false -+``` -+ -+务必确认文件中目录及文件名是否正确。 -+ -+执行命令`systemctl daemon-reload`重载systemd,加入 `greatsql` 服务,如果没问题就不会报错。 -+ -+### 4.2 编辑GreatSQL全局配置文件 `/etc/my.cnf` -+ -+参考my.cnf模板[my.cnf for GreatSQL 8.0.32-25](https://gitee.com/GreatSQL/GreatSQL-Doc/blob/master/docs/my.cnf-example-greatsql-8.0.32-25),并根据实际情况做些适当调整。本次使用的服务器内存有限,所以修改了*basedir/datadir/innodb_buffer_pool_size* 等几个选项,不然启动GreatSQL会因闪退等问题而失败。 -+ -+```ini -+[client] -+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 = 3306 -+basedir = /usr/local/GreatSQL-8.0.32-25 -+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" -+bind_address = "0.0.0.0" -+ -+#performance setttings -+lock_wait_timeout = 3600 -+open_files_limit = 65535 -+back_log = 1024 -+max_connections = 1024 -+max_connect_errors = 1000000 -+table_open_cache = 2048 -+table_definition_cache = 2048 -+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 = 96M -+max_heap_table_size = 96M -+max_allowed_packet = 64M -+net_buffer_shrink_interval = 180 -+#GIPK -+loose-sql_generate_invisible_primary_key = ON -+ -+#log settings -+log_timestamps = SYSTEM -+log_error = /data/GreatSQL/error.log -+log_error_verbosity = 3 -+slow_query_log = 1 -+log_slow_extra = 1 -+slow_query_log_file = /data/GreatSQL/slow.log -+#设置slow log文件大小1G及总文件数10 -+max_slowlog_size = 1073741824 -+max_slowlog_files = 10 -+long_query_time = 0.01 -+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_slow_verbosity = FULL -+log_bin = /data/GreatSQL/binlog -+binlog_format = ROW -+sync_binlog = 1 -+binlog_cache_size = 4M -+max_binlog_cache_size = 6G -+max_binlog_size = 1G -+#控制binlog总大小,避免磁盘空间被撑爆 -+binlog_space_limit = 100G #这里改小了 -+binlog_rows_query_log_events = 1 -+binlog_expire_logs_seconds = 604800 -+binlog_checksum = CRC32 -+gtid_mode = ON -+enforce_gtid_consistency = TRUE -+ -+#myisam settings -+key_buffer_size = 16K #这里改小了 -+myisam_sort_buffer_size = 128M -+ -+#replication settings -+relay_log_recovery = 1 -+slave_parallel_type = LOGICAL_CLOCK -+#并行复制线程数可以设置为逻辑CPU数量的2倍 -+slave_parallel_workers = 64 -+binlog_transaction_dependency_tracking = WRITESET -+slave_preserve_commit_order = 1 -+slave_checkpoint_period = 2 -+ -+#启用InnoDB并行查询优化功能 -+loose-force_parallel_execute = OFF -+#设置每个SQL语句的并行查询最大并发度 -+loose-parallel_default_dop = 8 -+#设置系统中总的并行查询线程数,可以和最大逻辑CPU数量一样 -+loose-parallel_max_threads = 64 -+#并行执行时leader线程和worker线程使用的总内存大小上限,可以设置物理内存的5-10%左右 -+loose-parallel_memory_limit = 2G #这里改小了 -+ -+#parallel load data -+loose-gdb_parallel_load_chunk_size = 4M -+ -+#rapid engine -+loose-rapid_memory_limit = 12G -+loose-rapid_worker_threads = 32 -+loose-rapid_hash_table_memory_limit = 30 -+loose-secondary_engine_parallel_load_workers = 16 -+ -+#mgr settings -+loose-plugin_load_add = 'mysql_clone.so' -+loose-plugin_load_add = 'group_replication.so' -+loose-group_replication_group_name = "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaa1" -+#MGR本地节点IP:PORT,请自行替换 -+loose-group_replication_local_address = "172.16.16.10:33061" -+#MGR集群所有节点IP:PORT,请自行替换 -+loose-group_replication_group_seeds = '172.16.16.10:33061,72.16.16.12:33061,72.16.16.12:33061' -+loose-group_replication_start_on_boot = ON -+loose-group_replication_bootstrap_group = OFF -+loose-group_replication_exit_state_action = READ_ONLY -+loose-group_replication_flow_control_mode = "DISABLED" -+loose-group_replication_single_primary_mode = ON -+loose-group_replication_enforce_update_everywhere_checks=0 -+loose-group_replication_majority_after_mode = ON -+loose-group_replication_communication_max_message_size = 10M -+loose-group_replication_arbitrator = 0 -+loose-group_replication_single_primary_fast_mode = 1 -+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 -+ -+#mgr vip -+loose-plugin_load_add = 'greatdb_ha.so' -+loose-greatdb_ha_enable_mgr_vip = 0 -+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" -+#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 -+report_host = 172.16.0.10 -+report_port = 3306 -+ -+#MGR切主后是否断开旧Priamry节点上的所有应用连接 -+loose-greatdb_ha_mgr_exit_primary_kill_connection_mode = 0 -+ -+#innodb settings -+innodb_buffer_pool_size = 56M #这里改小了 -+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 = 2G -+innodb_log_files_in_group = 3 -+#innodb_redo_log_capacity = 6G -+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 -+#提醒:当需要用CLONE加密特性时,不要选用O_DIRECT模式,否则会比较慢 -+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 = 1 -+innodb_status_file = 1 -+innodb_status_output = 0 -+innodb_status_output_locks = 1 -+innodb_sort_buffer_size = 64M -+innodb_adaptive_hash_index = 0 -+#开启NUMA支持 -+innodb_numa_interleave = ON -+innodb_spin_wait_delay = 20 -+innodb_print_lock_wait_timeout_info = 1 -+#自动杀掉超过5分钟不活跃事务,避免行锁被长时间持有 -+kill_idle_transaction = 300 -+#异步清理大表 -+innodb_data_file_async_purge = ON -+ -+#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" -+ -+#pfs settings -+performance_schema = 1 -+#performance_schema_instrument = '%memory%=on' -+performance_schema_instrument = '%lock%=on' -+``` -+ -+### 4.3 新建mysql用户 -+ -+```shell -+$ /sbin/groupadd mysql -+$ /sbin/useradd -g mysql mysql -d /dev/null -s /sbin/nologin -+``` -+ -+### 4.4 新建datadir -+ -+新建数据库主目录,并修改权限模式及属主: -+ -+```shell -+$ mkdir -p /data/GreatSQL -+$ chown -R mysql:mysql /data/GreatSQL -+$ chmod -R 700 /data/GreatSQL -+``` -+ -+## 5. 启动GreatSQL -+ -+执行启动命令:`systemctl start greatsql` -+ -+如果有报错,可用systemctl status greatsql 或journalctl 查看服务有关信息进行排错;如果有文件找不到的情况,可以手动加符号链接解决;修改后使用`systemctl restart greatsql`命令重启服务,注意datadir(如/data/GreatSQL)要清空。 -+ -+检查服务是否已启动,以及进程状态,正常启动的输出如下: -+ -+```shell -+$ systemctl status greatsql -+● greatsql.service - GreatSQL Server -+ Loaded: loaded (/usr/lib/systemd/system/greatsql.service; disabled; vendor preset: disabled) -+ Active: active (running) since Wed 2024-08-13 07:58:14 CST; 9s ago -+ Docs: man:mysqld(8) -+ http://dev.mysql.com/doc/refman/en/using-systemd.html -+ Process: 21411 ExecStartPre=/usr/local/GreatSQL-8.0.32-25/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS) -+ Main PID: 21519 (mysqld) -+ Memory: 616.6M -+ CGroup: /system.slice/greatsql.service -+ └─21519 /usr/local/GreatSQL-8.0.32-25/bin/mysqld -+ -+Aug 13 07:56:56 openeuler-riscv64 systemd[1]: Starting GreatSQL Server... -+Aug 13 07:58:14 openeuler-riscv64 systemd[1]: Started GreatSQL Server. -+``` -+ -+## 6. 登入GreatSQL与基本使用 -+ -+首次登入GreatSQL前,需要先找到初始化时随机生成的root密码: -+ -+```shell -+$ grep root /data/GreatSQL/error.log -+[Note] [MY-010454] [Server] A temporary password is generated for root@localhost: hl3XhIux8I>; -+``` -+ -+其中的 **hl3XhIux8I>;** 就是初始化时随机生成的密码,在登入GreatSQL时输入该密码: -+ -+```shell -+$ mysql -uroot -p'hl3XhIux8I>;' -+mysql: [Warning] Using a password on the command line interface can be insecure. -+Welcome to the MySQL monitor. Commands end with ; or \g. -+Your MySQL connection id is 12 -+Server version: 8.0.32-25 -+ -+Copyright (c) 2021-2023 GreatDB Software Co., Ltd -+Copyright (c) 2009-2023 Percona LLC and/or its affiliates -+Copyright (c) 2000, 2023, Oracle and/or its affiliates. -+ -+Oracle is a registered trademark of Oracle Corporation and/or its -+affiliates. Other names may be trademarks of their respective -+owners. -+ -+Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. -+ -+[root@GreatSQL][(none)]>\s -+ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement. -+mysql> -+``` -+ -+首次登入立刻提醒该密码已过期,需要修改,执行类似下面的命令修改即可: -+ -+```shell -+[root@GreatSQL][(none)]>ALTER USER USER() IDENTIFIED BY 'GreatSQL-8032~%'; -+Query OK, 0 rows affected (0.21 sec) -+``` -+ -+之后就可以用这个新密码再次登入GreatSQL了。 -+ -+修改完root密码后,应尽快创建普通用户,用于数据库的日常使用,减少超级用户root的使用频率,避免误操作意外删除重要数据。 -+ -+```shell -+#创建一个新用户GreatSQL,只允许从192.168.0.0/16网络连入,密码是 GreatSQL-2022 -+[root@GreatSQL][(none)]>CREATE USER GreatSQL@'192.168.0.0/16' IDENTIFIED BY 'GreatSQL-2022'; -+Query OK, 0 rows affected (0.39 sec) -+ -+#创建一个新的用户库,并对GreatSQL用户授予读写权限 -+[root@GreatSQL][(none)]>CREATE DATABASE GreatSQL; -+Query OK, 1 row affected (0.15 sec) -+ -+[root@GreatSQL][(none)]>GRANT ALL ON GreatSQL.* TO GreatSQL@'192.168.0.0/16'; -+Query OK, 0 rows affected (0.07 sec) -+``` -+ -+切换到普通用户GreatSQL登入,创建测试表,写入数据: -+ -+```shell -+$ mysql -h192.168.1.10 -uGreatSQL -p'GreatSQL-2022' -+... -+# 切换到GreatSQL数据库下 -+[root@GreatSQL][(none)]>use GreatSQL; -+Database changed -+ -+# 创建新表 -+[root@GreatSQL][(GreatSQL)]>CREATE TABLE t1(id INT PRIMARY KEY); -+Query OK, 0 rows affected (0.68 sec) -+ -+# 写入测试数据 -+[root@GreatSQL][(GreatSQL)]>INSERT INTO t1 SELECT RAND()*1024; -+Query OK, 1 row affected (0.19 sec) -+Records: 1 Duplicates: 0 Warnings: 0 -+ -+# 查询数据 -+[root@GreatSQL][(GreatSQL)]>SELECT * FROM t1; -++-----+ -+| id | -++-----+ -+| 203 | -++-----+ -+1 row in set (0.01 sec) -+``` -+ -+成功。 -+ -+## 7. 参考文件 -+ -+1. [欧拉openEuler系统中使用二进制包安装GreatSQL](https://greatsql.cn/docs/8.0.32-25/4-install-guide/3-3-openeuler-install.html) -+2. [二进制包安装](https://greatsql.cn/docs/8.0.32-25/3-quick-start/3-2-quick-start-with-tarball.html) -+3. [在麒麟OS+龙芯环境下源码编译安装GreatSQL](https://gitee.com/GreatSQL/GreatSQL-Doc/blob/master/docs/build-greatsql-with-source-under-kylin-and-loongson.md#1) -+ -+4. [openEuler、龙蜥Anolis、统信UOS系统下编译GreatSQL二进制包](https://gitee.com/GreatSQL/GreatSQL-Doc/blob/master/docs/build-greatsql-under-openeuler-anolis-uos.md) -\ No newline at end of file --- -Gitee - - -From 0b357fee5332e690b2084a99ea307e3f16c5dcbb Mon Sep 17 00:00:00 2001 -From: Sammmmy <843683531@qq.com> -Date: Mon, 30 Sep 2024 12:52:35 +0000 -Subject: [PATCH 2/2] =?UTF-8?q?update=20storage/ndb/include/portlib/mt-asm?= - =?UTF-8?q?.h.=20=E4=BF=AE=E6=94=B9=E7=BC=A9=E8=BF=9B?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Signed-off-by: Sammmmy <843683531@qq.com> ---- - storage/ndb/include/portlib/mt-asm.h | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/storage/ndb/include/portlib/mt-asm.h b/storage/ndb/include/portlib/mt-asm.h -index f64ea6fab3a..6697188eaf5 100644 ---- a/storage/ndb/include/portlib/mt-asm.h -+++ b/storage/ndb/include/portlib/mt-asm.h -@@ -94,7 +94,7 @@ cpu_pause() - - #define mb() RISCV_FENCE(iorw,iorw) - #define rmb() RISCV_FENCE(ir,ir) --#define wmb() RISCV_FENCE(ow,ow) -+#define wmb() RISCV_FENCE(ow,ow) - - #elif defined(__sparc__) - -diff --git a/CMakeLists.txt b/CMakeLists.txt -index 0e758944..33c161bd 100644 ---- a/CMakeLists.txt -+++ b/CMakeLists.txt -@@ -734,6 +734,7 @@ SET(KNOWN_64BIT_ARCHITECTURES - s390x - x86_64 - sw_64 -+ riscv64 - ) - - # Include the platform-specific file. To allow exceptions, this code --- -Gitee - diff --git a/filter-provides.sh b/filter-provides.sh deleted file mode 100755 index bc166bd82d0f66e6b4801119f502e281b5eaff73..0000000000000000000000000000000000000000 --- a/filter-provides.sh +++ /dev/null @@ -1,6 +0,0 @@ -#! /bin/bash -# - -/usr/lib/rpm/perl.prov $* | -sed -e '/perl(hostnames)/d' -e '/perl(lib::mtr.*/d' -e '/perl(lib::v1.*/d' -e '/perl(mtr_.*/d' -e '/perl(My::.*/d' - diff --git a/filter-requires.sh b/filter-requires.sh deleted file mode 100755 index 3fdf43870fa526b6b704a91cf1adc9abcfdced04..0000000000000000000000000000000000000000 --- a/filter-requires.sh +++ /dev/null @@ -1,6 +0,0 @@ -#! /bin/bash -# - -/usr/lib/rpm/perl.req $* | -sed -e '/perl(GD)/d' -e '/perl(hostnames)/d' -e '/perl(lib::mtr.*/d' -e '/perl(lib::v1.*/d' -e '/perl(mtr_.*/d' -e '/perl(My::.*/d' - diff --git a/greatsql-8.0.32-26.tar.xz b/greatsql-8.0.32-27.tar.xz similarity index 32% rename from greatsql-8.0.32-26.tar.xz rename to greatsql-8.0.32-27.tar.xz index 0bb0d76cd6d2ff61c6eb4ac31a7f399d49a1343d..fc6bc6acedcf7638ab5f76382d6d43c29200addc 100644 --- a/greatsql-8.0.32-26.tar.xz +++ b/greatsql-8.0.32-27.tar.xz @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5f7d67b7f46b379b172e1db105772d370d8270dca3dcff051e692f4ca502de1d -size 404610060 +oid sha256:ce6f9e5ffa32c21e12dfef5b8f6b34a176d92064759701e6e559a89b8adbfeb9 +size 404722388 diff --git a/greatsql-802516-mtr-passed.md b/greatsql-802516-mtr-passed.md deleted file mode 100644 index 921d7bc24e04273881af0e09bb920c91f20dfb98..0000000000000000000000000000000000000000 --- a/greatsql-802516-mtr-passed.md +++ /dev/null @@ -1,30 +0,0 @@ -# GreatSQL 8.0.25-16通过MTR回归测试 - -## 测试信息 -本节描述被测对象的版本信息和测试的时间及测试轮次,包括依赖的硬件。 - -| 被测软件版本 | 系统版本 | 测试起始时间 | 测试结束时间 | -|--------|--------|--------|--------| -| GreatSQL-8.0.25-16 | openEuler 20.03 (LTS-SP2) | 2022-06-26 | 2022-06-29 | - -描述特性测试的硬件环境信息 - -| 硬件信息 | 硬件配置信息 | 备注 | -|--------|--------|--------| -| x86服务器 | 26核心 256GB内存 | | - -## 测试结果概述 -本次对`GreatSQL-8.0.25-16`版本进行回归测试,共执行测试用例6193个。其中成功6190个;失败的3个测例中,预期内失败的有2个,目的是验证测试框架对异常测例的识别能力,另有1个测例(`special.innodb_dedicated_server`)的执行结果和预期不匹配,但不匹配的点与数据库无关,该问题正在排查中,不影响数据库测试结论。 - -## 测试结论 -**通过** - -## 关于MTR -MySQL Test Run 简称MTR,是MySQL官方提供的自动化测试框架,执行脚本在发布路径的mysql-test目录下。 - -主要测试步骤,是通过执行一个case(*.test)中的语句(包括sql语句和其他管理语句),将case的输出记录保存在结果文件(*.result)中,或者是将语句执行结果与标准的输出结果作diff,如果出现偏差就会报错。 - -MySQL自动化框架包括一组测试用例和用于运行它们的程序:perl 脚本(mysql-test-run.pl)和 c++ 二进制(mysqltest)。 - -- perl 脚本:负责控制流程,包括启停、识别执行哪些用例、创建文件夹、收集结果等操作。 -- mysqltest:负责执行测试用例,包括读文件,解析特定语法,执行用例。 diff --git a/greatsql-803227-oe2503-test-result-20250305.png b/greatsql-803227-oe2503-test-result-20250305.png new file mode 100644 index 0000000000000000000000000000000000000000..f90ae9b46b3db67419b3a6d6da90f8e6419a0888 Binary files /dev/null and b/greatsql-803227-oe2503-test-result-20250305.png differ diff --git a/greatsql.cnf b/greatsql.cnf deleted file mode 100644 index 4ae3cfe434bfa3473804f6f3942ba3d6285439fa..0000000000000000000000000000000000000000 --- a/greatsql.cnf +++ /dev/null @@ -1,11 +0,0 @@ -# -# The GreatSQLconfiguration file. -# -# -# * IMPORTANT: Additional settings that can override those from this file! -# The files must end with '.cnf', otherwise they'll be ignored. -# Please make any edits and changes to the appropriate sectional files -# included below. -# -!includedir /etc/my.cnf.d/ -!includedir /etc/greatsql.conf.d/ diff --git a/greatsql.spec b/greatsql.spec index 48c1b25cc66b89436062d8491b6b3940d09d96ca..2681e009e26729e76f4e61edfc362e8547218251 100644 --- a/greatsql.spec +++ b/greatsql.spec @@ -29,10 +29,10 @@ %global mysqldatadir /var/lib/mysql %global mysql_version 8.0.32 -%global greatsql_version 26 -%global revision a68b3034c3d +%global greatsql_version 27 +%global revision aa66a385910 %global tokudb_backup_version %{mysql_version}-%{greatsql_version} -%global rpm_release 6 +%global rpm_release 1 %global release %{greatsql_version}.%{rpm_release}%{?dist} @@ -108,11 +108,11 @@ SOURCE0: https://product.greatdb.com/GreatSQL-%{mysql_version}-%{greatsql URL: https://greatsql.cn SOURCE5: mysql_config.sh SOURCE10: https://archives.boost.io/release/1.77.0/source/boost_1_77_0.tar.bz2 -SOURCE90: filter-provides.sh -SOURCE91: filter-requires.sh SOURCE11: mysqld.cnf Patch0: mysql-5.7-sharedlib-rename.patch +%ifarch riscv64 Patch1: add-riscv64-support.patch +%endif BuildRequires: cmake >= 2.8.2 BuildRequires: make BuildRequires: gcc @@ -170,9 +170,9 @@ BuildRequires: gcc BuildRequires: gcc-c++ BuildRequires: libtirpc-devel BuildRequires: rpcgen -BuildRequires: m4 -BuildRequires: krb5-devel -BuildRequires: libudev-devel +#BuildRequires: m4 +#BuildRequires: krb5-devel +#BuildRequires: libudev-devel BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX) # For rpm => 4.9 only: https://fedoraproject.org/wiki/Packaging:AutoProvidesAndRequiresFiltering @@ -387,8 +387,10 @@ For a description of GreatSQL see https://greatsql.cn %prep %setup -q -T -a 0 -a 10 -c -n %{src_dir} pushd %{src_dir} -%patch 0 -p0 -%patch 1 -p1 +%patch -P0 -p0 +%ifarch riscv64 +%patch -P1 -p1 +%endif cp %{SOURCE11} scripts %build @@ -483,6 +485,7 @@ mkdir release -DWITH_AUTHENTICATION_LDAP=OFF \ -DWITH_PAM=1 \ -DWITH_TOKUDB=0 \ + -DWITH_TOKUDB_BACKUP=OFF \ -DWITH_UNIT_TESTS=OFF \ -DWITH_ROCKSDB=OFF \ -DROCKSDB_DISABLE_AVX2=1 \ @@ -854,6 +857,7 @@ fi %attr(755, root, root) %{_libdir}/mysql/plugin/component_keyring_kms.so %attr(755, root, root) %{_libdir}/mysql/plugin/component_log_filter_dragnet.so %attr(755, root, root) %{_libdir}/mysql/plugin/component_log_sink_json.so +%attr(755, root, root) %{_libdir}/mysql/plugin/component_log_sink_rotate.so %attr(755, root, root) %{_libdir}/mysql/plugin/component_log_sink_syseventlog.so %attr(755, root, root) %{_libdir}/mysql/plugin/component_mysqlbackup.so %attr(755, root, root) %{_libdir}/mysql/plugin/component_query_attributes.so @@ -912,6 +916,7 @@ fi %attr(755, root, root) %{_libdir}/mysql/plugin/debug/component_keyring_kms.so %attr(755, root, root) %{_libdir}/mysql/plugin/debug/component_log_filter_dragnet.so %attr(755, root, root) %{_libdir}/mysql/plugin/debug/component_log_sink_json.so +%attr(755, root, root) %{_libdir}/mysql/plugin/debug/component_log_sink_rotate.so %attr(755, root, root) %{_libdir}/mysql/plugin/debug/component_log_sink_syseventlog.so %attr(755, root, root) %{_libdir}/mysql/plugin/debug/component_mysqlbackup.so %attr(755, root, root) %{_libdir}/mysql/plugin/debug/component_query_attributes.so @@ -1329,6 +1334,9 @@ fi %{_libdir}/mysql/private/icudt69l/brkitr %changelog +* Mon Mar 10 2025 GreatSQL - 8.0.32-27.1 +- Release GreatSQL-8.0.32-27.1 + * Sun Dec 08 2024 Funda Wang - 8.0.32-26.6 - convert to git lfs diff --git a/mysql.init b/mysql.init deleted file mode 100644 index f0bab7892219a5c048c9e3b104bf1d3a2ef5eff9..0000000000000000000000000000000000000000 --- a/mysql.init +++ /dev/null @@ -1,248 +0,0 @@ -#!/bin/sh -# -# mysqld This shell script takes care of starting and stopping -# the MySQL subsystem (mysqld). -# -# chkconfig: 345 64 36 -# description: MySQL database server. -# processname: mysqld -# config: /etc/my.cnf -# pidfile: /var/run/mysqld/mysqld.pid - -# Source function library. -. /etc/rc.d/init.d/functions - -# Source networking configuration. -. /etc/sysconfig/network - - -exec="/usr/bin/mysqld_safe" -prog="mysqld" - -# Set timeouts here so they can be overridden from /etc/sysconfig/mysqld -STARTTIMEOUT=120 -STOPTIMEOUT=600 - -# Set in /etc/sysconfig/mysqld, will be passed to mysqld_safe -MYSQLD_OPTS= - -[ -e /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog - -lockfile=/var/lock/subsys/$prog - -# Support for extra options passed to mysqld -command=$1 && shift -extra_opts="$@" - -# Extract value of a MySQL option from config files -# Usage: get_mysql_option OPTION DEFAULT SECTION1 SECTION2 SECTIONN -# Result is returned in $result -# We use my_print_defaults which prints all options from multiple files, -# with the more specific ones later; hence take the last match. -get_mysql_option () { - option=$1 - default=$2 - shift 2 - result=$(/usr/bin/my_print_defaults "$@" | sed -n "s/^--${option}=//p" | tail -n 1) - if [ -z "$result" ]; then - # not found, use default - result="${default}" - fi -} - -get_mysql_option datadir "/var/lib/mysql" mysqld -datadir="$result" -get_mysql_option socket "$datadir/mysql.sock" mysqld -socketfile="$result" -get_mysql_option log-error "/var/log/mysqld.log" mysqld mysqld_safe -errlogfile="$result" -get_mysql_option pid-file "/var/run/mysqld/mysqld.pid" mysqld mysqld_safe -mypidfile="$result" - -case $socketfile in - /*) adminsocket="$socketfile" ;; - *) adminsocket="$datadir/$socketfile" ;; -esac - -install_validate_password_sql_file () { - local initfile - initfile="$(mktemp /var/lib/mysql-files/install-validate-password-plugin.XXXXXX.sql)" - chmod a+r "$initfile" - echo "SET @@SESSION.SQL_LOG_BIN=0;" > "$initfile" - echo "INSERT INTO mysql.component (component_id, component_group_id, component_urn) VALUES (1, 1, 'file://component_validate_password');" >> "$initfile" - echo "$initfile" -} - -start(){ - [ -x $exec ] || exit 5 - # check to see if it's already running - RESPONSE=$(/usr/bin/mysqladmin --no-defaults --socket="$adminsocket" --user=UNKNOWN_MYSQL_USER ping 2>&1) - if [ $? = 0 ]; then - # already running, do nothing - action $"Starting $prog: " /bin/true - ret=0 - elif echo "$RESPONSE" | grep -q "Access denied for user" - then - # already running, do nothing - action $"Starting $prog: " /bin/true - ret=0 - else - # prepare for start - if [ ! -e "$errlogfile" -a ! -h "$errlogfile" -a "x$(dirname "$errlogfile")" = "x/var/log" ]; then - install /dev/null -m0640 -omysql -gmysql "$errlogfile" - fi - [ -x /sbin/restorecon ] && /sbin/restorecon "$errlogfile" - if [ ! -d "$datadir/mysql" ] ; then - # First, make sure $datadir is there with correct permissions - if [ ! -d "$datadir" -a ! -h "$datadir" -a "x$(dirname "$datadir")" = "x/var/lib" ]; then - install -d -m0751 -omysql -gmysql "$datadir" || exit 1 - fi - if [ ! -h "$datadir" -a "x$(dirname "$datadir")" = "x/var/lib" ]; then - chown mysql:mysql "$datadir" - chmod 0751 "$datadir" - fi - if [ -x /sbin/restorecon ]; then - /sbin/restorecon "$datadir" - for dir in /var/lib/mysql-files /var/lib/mysql-keyring ; do - if [ -x /usr/sbin/semanage -a -d /var/lib/mysql -a -d $dir ] ; then - /usr/sbin/semanage fcontext -a -e /var/lib/mysql $dir >/dev/null 2>&1 - /sbin/restorecon -r $dir - fi - done - fi - # Now create the database - initfile="$(install_validate_password_sql_file)" - action $"Initializing MySQL database: " /usr/sbin/mysqld --initialize --datadir="$datadir" --user=mysql --init-file="$initfile" - ret=$? - rm -f "$initfile" - [ $ret -ne 0 ] && return $ret - if [ ! -h "$datadir" -a "x$(dirname "$datadir")" = "x/var/lib" ]; then - chown -R mysql:mysql "$datadir" - fi - # Generate certs if needed - if [ -x /usr/bin/mysql_ssl_rsa_setup -a ! -e "${datadir}/server-key.pem" ] ; then - /usr/bin/mysql_ssl_rsa_setup --datadir="$datadir" --uid=mysql >/dev/null 2>&1 - fi - fi - if [ ! -h "$datadir" -a "x$(dirname "$datadir")" = "x/var/lib" ]; then - chown mysql:mysql "$datadir" - chmod 0751 "$datadir" - fi - # Pass all the options determined above, to ensure consistent behavior. - # In many cases mysqld_safe would arrive at the same conclusions anyway - # but we need to be sure. (An exception is that we don't force the - # log-error setting, since this script doesn't really depend on that, - # and some users might prefer to configure logging to syslog.) - # Note: set --basedir to prevent probes that might trigger SELinux - # alarms, per bug #547485 - $exec $MYSQLD_OPTS --datadir="$datadir" --socket="$socketfile" \ - --pid-file="$mypidfile" \ - --basedir=/usr --user=mysql $extra_opts >/dev/null & - safe_pid=$! - # Spin for a maximum of N seconds waiting for the server to come up; - # exit the loop immediately if mysqld_safe process disappears. - # Rather than assuming we know a valid username, accept an "access - # denied" response as meaning the server is functioning. - ret=0 - TIMEOUT="$STARTTIMEOUT" - while [ $TIMEOUT -gt 0 ]; do - RESPONSE=$(/usr/bin/mysqladmin --no-defaults --socket="$adminsocket" --user=UNKNOWN_MYSQL_USER ping 2>&1) && break - echo "$RESPONSE" | grep -q "Access denied for user" && break - if ! /bin/kill -0 $safe_pid 2>/dev/null; then - echo "GreatSQL MySQL Daemon failed to start." - ret=1 - break - fi - sleep 1 - let TIMEOUT=${TIMEOUT}-1 - done - if [ $TIMEOUT -eq 0 ]; then - echo "Timeout error occurred trying to start GreatSQL MySQL Daemon." - ret=1 - fi - if [ $ret -eq 0 ]; then - action $"Starting $prog: " /bin/true - touch $lockfile - else - action $"Starting $prog: " /bin/false - fi - fi - return $ret -} - -stop(){ - if [ ! -f "$mypidfile" ]; then - # not running; per LSB standards this is "ok" - action $"Stopping $prog: " /bin/true - return 0 - fi - MYSQLPID=$(cat "$mypidfile") - if [ -n "$MYSQLPID" ]; then - /bin/kill "$MYSQLPID" >/dev/null 2>&1 - ret=$? - if [ $ret -eq 0 ]; then - TIMEOUT="$STOPTIMEOUT" - while [ $TIMEOUT -gt 0 ]; do - /bin/kill -0 "$MYSQLPID" >/dev/null 2>&1 || break - sleep 1 - let TIMEOUT=${TIMEOUT}-1 - done - if [ $TIMEOUT -eq 0 ]; then - echo "Timeout error occurred trying to stop GreatSQL MySQL Daemon." - ret=1 - action $"Stopping $prog: " /bin/false - else - rm -f $lockfile - rm -f "$socketfile" - action $"Stopping $prog: " /bin/true - fi - else - action $"Stopping $prog: " /bin/false - fi - else - # failed to read pidfile, probably insufficient permissions - action $"Stopping $prog: " /bin/false - ret=4 - fi - return $ret -} - -restart(){ - stop - start -} - -condrestart(){ - [ -e $lockfile ] && restart || : -} - - -# See how we were called. -case "$command" in - start) - start - ;; - stop) - stop - ;; - status) - status -p "$mypidfile" $prog - ;; - restart) - restart - ;; - condrestart|try-restart) - condrestart - ;; - reload) - exit 3 - ;; - force-reload) - restart - ;; - *) - echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}" - exit 2 -esac - -exit $? diff --git "a/openEuler-25.03-GreatSQL\346\265\213\350\257\225\346\212\245\345\221\212.md" "b/openEuler-25.03-GreatSQL\346\265\213\350\257\225\346\212\245\345\221\212.md" new file mode 100644 index 0000000000000000000000000000000000000000..832f3e5a032a99b8e45ca743f83678c8a4e3cf1c --- /dev/null +++ "b/openEuler-25.03-GreatSQL\346\265\213\350\257\225\346\212\245\345\221\212.md" @@ -0,0 +1,153 @@ +# openEuler-25.03-GreatSQL测试报告 + +![avatar](../../images/openEuler.png) + +版权所有 © 2025 openEuler社区 + 您对“本文档”的复制、使用、修改及分发受知识共享(Creative Commons)署名—相同方式共享4.0国际公共许可协议(以下简称“CC BY-SA 4.0”)的约束。为了方便用户理解,您可以通过访问https://creativecommons.org/licenses/by-sa/4.0/ 了解CC BY-SA 4.0的概要 (但不是替代)。CC BY-SA 4.0的完整协议内容您可以访问如下网址获取:https://creativecommons.org/licenses/by-sa/4.0/legalcode。 + +修订记录 + +| 日期 | 修订 版本 | 修改描述 | 作者 | +| ---- | ----------- | -------- | ---- | +| 2025.03.05 | 1.0 | GreatSQL测试报告v1 |@GreatSQL| + +关键词:GreatSQL + +摘要:按照 GreatSQL 8.0.32-27 测试用例要求,部署 openEuler 25.03 测试镜像环境,对 GreatSQL 的源码编译、src.rpm包编译安装、RPM安装、二进制包安装、主要功能进行测试。测试结果良好,完全支持 GreatSQL 主要功能的正常使用。 + +缩略语清单: + +| 缩略语 | 英文全名 | 中文解释 | +| ------ | -------- | -------- | +| MGR/GR | MySQL Group Replication | MySQL Group Replication,MySQL 组复制的简称。MySQL 推出的一种不同于主从复制、半同步复制的全新复制机制。| +| arbitrator | MGR arbitrator member | 仲裁节点/投标节点。该节点不存储用户数据,没有 binlog,也不需要回放 relay log,只参与 MGR 状态投票/仲裁。 | +| zone id | MGR member zone id| 地理标签。可以对每个节点设置地理标签,主要用于解决多机房数据同步的问题。| +| fast mode | MGR fast mode | 快速单主模式。在该模式下可以降低 MGR 事务代价,提升事务性能。| +| election mode | MGR Primary member election mode | 可根据不同策略选择MGR主节点。| +| datamask | 数据脱敏 | 数据脱敏有助于防止非授权用户访问敏感数据,从而限制敏感数据的暴露。 | +| nonblocking DDL | 非阻塞式 DDL|Nonblock DDL规避了执行DDL过程中MDL锁长时间获取不成功导致的连接堆积和阻塞,有效地解决了DDL导致的锁表问题。| +| numa affinity | NUMA 亲和性优化|高并发场景在系统默认的线程调度方式下,用户线程和后台处理线程频繁休眠后唤醒在不同 NUMA 节点的 CPU,这种情况导致 CPU 开销增大,影响整体性能。| +| audit | GreatSQL 支持开启审计功能,并且还支持将审计日志写入数据库中,方便管理员查询。| +| VIP | GreatSQL中支持读写节点绑定动态 VIP(虚拟 IP),高可用切换更便捷。| + +# 1 特性概述 + +本测试报告为 GreatSQL 8.0.32-27 在 openEuler 25.03 操作系统上的测试报告,目的在于跟踪测试阶段中发现的问题,总结 GreatSQL 在 openEuler 25.03 操作系统中运行状况&功能特性支持的测试结果,测试的范围主要包括 GreatSQL 源码编译、src.rpm包编译安装、RPM安装、二进制包安装、主要功能及性能、稳定性等方面进行测试。 + +# 2 特性测试信息 + +本节描述被测对象的版本信息和测试的时间及测试轮次,包括依赖的硬件。 + +| 版本名称 | 测试起始时间 | 测试结束时间 | 备注 | +| -------- | ------------ | ------------ | --- | +| openEuler-25.03 | 2025年03月04日 | 2025年03月05日 | | + +描述特性测试的硬件环境信息 + +| 硬件型号 | 硬件配置信息 | 备注 | +| -------- | ------------ | ---- | +| Docker 容器 | 无特殊配置 | 在 aarch64/x86_64 物理机上运行 Docker 容器测试 | + +# 3 测试结论概述 + +## 3.1 测试整体结论 + +在 Docker 容器中启动 openEuler 25.03 测试镜像,在此基础上进行 GreatSQL 8.0.32-27 测试,共执行 139 个测试项,主要涵盖了 GreatSQL 源码编译、RPM安装、二进制包安装、MGR增强、Binlog读取限速、Clone复制数据时自动最新节点、并行LOAD DATA、异步删除大表、非阻塞式DDL、NUMA亲和性优化、Oracle兼容、Clone备份加密、Clone增量备份、Clone压缩备份、审计、数据脱敏、最后登录信息等主要功能特性等方面,主要功能均通过测试,无风险,整体核心功能稳定正常。 + +## 3.2 约束说明 + +无。 + +## 3.3 遗留问题分析 + +无。 + +# 4 测试执行 + +## 4.1 测试执行统计数据 + +*本节内容根据测试用例及实际执行情况进行特性整体测试的统计,可根据第二章的测试轮次分开进行统计说明。* + +| 版本名称 | 特性名字 | 测试用例数 | 用例执行结果 | 发现问题单数 | +| -------- |---------- | ---------- | ------------ | ------------ | +| openEuler-25.03 | GreatSQL 8.0.32-27 | 146 | Pass | 0 | + +## 4.2 后续测试建议 + +无。 + +## 4.3 特性测试结论 + +### 4.3.1 高可用特性测试结论 + +| 序号 | 特性名称 | 遗留问题 | 备注 | +| --- | :--- | :--- | :--- | +| 1 | [MGR 地理标签](https://greatsql.cn/docs/8.0.32-27/5-enhance/5-2-ha-mgr-zoneid.html) | 无 | 可以对每个节点设置地理标签,主要用于解决多机房数据同步的问题。可以提升多机房架构数据可靠性。| +| 2 | [MGR 读写动态 VIP](https://greatsql.cn/docs/8.0.32-27/5-enhance/5-2-ha-mgr-vip.html) | 无 | 支持对MGR节点绑定VIP,使得高可用切换更便捷。| +| 3 | [MGR 切主后断开应用连接](https://greatsql.cn/docs/8.0.32-27/5-enhance/5-2-ha-mgr-kill-conn-after-switch.html) | 无 | 在MGR发生切换时,主动断开旧Primary节点上的所有连接。| +| 4 | [MGR Arbitrator(仲裁节点)](https://greatsql.cn/docs/8.0.32-27/5-enhance/5-2-ha-mgr-arbitrator.html) | 无 | 仲裁节点(投票节点)不存储数据和binlog,无应用事务,使得可以用更低的服务器成本实现更高可用。| +| 5 | [MGR 快速单主模式](https://greatsql.cn/docs/8.0.32-27/5-enhance/5-2-ha-mgr-fast-mode.html) | 无 | 在这个模式下,不再采用MGR原有的认证数据库方式,而是判断当前binlog是否能够及时入盘来决定怎么样流控,确保不OOM。| +| 6 | [MGR 智能选主](https://greatsql.cn/docs/8.0.32-27/5-enhance/5-2-ha-mgr-election-mode.html) | 无 | 支持多种智能选主模式,使得高可用切换选主机制更合理。 | +| 7 | [MGR 全新流控算法](https://greatsql.cn/docs/8.0.32-27/5-enhance/5-2-ha-mgr-new-fc.html) | 无 | 重新设计了流控算法,除了会考虑认证数据库队列大小的因素,并同时考虑了大事务处理和主从节点的同步,流控粒度更细致,不会出现官方社区版本的1秒小抖动问题。| +| 8 | [MGR 网络开销阈值](https://greatsql.cn/docs/8.0.32-27/5-enhance/5-2-ha-mgr-request-time.html) | 无 | 记录超过阈值的事件,便于进一步分析。| +| 9 | [主主双向复制防止回路](https://greatsql.cn/docs/8.0.32-27/5-enhance/5-2-ha-repl-server-mode.html) | 无 | 控制只应用多源复制管道内临近主节点上产生的binlog,不会应用其他的非临近节点产生的binlog,避免出现数据回路问题。| +| 10 | [Binlog 读取限速及相应状态变量](https://greatsql.cn/docs/8.0.32-27/5-enhance/5-2-ha-binlog-speed-limit.html) | 无 | 控制从节点上向主节点发起 Binlog 读取请求的限速。| +| 11 | [节点异常状态判断更完善和高效](https://greatsql.cn/docs/8.0.32-27/5-enhance/5-2-ha-mgr-improved.html) | 无 | 可定义节点超过多少秒没发消息会被判定为可疑,提高异常检测判断效率。| +| 12 | [Clone复制数据时自动选择最新节点](https://greatsql.cn/docs/8.0.32-27/5-enhance/5-2-ha-mgr-improved.html) | 无 | 自动选择从最新事务数据的成员节点复制数据,可有效提升 Clone 速度,提高 MGR 的服务可靠性。| +| 13 | [支持AFTER模式下多数派写机制](https://greatsql.cn/docs/8.0.32-27/5-enhance/5-2-ha-mgr-improved.html) | 无 | +| 14 | [解决磁盘空间爆满时导致MGR集群阻塞的问题](https://greatsql.cn/docs/8.0.32-27/5-enhance/5-2-ha-mgr-improved.html) | 无 | +| 15 | [解决多主模式下或切主时可能导致丢数据的问题](https://greatsql.cn/docs/8.0.32-27/5-enhance/5-2-ha-mgr-improved.html) | 无 | +| 16 | [解决节点异常退出集群时导致性能抖动的问题](https://greatsql.cn/docs/8.0.32-27/5-enhance/5-2-ha-mgr-improved.html) | 无 | +| 17 | [优化了加入节点时可能导致性能剧烈抖动的问题](https://greatsql.cn/docs/8.0.32-27/5-enhance/5-2-ha-mgr-improved.html) | 无 | +| 18 | [优化手工选主机制,解决了长事务造成无法选主的问题](https://greatsql.cn/docs/8.0.32-27/5-enhance/5-2-ha-mgr-improved.html) | 无 | +| 19 | [优化了加入节点时可能导致性能剧烈抖动的问题](https://greatsql.cn/docs/8.0.32-27/5-enhance/5-2-ha-mgr-improved.html) | 无 | +| 20 | [优化了MGR大事务传输时压缩超过限制的处理机制](https://greatsql.cn/docs/8.0.32-27/5-enhance/5-2-ha-mgr-improved.html) | 无 | +| 21 | [对greatdb_ha_port端口的防护处理](https://greatsql.cn/docs/8.0.32-27/1-docs-intro/relnotes/changes-greatsql-8-0-32-27.html) | 无 | + +### 4.3.2 高性能特性测试结论 + +| 序号 | 特性名称 | 遗留问题 | 备注 | +| --- | :--- | :--- | :--- | +| 1 | [新版本Rapid引擎](https://greatsql.cn/docs/8.0.32-27/5-enhance/5-1-highperf-rapid-engine.html) | 无 | 可满足企业级 OLAP 应用场景的Rapid引擎,在32C64G实例下TPC-H SF100测试仅耗时不到80秒。| +| 2 | [高性能并行查询引擎Turbo](https://greatsql.cn/docs/8.0.32-27/5-enhance/5-1-highperf-turbo-engine.html) | 无 | 可满足企业级轻量 OLAP 应用场景的Turbo引擎,在32C64G实例下TPC-H SF100测试仅耗时仅约214秒。| +| 3 | [InnoDB并行查询](https://greatsql.cn/docs/8.0.32-27/5-enhance/5-1-highperf-innodb-pq.html) | 无 | 通过多线程改造,GreatSQL InnoDB PQ可以充分利用多核资源,提升查询性能。GreatSQL在TPC-H测试中表现优异,最高可提升30倍,平均提升15倍。| +| 4 | [并行 LOAD DATA](https://greatsql.cn/docs/8.0.32-27/5-enhance/5-1-highperf-parallel-load.html) | 无 | 自动将导入的文件切分文件成多个小块,启动多个 Worker 线程并行导入文件块,数据导入性能提升最高约20倍。| +| 5 | [并行 LOAD DATA时无主键表并行导入优化](https://greatsql.cn/docs/8.0.32-27/5-enhance/5-1-highperf-parallel-load.html) | 无 | 对无主键表并行LOAD DATA场景进行优化,可提升约5倍。| +| 6 | [InnoDB异步删除大表](https://greatsql.cn/docs/8.0.32-27/5-enhance/5-1-highperf-async-purge-big-table.html) | 无 | 利用后台线程来异步缓慢地删除数据文件,避免删除大表时产生性能波动。| +| 7 | [非阻塞式 DDL](https://greatsql.cn/docs/8.0.32-27/5-enhance/5-1-highperf-nonblocking-ddl.html) | 无 | 进行多次申请 MDL-X 锁的尝试,而非原生的独占申请方式,这就可以在多次重试的间隙释放锁资源允许新事务进行。| +| 8 | [NUMA 亲和性优化](https://greatsql.cn/docs/8.0.32-27/5-enhance/5-1-highperf-numa-affinity.html) | 无 | 利用 NUMA 亲和性与内存分配策略,让进程与内存的距离尽量短,提升性能。| +| 9 | [线程池(Thread pool)](https://greatsql.cn/docs/8.0.32-27/5-enhance/5-1-highperf-thread-pool.html) | 无 | 可以避免在连接数瞬间激增时因资源竞争而导致系统吞吐下降的问题,使得GreatSQL的性能表现更稳定。| + +### 4.3.3 高兼容特性测试结论 + +| 序号 | 特性名称 | 遗留问题 | 备注 | +| --- | :--- | :--- | :--- | +| 1 | [数据类型兼容](https://greatsql.cn/docs/8.0.32-25/5-enhance/5-3-easyuse.html#%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B%E5%85%BC%E5%AE%B9) | 无 | 采用映射方式实现Oracle数据类型兼容。| +| 2 | [SQL语法兼容](https://greatsql.cn/docs/8.0.32-25/5-enhance/5-3-easyuse.html#sql%E8%AF%AD%E6%B3%95%E5%85%BC%E5%AE%B9) | 无 | 兼容大部分Oracle SQL语法。 +| 3 | [函数兼容](https://greatsql.cn/docs/8.0.32-25/5-enhance/5-3-easyuse.html#%E5%87%BD%E6%95%B0%E5%85%BC%E5%AE%B9) | 无 | 兼容大部分Oracle函数。| +| 3 | [存储程序兼容](https://greatsql.cn/docs/8.0.32-25/5-enhance/5-3-easyuse.html#%E5%AD%98%E5%82%A8%E8%BF%87%E7%A8%8B-%E5%87%BD%E6%95%B0%E5%85%BC%E5%AE%B9) | 无 | 兼容大部分Oracle存储程序。| + +### 4.3.4 高安全特性测试结论 + +| 序号 | 特性名称 | 遗留问题 | 备注 | +| --- | :--- | :--- | :--- | +| 1 | [mysqldump备份加密](https://greatsql.cn/docs/8.0.32-27/5-enhance/5-4-security-mysqldump-encrypt.html) | 无 | 支持在 mysqldump 进行逻辑备份时产生加密备份文件,并且也支持对加密后的备份文件解密导入。| +| 2 | [Clone 备份加密](https://greatsql.cn/docs/8.0.32-27/5-enhance/5-4-security-clone-encrypt.html) | 无 | 支持在执行 Clone 备份时加密备份文件,以及对加密后的备份文件解密。| +| 3 | [审计](https://greatsql.cn/docs/8.0.32-27/5-enhance/5-4-security-audit.html) | 无 | 支持审计功能,并将审计日志写入数据表中,并且设置审计日志入表规则,以便达到不同的审计需求。| +| 4 | [国密加密](https://greatsql.cn/docs/8.0.32-27/5-enhance/5-4-security-encrypt-with-gmssl.html) | 无 | 支持在通信加密和 InnoDB 表空间加密时采用国密算法。| +| 5 | [数据脱敏](https://greatsql.cn/docs/8.0.32-27/5-enhance/5-4-security-data-masking.html) | 无 | 数据脱敏有助于防止非授权用户访问敏感数据,从而限制敏感数据的暴露。| +| 6 | [记录指定用户的登入信息](https://greatsql.cn/docs/8.0.32-27/5-enhance/5-4-security-last-login.html) | 无 | 可查看上一次成功登录以及上一次成功登录后所有的失败登录信息。| + +### 4.3.5 其他特性测试结论 + +| 序号 | 特性名称 | 遗留问题 | 备注 | +| --- | :--- | :--- | :--- | +| 1 | [Clone 压缩及增量备份](https://greatsql.cn/docs/8.0.32-27/5-enhance/5-5-clone-compressed-and-incrment-backup.html) | 无 | 支持 Clone 在线全量热备和增量备份,以及压缩备份。| +| 2 | [InnoDB Page压缩算法支持Zstd](https://greatsql.cn/docs/8.0.32-27/5-enhance/5-5-innodb-page-compression.html) | 无 | 使得Page压缩率进一步得到提高,尤其是当表中有大量重复字符类型数据时。 +。| + +# 5 附件 + +测试功能点清单 + +![greatsql-803227-oe2503-test-result](./greatsql-803227-oe2503-test-result-20250305.png)