commit 9604bf5ef0cb56afed5628954d5e97bf972e1ec9 Author: Jiayi Yin Date: Sun May 18 21:55:54 2025 +0000 转换LFS仓库为普通仓库 diff --git a/README.md b/README.md new file mode 100644 index 0000000..5a1330c --- /dev/null +++ b/README.md @@ -0,0 +1,399 @@ +# 关于 GreatSQL + +GreatSQL 数据库是一款 **开源免费** 数据库,可在普通硬件上满足金融级应用场景,具有 **高可用**、**高性能**、**高兼容**、**高安全** 等特性,可作为 MySQL 或 Percona Server for MySQL 的理想可选替换。 + +最新版本:GreatSQL 8.0.32-27。 + +## 下载GreatSQL + +- [下载 GreatSQL 最新版本](https://gitee.com/GreatSQL/GreatSQL/releases/GreatSQL-8.0.32-27) +- [下载 GreatSQL 历史版本](https://gitee.com/GreatSQL/GreatSQL/releases/) + +# GreatSQL核心特性 + +### [高可用](https://greatsql.cn/docs/5-enhance/5-2-ha.html) + +针对 MGR 及主从复制进行了大量改进和提升工作,支持 地理标签、仲裁节点、读写动态 VIP、快速单主模式、智能选主 等特性,并针对 流控算法、事务认证队列清理算法、节点加入&退出机制、recovery机制 等多个 MGR 底层工作机制算法进行深度优化,进一步提升优化了 MGR 的高可用保障及性能稳定性。 + +- 支持 [地理标签](https://greatsql.cn/docs/5-enhance/5-2-ha-mgr-zoneid.html) 特性,提升多机房架构数据可靠性。 +- 支持 [仲裁节点](https://greatsql.cn/docs/5-enhance/5-2-ha-mgr-arbitrator.html) 特性,用更低的服务器成本实现更高可用。 +- 支持 [读写动态 VIP](https://greatsql.cn/docs/5-enhance/5-2-ha-mgr-vip.html) 特性,高可用切换更便捷,更快实现读负载均衡。支持 [当主节点切换时,主动关闭当前活跃连接](https://greatsql.cn/docs/5-enhance/5-2-ha-mgr-kill-conn-after-switch.html),缩短应用端不可用时长。。 +- 支持 [快速单主模式](https://greatsql.cn/docs/5-enhance/5-2-ha-mgr-fast-mode.html),在单主模式下更快,性能更高。 +- 支持 [智能选主](https://greatsql.cn/docs/5-enhance/5-2-ha-mgr-election-mode.html) 特性,高可用切换选主机制更合理。 +- 优化 [流控算法](https://greatsql.cn/docs/5-enhance/5-2-ha-mgr-new-fc.html),使得事务更平稳,避免剧烈抖动。 +- 支持 [记录 MGR 网络通信开销超过阈值的事件](https://greatsql.cn/docs/5-enhance/5-2-ha-mgr-request-time.html),用于进一步分析和优化。 +- 支持自动选择从最新事务数据的成员节点复制数据,可有效提升 Clone 速度,提高 MGR 的服务可靠性。 +- 在主从复制中,从节点向主节点发起 Binlog 读取请求时支持限速控制。 +- 优化了 [asynchronous connection failover](https://dev.mysql.com/doc/refman/8.0/en/replication-asynchronous-connection-failover.html) 中的故障检测效率,降低主从复制链路断开的时间,提高整体可用性。 +- 支持在跨机房容灾场景中的 [主主双向复制防止回路](https://greatsql.cn/docs/5-enhance/5-2-ha-repl-server-mode.html) 机制。 +- 优化了 MGR 节点加入、退出时可能导致性能剧烈抖动的问题。 +- 解决了个别节点上磁盘空间爆满时导致MGR集群整体被阻塞的问题。 +- 优化了 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 引擎、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 引擎运行时性能的稳定性。 +- 支持 [线程池](https://greatsql.cn/docs/5-enhance/5-1-highperf-thread-pool.html),降低了线程创建和销毁的代价,保证高并发下,性能稳定不会明显衰退。 +- 支持 [非阻塞式 DDL](https://greatsql.cn/docs/5-enhance/5-1-highperf-nonblocking-ddl.html),可以避免数据库因为必须尽快完成 DDL 操作而导致业务请求大量被阻塞的问题。 +- 支持 [NUMA 亲和性优化](https://greatsql.cn/docs/5-enhance/5-1-highperf-numa-affinity.html),通过 NUMA 亲和性调度优化,将前端用户线程和后台线程绑定到固定 NUMA 节点上以提升线程处理性能。 + +更多信息详见文档:[高性能](https://greatsql.cn/docs/5-enhance/5-1-highperf.html)。 + +### [高兼容](https://greatsql.cn/docs/5-enhance/5-3-easyuse.html) + +GreatSQL 实现 100% 完全兼容 MySQL 及 Percona Server For MySQL 语法,支持大多数常见 Oracle 语法,包括 [数据类型兼容](https://greatsql.cn/docs/5-enhance/5-3-easyuse.html#数据类型兼容)、[函数兼容](https://greatsql.cn/docs/5-enhance/5-3-easyuse.html#函数兼容)、[SQL 语法兼容](https://greatsql.cn/docs/5-enhance/5-3-easyuse.html#sql语法兼容)、[存储程序兼容](https://greatsql.cn/docs/5-enhance/5-3-easyuse.html#存储程序兼容) 等众多兼容扩展用法。 + +更多信息详见文档:[高兼容](https://greatsql.cn/docs/5-enhance/5-3-easyuse.html)。 + +### [高安全](https://greatsql.cn/docs/5-enhance/5-4-security.html) + +GreatSQL 支持逻辑备份加密、CLONE 备份加密、审计、表空间国密加密、敏感数据脱敏、存储登录历史等多个安全提升特性,进一步保障业务数据安全,更适用于金融级应用场景。 + +- 支持 [mysqldump 逻辑备份加密](https://greatsql.cn/docs/5-enhance/5-4-security-mysqldump-encrypt.html),提供了利用 mysqldump 逻辑备份的安全加密需求。 +- 支持 [Clone 备份加密](https://greatsql.cn/docs/5-enhance/5-4-security-clone-encrypt.html),提供了利用 Clone 物理备份的安全加密需求。 +- 支持 [审计功能](https://greatsql.cn/docs/5-enhance/5-4-security-audit.html),及时记录和发现未授权或不安全行为。 +- 支持 [InnoDB 表空间国密加密算法](https://greatsql.cn/docs/5-enhance/5-4-security-innodb-tablespace-encrypt.html),确保重要数据的加密安全。 +- 支持 [基于函数和策略的两种数据脱敏](https://greatsql.cn/docs/5-enhance/5-4-security-data-masking.html) 工作方式,保障敏感用户数据查询结果保密性。 +- 支持 [存储登录历史](https://greatsql.cn/docs/5-enhance/5-4-security-last-login.html),便于管理员查询,进一步提升数据库安全性。 + +通过上述多个安全提升特性,进一步保障业务数据安全。更多信息详见文档:[高安全](https://greatsql.cn/docs/5-enhance/5-4-security.html)。 + +### [其他](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(非必须)。 + +如果是ARM环境下,可以不必安装配置 jemalloc 依赖。 + +以 CentOS 8 x86_64 系统为例,采用类似下面的方法安装 jemalloc 软件包: + +```bash +# 先安装 epel 源 +$ yum install -y epel-release + +# 再安装jemalloc +$ yum -y install jemalloc jemalloc-devel +``` + +也可以把自行安装的动态库so文件路径加到系统配置文件中,例如: + +```bash +$ cat /etc/ld.so.conf +/usr/local/lib64/ +``` + +而后执行下面的操作加载libjemalloc库,并确认是否已存在 + +```bash +$ ldconfig + +$ ldconfig -p | grep libjemalloc + libjemalloc.so.1 (libc6,x86-64) => /usr/local/lib64/libjemalloc.so.1 + libjemalloc.so (libc6,x86-64) => /usr/local/lib64/libjemalloc.so +``` + +如果无法通过 yum 直接安装 jemalloc,可以自行下载 RPM 包,地址:[https://centos.pkgs.org/8/epel-x86_64/jemalloc-5.2.1-2.el8.x86_64.rpm.html](https://centos.pkgs.org/8/epel-x86_64/jemalloc-5.2.1-2.el8.x86_64.rpm.html) + + +### 安装 GreatSQL + +执行下面的命令安装GreatSQL + +``` +#首先,查找GreatSQL +$ yum search GreatSQL +... +greatsql.src : GreatSQL: a high performance, highly reliable, easy to use, and high security database +greatsql-client.x86_64 : GreatSQL - Client +greatsql-debuginfo.x86_64 : Debug information for package greatsql +greatsql-debugsource.x86_64 : Debug sources for package greatsql +greatsql-devel.x86_64 : GreatSQL - Development header files and libraries +greatsql-icu-data-files.x86_64 : GreatSQL packaging of ICU data files +greatsql-mysql-config.x86_64 : GreatSQL config +greatsql-mysql-router.x86_64 : GreatSQL MySQL Router +greatsql-server.x86_64 : GreatSQL: a high performance, highly reliable, easy to use, and high security database that can be used to replace MySQL or Percona + : Server. +greatsql-shared.x86_64 : GreatSQL - Shared libraries +greatsql-test.x86_64 : Test suite for the GreatSQL + +#然后安装 +$ yum install -y --allowerasing greatsql-client greatsql-devel greatsql-icu-data-files greatsql-server greatsql-shared +``` + +安装完成后,GreatSQL会自行完成初始化,可以再检查是否已加入系统服务或已启动: +``` +$ systemctl status mysqld +● mysqld.service - MySQL Server + Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled) +... + Docs: man:mysqld(8) + http://dev.mysql.com/doc/refman/en/using-systemd.html + Process: 1137698 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS) + Main PID: 1137732 (mysqld) + Status: "Server is operational" + Tasks: 39 (limit: 149064) + Memory: 336.7M + CGroup: /system.slice/mysqld.service + └─1137732 /usr/sbin/mysqld +... +``` + +就可以正常启动 GreatSQL 服务了。 + +想要 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 + +# 重启mysqld服务,即自行完成重新初始化 +$ 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-27 + +Copyright (c) 2021-2021 GreatDB Software Co., Ltd +Copyright (c) 2009-2021 Percona LLC and/or its affiliates +Copyright (c) 2000, 2021, 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. + +mysql> \s +ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement. +mysql> +``` + +首次登入立刻提醒该密码已过期,需要修改,执行类似下面的命令修改即可: +``` +mysql> ALTER USER USER() IDENTIFIED BY 'GreatSQL-8032~%'; +Query OK, 0 rows affected (0.02 sec) +``` +之后就可以用这个新密码再次登入GreatSQL了。 + +## 创建新用户、测试库&表,及写入数据 +修改完root密码后,应尽快创建普通用户,用于数据库的日常使用,减少超级用户root的使用频率,避免误操作意外删除重要数据。 +``` +#创建一个新用户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用户授予读写权限 +mysql> CREATE DATABASE GreatSQL; +Query OK, 1 row affected (0.03 sec) + +mysql> GRANT ALL ON GreatSQL.* TO GreatSQL@'192.168.0.0/16'; +Query OK, 0 rows affected (0.03 sec) +``` + +切换到普通用户GreatSQL登入,创建测试表,写入数据: +``` +$ mysql -h192.168.1.10 -uGreatSQL -p'GreatSQL-2025' +... +# 切换到GreatSQL数据库下 +mysql> use GreatSQL; +Database changed + +# 创建新表 +mysql> CREATE TABLE t1(id INT PRIMARY KEY); +Query OK, 0 rows affected (0.07 sec) + +# 写入测试数据 +mysql> INSERT INTO t1 SELECT RAND()*1024; +Query OK, 1 row affected (0.05 sec) +Records: 1 Duplicates: 0 Warnings: 0 + +# 查询数据 +mysql> SELECT * FROM t1; ++-----+ +| id | ++-----+ +| 203 | ++-----+ +1 row in set (0.00 sec) +``` +成功。 + +## 版本历史 + +戳此查看 [GreatSQL 版本历史](https://greatsql.cn/docs/1-docs-intro/1-2-release-history.html)。 + +## QA测试 +GreatSQL 8.0.32-27 已经在 openEuler-25.03 环境下通过回归测试,表明 GreatSQL 与 openEuler-25.03 完全兼容,功能齐全,测试完备。 + +相关回归测试报告详见:[openEuler-25.03-GreatSQL测试报告](./openEuler-25.03-GreatSQL测试报告.md)。 + +## GreatSQL vs MySQL + +| **1.主要特性** | GreatSQL 8.0.32-27 | MySQL 8.0.32 | +| :--- | :---: | :---: | +| 开源 | :heavy_check_mark: | :heavy_check_mark: | +|ACID 完整性| :heavy_check_mark: | :heavy_check_mark: | +|MVCC 特性| :heavy_check_mark: | :heavy_check_mark: | +|支持行锁| :heavy_check_mark: | :heavy_check_mark: | +|Crash 自动修复| :heavy_check_mark: | :heavy_check_mark: | +|表分区(Partitioning)| :heavy_check_mark: | :heavy_check_mark: | +|视图(Views)| :heavy_check_mark: | :heavy_check_mark: | +|子查询(Subqueries)| :heavy_check_mark: | :heavy_check_mark: | +|触发器(Triggers)| :heavy_check_mark: | :heavy_check_mark: | +|存储程序(Stored Programs)| :heavy_check_mark: | :heavy_check_mark: | +|外键(Foreign Keys)| :heavy_check_mark: | :heavy_check_mark: | +|窗口函数(Window Functions)| :heavy_check_mark: | :heavy_check_mark: | +|通用表表达式 CTE| :heavy_check_mark: | :heavy_check_mark: | +|地理信息(GIS)| :heavy_check_mark: | :heavy_check_mark: | +|基于 GTID 的复制| :heavy_check_mark: | :heavy_check_mark: | +|组复制(MGR)| :heavy_check_mark: | :heavy_check_mark: | +|MyRocks 引擎| :heavy_check_mark: | ❌ | +|支持龙芯架构| :heavy_check_mark: | ❌ | +| **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: | ❌ | +|InnoDB 并行查询| :heavy_check_mark: | 仅主键扫描 | +|并行 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: | +|InnoDB Mutexes 拆分优化| :heavy_check_mark: | ❌ | +|MEMORY 引擎优化| :heavy_check_mark: | ❌ | +|InnoDB Flushing 优化| :heavy_check_mark: | ❌ | +|并行 Doublewrite Buffer| :heavy_check_mark: | :heavy_check_mark: | +|InnoDB 快速索引创建优化| :heavy_check_mark: | ❌ | +|VARCHAR/BLOB/JSON 类型存储单列压缩| :heavy_check_mark: | ❌ | +|数据字典中存储单列压缩信息| :heavy_check_mark: | ❌ | +| **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: | +|InnoDB 全文搜索改进| :heavy_check_mark: | ❌ | +|更多 Hash/Digest 函数| :heavy_check_mark: | ❌ | +|Oracle 兼容-数据类型| :heavy_check_mark: | ❌ | +|Oracle 兼容-函数| :heavy_check_mark: | ❌ | +|Oracle 兼容-SQL语法| :heavy_check_mark: | ❌ | +|Oracle 兼容-存储程序| :heavy_check_mark: | ❌ | +| **4. 基础特性提升改进** | GreatSQL 8.0.32-27 | MySQL 8.0.32 | +|MGR 提升-地理标签| :heavy_check_mark: | ❌ | +|MGR 提升-仲裁节点| :heavy_check_mark: | ❌ | +|MGR 提升-读写节点绑定VIP| :heavy_check_mark: | ❌ | +|MGR 提升-快速单主模式| :heavy_check_mark: | ❌ | +|MGR 提升-智能选主机制| :heavy_check_mark: | ❌ | +|MGR 提升-全新流控算法| :heavy_check_mark: | ❌ | +|MGR 提升-网络分区异常处理 | :heavy_check_mark: | ❌ | +|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: | ❌ | +|information_schema 表数量|95|65| +|全局性能和状态指标|853|434| +|优化器直方图(Histograms)| :heavy_check_mark: | :heavy_check_mark: | +|Per-Table 性能指标| :heavy_check_mark: | ❌ | +|Per-Index 性能指标| :heavy_check_mark: | ❌ | +|Per-User 性能指标| :heavy_check_mark: | ❌ | +|Per-Client 性能指标| :heavy_check_mark: | ❌ | +|Per-Thread 性能指标| :heavy_check_mark: | ❌ | +|全局查询相应耗时统计| :heavy_check_mark: | ❌ | +|SHOW INNODB ENGINE STATUS 增强| :heavy_check_mark: | ❌ | +|回滚段信息增强| :heavy_check_mark: | ❌ | +|临时表信息增强| :heavy_check_mark: | ❌ | +|用户统计信息增强| :heavy_check_mark: | ❌ | +|Slow log 信息增强| :heavy_check_mark: | ❌ | +| **5.安全性提升** | GreatSQL 8.0.32-27 | MySQL 8.0.32 | +|国密支持| :heavy_check_mark: | ❌ | +|备份加密| :heavy_check_mark: | ❌ | +|审计| :heavy_check_mark: | 仅企业版 | +|数据脱敏| :heavy_check_mark: | ❌ | +|最后登录记录| :heavy_check_mark: | ❌ | +|SQL Roles| :heavy_check_mark: | :heavy_check_mark: | +|SHA-2 密码Hashing| :heavy_check_mark: | :heavy_check_mark: | +|密码轮换策略| :heavy_check_mark: | :heavy_check_mark: | +|PAM 认证插件| :heavy_check_mark: | 仅企业版 | +|Keyring 存储在文件中| :heavy_check_mark: | :heavy_check_mark: | +|Keyring 存储在Hashicorp Vault中| :heavy_check_mark: | 仅企业版 | +|InnoDB 数据加密| :heavy_check_mark: | :heavy_check_mark: | +|InnoDB 日志加密| :heavy_check_mark: | :heavy_check_mark: | +|InnoDB 各种表空间文件加密| :heavy_check_mark: | :heavy_check_mark: | +|二进制日志加密| :heavy_check_mark: | ❌ | +|临时文件加密| :heavy_check_mark: | ❌ | +|强制加密| :heavy_check_mark: | ❌ | +| **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: | +|SET PERSIST| :heavy_check_mark: | :heavy_check_mark: | +|不可见索引| :heavy_check_mark: | :heavy_check_mark: | +|线程池(Threadpool)| :heavy_check_mark: | 仅企业版 | +|备份锁| :heavy_check_mark: | ❌ | +|SHOW GRANTS 扩展| :heavy_check_mark: | ❌ | +|表损坏动作扩展| :heavy_check_mark: | ❌ | +|杀掉不活跃事务| :heavy_check_mark: | ❌ | +|START TRANSACTION WITH CONSISTENT SNAPSHOT 扩展| :heavy_check_mark: | ❌ | + +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 + +GreatSQL 致力于保持开源的开放性。GreatSQL 采用 GPLv2 协议。 + +## 温馨提示 + +[如果您在使用 GreatSQL,请告诉我们,将有机会获得精美礼品和免费技术支持](https://wj.qq.com/s2/11543483/9e09/)。 + +## 问题反馈 +--- +- [问题反馈 gitee](https://gitee.com/GreatSQL/GreatSQL-Doc/issues) + +## 联系我们 +--- + +扫码关注微信公众号 + +![输入图片说明](https://images.gitee.com/uploads/images/2021/0802/141935_2ea2c196_8779455.jpeg "greatsql社区-wx-qrcode-0.5m.jpg") diff --git a/add-riscv64-support.patch b/add-riscv64-support.patch new file mode 100644 index 0000000..90b5f12 --- /dev/null +++ b/add-riscv64-support.patch @@ -0,0 +1,41 @@ +From: GreatSQL +Date: Mon, 30 Sep 2024 20:32:57 +0800 +Date: Thu, 06 Mar 2025 14:08:51 +0800 +Subject: [PATCH] add riscv64 support + +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 a63fae161e4..cc7ea267028 100644 +--- a/storage/ndb/include/portlib/mt-asm.h ++++ b/storage/ndb/include/portlib/mt-asm.h +@@ -84,6 +84,19 @@ cpu_pause() + } + #endif + ++#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__) + + #define NDB_HAVE_MB diff --git a/boost_1_77_0.tar.bz2 b/boost_1_77_0.tar.bz2 new file mode 100644 index 0000000..1fa23ee Binary files /dev/null and b/boost_1_77_0.tar.bz2 differ diff --git a/greatsql-8.0.32-27.tar.xz b/greatsql-8.0.32-27.tar.xz new file mode 100644 index 0000000..2b5e697 Binary files /dev/null and b/greatsql-8.0.32-27.tar.xz differ diff --git a/greatsql-803227-oe2503-test-result-20250305.png b/greatsql-803227-oe2503-test-result-20250305.png new file mode 100644 index 0000000..f90ae9b Binary files /dev/null and b/greatsql-803227-oe2503-test-result-20250305.png differ diff --git a/greatsql.spec b/greatsql.spec new file mode 100644 index 0000000..9b96da1 --- /dev/null +++ b/greatsql.spec @@ -0,0 +1,1164 @@ +# Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2023, GreatDB Software Co., Ltd. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; see the file COPYING. If not, write to the +# Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston +# MA 02110-1301 USA. + +# Rebuild on OL5/RHEL5 needs following rpmbuild options: +# rpmbuild --define 'dist .el5' --define 'rhel 5' --define 'el5 1' mysql.spec + +# Install cmake28 from EPEL when building on OL5/RHEL5 and OL6/RHEL6. + +# NOTE: "vendor" is used in upgrade/downgrade check, so you can't +# change these, has to be exactly as is. + +%undefine _missing_build_ids_terminate_build +%global mysql_vendor Oracle and/or its affiliates +%global greatsql_vendor GreatDB Software Co., Ltd. +%global mysqldatadir /var/lib/mysql + +%global mysql_version 8.0.32 +%global greatsql_version 27 +%global revision aa66a385910 +%global tokudb_backup_version %{mysql_version}-%{greatsql_version} +%global rpm_release 6 + +%global release %{greatsql_version}.%{rpm_release}%{?dist} + +# By default, a build will be done using the system SSL library +%{?with_ssl: %global ssl_option -DWITH_SSL=%{with_ssl}} +%{!?with_ssl: %global ssl_option -DWITH_SSL=system} + +# By default a build will be done including the TokuDB +%{!?with_tokudb: %global tokudb 0} + +# By default a build will be done including the RocksDB +%{!?with_rocksdb: %global rocksdb 0} + +# Pass path to mecab lib +%{?with_mecab: %global mecab_option -DWITH_MECAB=%{with_mecab}} +%{?with_mecab: %global mecab 1} + +# Regression tests may take a long time, override the default to skip them +%{!?runselftest:%global runselftest 0} + +%{!?with_systemd: %global systemd 0} +%global systemd 1 +%{!?with_debuginfo: %global nodebuginfo 1} +%{!?product_suffix: %global product_suffix -80} +%{!?feature_set: %global feature_set community} +%{!?compilation_comment_release: %global compilation_comment_release GreatSQL (GPL), Release %{greatsql_version}, Revision %{revision}} +%{!?compilation_comment_debug: %global compilation_comment_debug GreatSQL - Debug (GPL), Release %{greatsql_version}, Revision %{revision}} +%{!?src_base: %global src_base greatsql} + +# Setup cmake flags for TokuDB +%if 0%{?tokudb} + %global TOKUDB_FLAGS -DWITH_VALGRIND=OFF -DUSE_VALGRIND=OFF -DDEBUG_EXTNAME=OFF -DBUILD_TESTING=OFF -DUSE_GTAGS=OFF -DUSE_CTAGS=OFF -DUSE_ETAGS=OFF -DUSE_CSCOPE=OFF -DTOKUDB_BACKUP_PLUGIN_VERSION=%{tokudb_backup_version} + %global TOKUDB_DEBUG_ON -DTOKU_DEBUG_PARANOID=ON + %global TOKUDB_DEBUG_OFF -DTOKU_DEBUG_PARANOID=OFF +%else + %global TOKUDB_FLAGS -DWITHOUT_TOKUDB=1 + %global TOKUDB_DEBUG_ON %{nil} + %global TOKUDB_DEBUG_OFF %{nil} +%endif + +# Setup cmake flags for RocksDB +%if 0%{?rocksdb} + %global ROCKSDB_FLAGS -DWITH_ROCKSDB=0 +%else + %global ROCKSDB_FLAGS -DWITH_ROCKSDB=0 +%endif + +%global shared_lib_pri_name mysqlclient +%global shared_lib_sec_name perconaserverclient + +# multiarch +%global multiarchs ppc %{power64} %{ix86} x86_64 %{sparc} %{arm} aarch64 loongarch64 + +%global src_dir %{src_base}-%{mysql_version}-%{greatsql_version} + +# We build debuginfo package so this is not used +%if 0%{?nodebuginfo} +%global _enable_debug_package 0 +%global debug_package %{nil} +%global __os_install_post /usr/lib/rpm/brp-compress %{nil} +%endif + +%global license_files_server %{src_dir}/README.md +%global license_type GPLv2 + +Name: greatsql +Summary: GreatSQL: a high performance, highly reliable, easy to use, and high security database that can be used to replace MySQL or Percona Server. +Group: Applications/Databases +Version: %{mysql_version} +Release: %{release} +License: GPL-2.0-or-later AND LGPL-2.1-only AND BSL-1.0 AND GPL-1.0-or-later OR Artistic-1.0-Perl AND BSD-2-Clause +URL: https://greatsql.cn +SOURCE0: https://product.greatdb.com/GreatSQL-%{mysql_version}-%{greatsql_version}/%{name}-%{mysql_version}-%{greatsql_version}.tar.xz +SOURCE10: https://archives.boost.io/release/1.77.0/source/boost_1_77_0.tar.bz2 +SOURCE11: mysqld.cnf +SOURCE12: mysql_config.sh +Patch0: mysql-5.7-sharedlib-rename.patch +Patch1: add-riscv64-support.patch +BuildRequires: cmake >= 2.8.2 +BuildRequires: make +BuildRequires: gcc +BuildRequires: gcc-c++ +BuildRequires: perl +BuildRequires: perl(Carp) +BuildRequires: perl(Config) +BuildRequires: perl(Cwd) +BuildRequires: perl(Data::Dumper) +BuildRequires: perl(English) +BuildRequires: perl(Errno) +BuildRequires: perl(Exporter) +BuildRequires: perl(Fcntl) +BuildRequires: perl(File::Basename) +BuildRequires: perl(File::Copy) +BuildRequires: perl(File::Find) +BuildRequires: perl(File::Path) +BuildRequires: perl(File::Spec) +BuildRequires: perl(File::Spec::Functions) +BuildRequires: perl(File::Temp) +BuildRequires: perl(Getopt::Long) +BuildRequires: perl(IO::File) +BuildRequires: perl(IO::Handle) +BuildRequires: perl(IO::Pipe) +BuildRequires: perl(IO::Select) +BuildRequires: perl(IO::Socket) +BuildRequires: perl(IO::Socket::INET) +BuildRequires: perl(JSON) +BuildRequires: perl(Memoize) +BuildRequires: perl(POSIX) +BuildRequires: perl(Sys::Hostname) +BuildRequires: perl(Time::HiRes) +BuildRequires: perl(Time::localtime) +BuildRequires: time +BuildRequires: libaio-devel +BuildRequires: ncurses-devel +BuildRequires: pam-devel +BuildRequires: readline-devel +%ifnarch aarch64 +BuildRequires: numactl-devel +%endif +BuildRequires: openssl +BuildRequires: openssl-devel +BuildRequires: zlib-devel +BuildRequires: bison +BuildRequires: openldap-devel +BuildRequires: libcurl-devel +BuildRequires: libedit-devel +BuildRequires: libevent-devel +BuildRequires: libicu-devel +BuildRequires: lz4 +BuildRequires: lz4-devel +BuildRequires: libzstd-devel +%if 0%{?systemd} +BuildRequires: systemd +BuildRequires: pkgconfig(systemd) +%endif +BuildRequires: cyrus-sasl-devel +BuildRequires: openldap-devel + +BuildRequires: cmake >= 3.6.1 +BuildRequires: gcc +BuildRequires: gcc-c++ +BuildRequires: libtirpc-devel +BuildRequires: rpcgen +BuildRequires: m4 +BuildRequires: krb5-devel +BuildRequires: libudev-devel + +#some more requires, 2025.3.24 +BuildRequires: mecab-devel +BuildRequires: gzip +BuildRequires: perl(base) +BuildRequires: perl(Digest::file) +BuildRequires: perl(Digest::MD5) +BuildRequires: perl(Env) +BuildRequires: perl(FindBin) +BuildRequires: perl(if) +BuildRequires: perl-interpreter +BuildRequires: perl-generators +BuildRequires: perl(IPC::Open3) +BuildRequires: perl(lib) +BuildRequires: perl(LWP::Simple) +BuildRequires: perl(Net::Ping) +BuildRequires: perl(Socket) +BuildRequires: perl(strict) +BuildRequires: perl(Test::More) +BuildRequires: perl(warnings) +BuildRequires: procps +BuildRequires: protobuf-lite-devel +BuildRequires: zlib +#end for some more requires + +BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX) + +Conflicts: community-mysql mysql-community +Conflicts: mariadb +Conflicts: Percona-Server + +# For rpm => 4.9 only: https://fedoraproject.org/wiki/Packaging:AutoProvidesAndRequiresFiltering +%global __requires_exclude ^perl\\(GD|hostnames|lib::mtr|lib::v1|mtr_|My::|Lmo|Lmo::Meta|Lmo::Object|Lmo::Types|Lmo::Utils|Percona::Toolkit|Quoter|Transformers) +%global __provides_exclude_from ^(%{_datadir}/(mysql|mysql-test)/.*|%{_libdir}/mysql/plugin/.*\\.so|%{_bindir}/mysql.*|%{_sbindir}/mysqld.*)$ + +%global _privatelibs lib(protobuf|mysqlclient|mysqlharness|mysqlrouter|mysqlclient|daemon|fnv|memcached|murmur|test)*\\.so* +%global __provides_exclude %{?__provides_exclude:%__provides_exclude|}%{_privatelibs} +%global __requires_exclude %{?__requires_exclude:%__requires_exclude|}%{_privatelibs} + +%description +GreatSQL: a high performance, highly reliable, easy to use, and high security database that can be used to replace MySQL or Percona Server. + +For a description of GreatSQL see https://greatsql.cn + +%package -n greatsql-server +Summary: GreatSQL: a high performance, highly reliable, easy to use, and high security database that can be used to replace MySQL or Percona Server. +Group: Applications/Databases +Requires: coreutils +Requires: bash /bin/sh +Requires: grep +Requires: procps +Requires: shadow-utils +Requires: net-tools +Requires(pre): greatsql-shared +Requires: greatsql-client +Requires: greatsql-icu-data-files +Requires: openssl +Conflicts: greatsql-mysql-config < %{version}-%{release} +Obsoletes: greatsql-mysql-config < %{version}-%{release} +Conflicts: mysql-server mysql-community-server mysql-config +Conflicts: mariadb-server mariadb-galera-server mariadb-connector-c-config mariadb-config +Conflicts: Percona-SQL-server-50 Percona-Server-server-51 Percona-Server-server-55 Percona-Server-server-56 Percona-Server-server-57 Percona-Server-server +%if 0%{?systemd} +Requires(post): systemd +Requires(preun): systemd +Requires(postun): systemd +%else +Requires(post): /sbin/chkconfig +Requires(preun): /sbin/chkconfig +Requires(preun): /sbin/service +%endif + +%description -n greatsql-server +GreatSQL database server binaries and system database setup. + +For a description of GreatSQL see https://greatsql.cn + +%package -n greatsql-client +Summary: GreatSQL - Client +Group: Applications/Databases +Requires: greatsql-shared +Conflicts: mysql mysql-client mysql-community-client +Conflicts: mariadb mariadb-client +Conflicts: Percona-SQL-client-50 Percona-Server-client-51 Percona-Server-client-55 Percona-Server-client-56 Percona-Server-client-57 Percona-Server-client + +%description -n greatsql-client +This package contains the standard GreatSQL client and administration tools. + +For a description of GreatSQL see https://greatsql.cn + +%package -n greatsql-test +Summary: Test suite for the GreatSQL +Group: Applications/Databases +Requires: perl(Carp) +Requires: perl(Config) +Requires: perl(Cwd) +Requires: perl(Data::Dumper) +Requires: perl(English) +Requires: perl(Errno) +Requires: perl(Exporter) +Requires: perl(Fcntl) +Requires: perl(File::Basename) +Requires: perl(File::Copy) +Requires: perl(File::Find) +Requires: perl(File::Path) +Requires: perl(File::Spec) +Requires: perl(File::Spec::Functions) +Requires: perl(File::Temp) +Requires: perl(Getopt::Long) +Requires: perl(IO::File) +Requires: perl(IO::Handle) +Requires: perl(IO::Pipe) +Requires: perl(IO::Select) +Requires: perl(IO::Socket) +Requires: perl(IO::Socket::INET) +Requires: perl(JSON) +Requires: perl(Memoize) +Requires: perl(POSIX) +Requires: perl(Sys::Hostname) +Requires: perl(Time::HiRes) +Requires: perl(Time::localtime) +Requires(pre): greatsql-shared greatsql-client greatsql-server +Conflicts: mysql-test mysql-community-test +Conflicts: mariadb-test +Conflicts: Percona-SQL-test-50 Percona-Server-test-51 Percona-Server-test-55 Percona-Server-test-56 Percona-Server-test-57 Percona-Server-test + +%description -n greatsql-test +This package contains the GreatSQL regression test suite. + +For a description of GreatSQL see https://greatsql.cn + +%package -n greatsql-devel +Summary: GreatSQL - Development header files and libraries +Group: Applications/Databases +Conflicts: mysql-devel mysql-community-devel +Conflicts: mariadb-devel mariadb-connector-c-devel +Conflicts: Percona-SQL-devel-50 Percona-Server-devel-51 Percona-Server-devel-55 Percona-Server-devel-56 Percona-Server-devel-57 Percona-Server-devel + +%description -n greatsql-devel +This package contains the development header files and libraries necessary +to develop GreatSQL client applications. + +For a description of GreatSQL see https://greatsql.cn + +%package -n greatsql-shared +Summary: GreatSQL - Shared libraries +Group: Applications/Databases +Conflicts: mysql-libs mysql-community-libs mysql-libs < %{version}-%{release} +Conflicts: mariadb-libs +Conflicts: Percona-Server-shared-51 Percona-Server-shared-55 Percona-Server-shared-55 Percona-Server-shared-56 Percona-Server-shared-57 Percona-Server-shared + +%description -n greatsql-shared +This package contains the shared libraries (*.so*) which certain languages +and applications need to dynamically load and use GreatSQL. + +For a description of GreatSQL see https://greatsql.cn + +%if 0%{?tokudb} +%package -n greatsql-tokudb +Summary: GreatSQL - TokuDB package +Group: Applications/Databases +Requires: greatsql-server = %{version}-%{release} +Requires: greatsql-shared = %{version}-%{release} +Requires: greatsql-client = %{version}-%{release} +Requires: jemalloc >= 3.3.0 +Conflicts: Percona-server-tokudb + +%description -n greatsql-tokudb +This package contains the TokuDB plugin for GreatSQL %{version}-%{release} +%endif + +%if 0%{?rocksdb} +%package -n greatsql-rocksdb +Summary: GreatSQL - RocksDB package +Group: Applications/Databases +Requires: greatsql-server = %{version}-%{release} +Requires: greatsql-shared = %{version}-%{release} +Requires: greatsql-client = %{version}-%{release} +Conflicts: Percona-server-rocksdb + +%description -n greatsql-rocksdb +This package contains the RocksDB plugin for GreatSQL %{version}-%{release} + +For a description of GreatSQL see https://greatsql.cn +%endif + +%package -n greatsql-mysql-router +Summary: GreatSQL MySQL Router +Group: Applications/Databases +Provides: greatsql-mysql-router = %{version}-%{release} +Obsoletes: greatsql-mysql-router < %{version}-%{release} +Conflicts: mysql-router mysql-router-community +Conflicts: percona-mysql-router + +%description -n greatsql-mysql-router +The GreatSQL MySQL Router software delivers a fast, multi-threaded way of +routing connections from GreatSQL Clients to GreatSQL Servers. + +For a description of GreatSQL see https://greatsql.cn + +%package -n greatsql-mysql-router-devel +Summary: Development header files and libraries for GreatSQL MySQL Router +Group: Applications/Databases +Provides: greatsql-mysql-router-devel = %{version}-%{release} +Conflicts: mysql-router-devel +Conflicts: percona-mysql-router-devel + +%description -n greatsql-mysql-router-devel +This package contains the development header files and libraries +necessary to develop GreatSQL MySQL Router applications. + +For a description of GreatSQL see https://greatsql.cn + +%package -n greatsql-icu-data-files +Summary: GreatSQL packaging of ICU data files + +%description -n greatsql-icu-data-files +This package contains ICU data files needer by GreatSQL regular expressions. + +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 -P0 -p0 +%patch -P1 -p1 +cp %{SOURCE11} scripts + +%build +# Fail quickly and obviously if user tries to build as root +%if 0%{?runselftest} +if [ "x$(id -u)" = "x0" ] ; then + echo "The MySQL regression tests may fail if run as root." + echo "If you really need to build the RPM as root, use" + echo "--define='runselftest 0' to skip the regression tests." + exit 1 +fi +%endif + +# Build full release +mkdir release +( + cd release + cmake ../%{src_dir} \ + -DBUILD_CONFIG=mysql_release \ + -DINSTALL_LAYOUT=RPM \ + -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + -DWITH_BOOST=.. \ + -DCMAKE_C_FLAGS="%{optflags}%{?with_debug: -fno-strict-overflow -Wno-unused-result -Wno-unused-function -Wno-unused-but-set-variable}" \ + -DCMAKE_CXX_FLAGS="%{optflags}%{?with_debug: -fno-strict-overflow -Wno-unused-result -Wno-unused-function -Wno-unused-but-set-variable}" \ + -DCMAKE_EXE_LINKER_FLAGS="-pie %{build_ldflags}" \ + -DWITH_MYSQLD_LDFLAGS="%{build_ldflags}" \ + -DCMAKE_C_LINK_FLAGS="%{build_ldflags}" \ + -DCMAKE_CXX_LINK_FLAGS="%{build_ldflags}" \ + -DCMAKE_SKIP_INSTALL_RPATH=YES \ +%if 0%{?systemd} + -DWITH_SYSTEMD=1 \ +%endif + -DWITH_INNODB_MEMCACHED=1 \ + -DINSTALL_LIBDIR="%{_lib}/mysql" \ + -DINSTALL_PLUGINDIR="%{_lib}/mysql/plugin" \ + -DMYSQL_UNIX_ADDR="%{mysqldatadir}/mysql.sock" \ + -DINSTALL_MYSQLSHAREDIR=share/greatsql \ + -DINSTALL_SUPPORTFILESDIR=share/greatsql \ + -DFEATURE_SET="%{feature_set}" \ + -DWITH_AUTHENTICATION_LDAP=OFF \ + -DWITH_PAM=1 \ + -DWITH_TOKUDB=OFF \ + -DWITH_TOKUDB_BACKUP=OFF \ + -DWITH_NDB=OFF \ + -DWITH_NDBCLUSTER=OFF \ + -DWITH_NDBCLUSTER_STORAGE_ENGINE=OFF \ + -DWITH_AUTHENTICATION_KERBEROS=ON \ + -DWITH_UNIT_TESTS=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 \ +%ifnarch aarch64 + -DWITH_NUMA=ON \ +%endif + -DWITH_LDAP=system \ + -DWITH_SYSTEM_LIBS=ON \ + -DWITH_LZ4=bundled \ + -DWITH_ZLIB=bundled \ + -DWITH_PROTOBUF=bundled \ + -DWITH_RAPIDJSON=bundled \ + -DWITH_ICU=bundled \ + -DWITH_READLINE=system \ + -DWITH_LIBEVENT=bundled \ + -DWITH_ZSTD=bundled \ + -DWITH_KEYRING_VAULT=ON \ + -DWITH_FIDO=bundled \ + -DWITHOUT_RAPID_SECONDARY_STORAGE_ENGINE=1 \ + -DWITH_SSL=system \ + -DWITH_MECAB=system \ + -DREPRODUCIBLE_BUILD=OFF \ + -DWITH_ROUTER=ON \ + -DENABLED_LOCAL_INFILE=ON \ + -DCOMPILATION_COMMENT="%{compilation_comment_release}" %{TOKUDB_FLAGS} %{TOKUDB_DEBUG_OFF} %{ROCKSDB_FLAGS} + echo BEGIN_NORMAL_CONFIG ; egrep '^#define' include/config.h ; echo END_NORMAL_CONFIG + make %{?_smp_mflags} +) + +%install +%define _unpackaged_files_terminate_build 0 +MBD=$RPM_BUILD_DIR/%{src_dir} + +# Ensure that needed directories exists +install -d -m 0751 %{buildroot}/var/lib/mysql +install -d -m 0755 %{buildroot}/var/run/mysqld +install -d -m 0750 %{buildroot}/var/lib/mysql-files +install -d -m 0750 %{buildroot}/var/lib/mysql-keyring + +# Router directories +install -d -m 0755 %{buildroot}/var/log/mysqlrouter +install -d -m 0755 %{buildroot}/var/run/mysqlrouter + +# Install all binaries +cd $MBD/release +make DESTDIR=%{buildroot} install + +# Install logrotate and autostart +#install -D -m 0644 packaging/rpm-common/mysql.logrotate %{buildroot}%{_sysconfdir}/logrotate.d/mysql +#investigate this logrotate +install -D -m 0644 $MBD/release/support-files/mysql-log-rotate %{buildroot}%{_sysconfdir}/logrotate.d/mysql +install -D -m 0644 $MBD/%{src_dir}/build-gs/rpm/mysqld.cnf %{buildroot}%{_sysconfdir}/my.cnf +install -D -p -m 0644 %{_builddir}/greatsql-%{version}-%{greatsql_version}/greatsql-%{version}-%{greatsql_version}/scripts/mysqld.cnf %{buildroot}%{_sysconfdir}/my.cnf +install -d %{buildroot}%{_sysconfdir}/my.cnf.d + +#%if 0%{?systemd} +#%else +#%if 0%{?rhel} < 7 +# install -D -m 0755 $MBD/%{src_dir}/build-gs/rpm/mysql.init %{buildroot}%{_sysconfdir}/init.d/mysql +#%endif + + +# Add libdir to linker +install -d -m 0755 %{buildroot}%{_sysconfdir}/ld.so.conf.d +echo "%{_libdir}/mysql" >> %{buildroot}%{_sysconfdir}/ld.so.conf.d/mysql-%{_arch}.conf +echo "%{_libdir}/mysql/private" >> %{buildroot}%{_sysconfdir}/ld.so.conf.d/mysql-%{_arch}.conf +echo "%{_libdir}/mysqlrouter" >> %{buildroot}%{_sysconfdir}/ld.so.conf.d/mysql-%{_arch}.conf +echo "%{_libdir}/mysqlrouter/private" >> %{buildroot}%{_sysconfdir}/ld.so.conf.d/mysql-%{_arch}.conf + +# multiarch support +%ifarch %{multiarchs} + mv %{buildroot}/%{_bindir}/mysql_config %{buildroot}/%{_bindir}/mysql_config-%{__isa_bits} + install -p -m 0755 %{SOURCE12} %{buildroot}/%{_bindir}/mysql_config +%endif + +%if 0%{?systemd} +install -D -p -m 0644 scripts/mysqlrouter.service %{buildroot}%{_unitdir}/mysqlrouter.service +#install -D -p -m 0644 packaging/rpm-common/mysqlrouter.conf %{buildroot}%{_tmpfilesdir}/mysqlrouter.conf +#install -D -p -m 0644 packaging/rpm-common/mysqlrouter.tmpfiles.d %{buildroot}%{_tmpfilesdir}/mysqlrouter.conf +%else +install -D -p -m 0755 packaging/rpm-common/mysqlrouter.init %{buildroot}%{_sysconfdir}/init.d/mysqlrouter +%endif +install -D -p -m 0644 packaging/rpm-common/mysqlrouter.conf %{buildroot}%{_sysconfdir}/mysqlrouter/mysqlrouter.conf + +# Remove files pages we explicitly do not want to package +rm -rf %{buildroot}%{_infodir}/mysql.info* +rm -rf %{buildroot}%{_datadir}/greatsql/mysql.server +rm -rf %{buildroot}%{_datadir}/greatsql/mysqld_multi.server +rm -f %{buildroot}%{_datadir}/greatsql/win_install_firewall.sql +rm -f %{buildroot}%{_datadir}/greatsql/audit_log_filter_win_install.sql +rm -rf %{buildroot}%{_bindir}/mysql_embedded +rm -rf %{buildroot}/usr/cmake/coredumper-relwithdebinfo.cmake +rm -rf %{buildroot}/usr/cmake/coredumper.cmake +rm -rf %{buildroot}/usr/include/kmip.h +rm -rf %{buildroot}/usr/include/kmippp.h +rm -rf %{buildroot}/usr/lib/libkmip.a +rm -rf %{buildroot}/usr/lib/libkmippp.a + +%check +%if 0%{?runselftest} + pushd release + make test VERBOSE=1 + export MTR_BUILD_THREAD=auto + pushd mysql-test + ./mtr \ + --mem --parallel=auto --force --retry=0 \ + --mysqld=--binlog-format=mixed \ + --suite-timeout=720 --testcase-timeout=30 \ + --clean-vardir + rm -r $(readlink var) var +%endif + +%pretrans -n greatsql-server +if [ -d %{_datadir}/mysql ] && [ ! -L %{_datadir}/mysql ]; then + MYCNF_PACKAGE=$(rpm -qf /usr/share/mysql --queryformat "%{NAME}") +fi + +if [ "$MYCNF_PACKAGE" == "mariadb-libs" -o "$MYCNF_PACKAGE" == "mysql-libs" ]; then + MODIFIED=$(rpm -Va "$MYCNF_PACKAGE" | grep '/usr/share/mysql' | awk '{print $1}' | grep -c 5) + if [ "$MODIFIED" == 1 ]; then + cp -r %{_datadir}/mysql %{_datadir}/mysql.old + fi +fi + +%pre -n greatsql-server +/usr/sbin/groupadd -g 27 -o -r mysql >/dev/null 2>&1 || : +/usr/sbin/useradd -M %{!?el5:-N} -g mysql -o -r -d /var/lib/mysql -s /bin/false \ + -c "GreatSQL" -u 27 mysql >/dev/null 2>&1 || : +if [ "$1" = 1 ]; then + if [ -f %{_sysconfdir}/my.cnf ]; then + timestamp=$(date '+%Y%m%d-%H%M') + cp %{_sysconfdir}/my.cnf \ + %{_sysconfdir}/my.cnf.rpmsave-${timestamp} + fi +fi + +%post -n greatsql-server +datadir=$(/usr/bin/my_print_defaults server mysqld | grep '^--datadir=' | sed -n 's/--datadir=//p' | tail -n 1) +/bin/chmod 0751 "$datadir" >/dev/null 2>&1 || : +if [ ! -e /var/log/mysqld.log ]; then + /usr/bin/install -m0640 -omysql -gmysql /dev/null /var/log/mysqld.log +fi + +%if 0%{?systemd} + %systemd_post mysqld.service + if [ $1 == 1 ]; then + /usr/bin/systemctl enable mysqld >/dev/null 2>&1 || : + fi +%else + if [ $1 == 1 ]; then + /sbin/chkconfig --add mysql + fi +%endif + +if [ -d /etc/greatsql.conf.d ]; then + CONF_EXISTS=$(grep "greatsql.conf.d" /etc/my.cnf | wc -l) + if [ ${CONF_EXISTS} = 0 ]; then + echo "!includedir /etc/greatsql.conf.d/" >> /etc/my.cnf + fi +fi +echo "user = mysql" >> /etc/my.cnf +echo "datadir = /var/lib/mysql" >> /etc/my.cnf +echo "socket = /var/lib/mysql/mysql.sock" >> /etc/my.cnf +echo "log-error = /var/log/mysqld.log" >> /etc/my.cnf +echo "pid-file = /var/run/mysqld/mysqld.pid" >> /etc/my.cnf +echo "slow_query_log = ON" >> /etc/my.cnf +echo "long_query_time = 0.01" >> /etc/my.cnf +echo "log_slow_verbosity = FULL" >> /etc/my.cnf +echo "log_error_verbosity = 3" >> /etc/my.cnf +echo "innodb_buffer_pool_size = 1G" >> /etc/my.cnf +echo "innodb_redo_log_capacity = 256M" >> /etc/my.cnf +echo "innodb_io_capacity = 10000" >> /etc/my.cnf +echo "innodb_io_capacity_max = 20000" >> /etc/my.cnf +echo "innodb_flush_sync = OFF" >> /etc/my.cnf + +%preun -n greatsql-server +%if 0%{?systemd} + %systemd_preun mysqld.service +%else + if [ "$1" = 0 ]; then + /sbin/service mysql stop >/dev/null 2>&1 || : + /sbin/chkconfig --del mysql + fi +%endif +if [ "$1" = 0 ]; then + if [ -L %{_datadir}/mysql ]; then + rm %{_datadir}/mysql + fi + if [ -f %{_sysconfdir}/my.cnf ]; then + cp %{_sysconfdir}/my.cnf \ + %{_sysconfdir}/my.cnf.rpmsave + fi +fi + +%postun -n greatsql-server +%if 0%{?systemd} + %systemd_postun_with_restart mysqld.service +%else + if [ $1 -ge 1 ]; then + /sbin/service mysql condrestart >/dev/null 2>&1 || : + fi +%endif + +%posttrans -n greatsql-server +if [ -d %{_datadir}/mysql ] && [ ! -L %{_datadir}/mysql ]; then + MYCNF_PACKAGE=$(rpm -qf /usr/share/mysql --queryformat "%{NAME}") + if [ "$MYCNF_PACKAGE" == "file %{_datadir}/mysql is not owned by any package" ]; then + mv %{_datadir}/mysql %{_datadir}/mysql.old + fi +fi + +if [ ! -d %{_datadir}/mysql ] && [ ! -L %{_datadir}/mysql ]; then + ln -s %{_datadir}/greatsql %{_datadir}/mysql +fi + +%post -n greatsql-shared + +%postun -n greatsql-shared + +%if 0%{?rocksdb} +%post -n greatsql-rocksdb +if [ $1 -eq 1 ] ; then + echo -e "\n\n * This release of GreatSQL is distributed with RocksDB storage engine." + echo -e " * Run the following script to enable the RocksDB storage engine in GreatSQL:\n" + echo -e "\tps-admin --enable-rocksdb -u -p[mysql_admin_pass] [-S ] [-h -P ]\n" +fi +%endif + +%pre -n greatsql-mysql-router +/usr/sbin/groupadd -r mysqlrouter >/dev/null 2>&1 || : +/usr/sbin/useradd -M -N -g mysqlrouter -r -d /var/lib/mysqlrouter -s /bin/false \ + -c "GreatSQL MySQL Router" mysqlrouter >/dev/null 2>&1 || : + +%post -n greatsql-mysql-router +/sbin/ldconfig +%if 0%{?systemd} +%systemd_post mysqlrouter.service +%else +/sbin/chkconfig --add mysqlrouter +%endif + +%preun -n greatsql-mysql-router +%if 0%{?systemd} +%systemd_preun mysqlrouter.service +%else +if [ "$1" = 0 ]; then + /sbin/service mysqlrouter stop >/dev/null 2>&1 || : + /sbin/chkconfig --del mysqlrouter +fi +%endif + +%postun -n greatsql-mysql-router +/sbin/ldconfig +%if 0%{?systemd} +%systemd_postun_with_restart mysqlrouter.service +%else +if [ $1 -ge 1 ]; then + /sbin/service mysqlrouter condrestart >/dev/null 2>&1 || : +fi +%endif + + +%files -n greatsql-server +%defattr(-, root, root, -) +%doc %{?license_files_server} +%doc %{src_dir}/Docs/INFO_SRC* +%doc release/Docs/INFO_BIN* +%attr(644, root, root) %{_mandir}/man1/innochecksum.1* +%attr(644, root, root) %{_mandir}/man1/ibd2sdi.1* +%attr(644, root, root) %{_mandir}/man1/my_print_defaults.1* +%attr(644, root, root) %{_mandir}/man1/myisam_ftdump.1* +%attr(644, root, root) %{_mandir}/man1/myisamchk.1* +%attr(644, root, root) %{_mandir}/man1/myisamlog.1* +%attr(644, root, root) %{_mandir}/man1/myisampack.1* +%attr(644, root, root) %{_mandir}/man8/mysqld.8* +%attr(644, root, root) %{_mandir}/man1/mysqldumpslow.1* +%attr(644, root, root) %{_mandir}/man1/mysql_secure_installation.1* +%attr(644, root, root) %{_mandir}/man1/mysql_upgrade.1* +%attr(644, root, root) %{_mandir}/man1/mysqlman.1* +%attr(644, root, root) %{_mandir}/man1/mysql_tzinfo_to_sql.1* +%attr(644, root, root) %{_mandir}/man1/perror.1* +%attr(644, root, root) %{_mandir}/man1/mysql_ssl_rsa_setup.1* +%attr(644, root, root) %{_mandir}/man1/lz4_decompress.1* +%attr(644, root, root) %{_mandir}/man1/zlib_decompress.1* + +%config(noreplace) %{_sysconfdir}/my.cnf +%dir %{_sysconfdir}/my.cnf.d + +%attr(755, root, root) %{_bindir}/comp_err +%attr(755, root, root) %{_bindir}/innochecksum +%attr(755, root, root) %{_bindir}/ibd2sdi +%attr(755, root, root) %{_bindir}/my_print_defaults +%attr(755, root, root) %{_bindir}/myisam_ftdump +%attr(755, root, root) %{_bindir}/myisamchk +%attr(755, root, root) %{_bindir}/myisamlog +%attr(755, root, root) %{_bindir}/myisampack +%attr(755, root, root) %{_bindir}/mysql_secure_installation +%attr(755, root, root) %{_bindir}/mysql_tzinfo_to_sql +%attr(755, root, root) %{_bindir}/mysql_upgrade +%attr(755, root, root) %{_bindir}/mysqldumpslow +%attr(755, root, root) %{_bindir}/ps_mysqld_helper +%attr(755, root, root) %{_bindir}/perror +%attr(755, root, root) %{_bindir}/mysql_ssl_rsa_setup +%attr(755, root, root) %{_bindir}/lz4_decompress +%attr(755, root, root) %{_bindir}/zlib_decompress +%attr(755, root, root) %{_bindir}/ps-admin +%attr(755, root, root) %{_bindir}/zstd_decompress +%attr(755, root, root) %{_bindir}/mysqldecompress +%if 0%{?systemd} +%attr(755, root, root) %{_bindir}/mysqld_pre_systemd +%attr(755, root, root) %{_bindir}/mysqld_safe +%else +%attr(755, root, root) %{_bindir}/mysqld_multi +%attr(755, root, root) %{_bindir}/mysqld_safe +%endif +%attr(755, root, root) %{_sbindir}/mysqld +%dir %{_libdir}/mysql/private +%attr(755, root, root) %{_libdir}/mysql/private/libprotobuf-lite.so.* +%attr(755, root, root) %{_libdir}/mysql/private/libprotobuf.so.* + +%dir %{_libdir}/mysql/plugin +%attr(755, root, root) %{_libdir}/mysql/plugin/procfs.so +%attr(755, root, root) %{_libdir}/mysql/plugin/binlog_utils_udf.so +%attr(755, root, root) %{_libdir}/mysql/plugin/adt_null.so +%attr(755, root, root) %{_libdir}/mysql/plugin/auth_socket.so +%attr(755, root, root) %{_libdir}/mysql/plugin/authentication_kerberos_client.so +%attr(755, root, root) %{_libdir}/mysql/plugin/authentication_ldap_sasl.so +%attr(755, root, root) %{_libdir}/mysql/plugin/authentication_ldap_sasl_client.so +%attr(755, root, root) %{_libdir}/mysql/plugin/authentication_ldap_simple.so +%attr(755, root, root) %{_libdir}/mysql/plugin/authentication_oci_client.so +%attr(755, root, root) %{_libdir}/mysql/plugin/greatdb_ha.so +%attr(755, root, root) %{_libdir}/mysql/plugin/group_replication.so +%attr(755, root, root) %{_libdir}/mysql/plugin/component_audit_api_message_emit.so +%attr(755, root, root) %{_libdir}/mysql/plugin/component_encryption_udf.so +%attr(755, root, root) %{_libdir}/mysql/plugin/component_keyring_file.so +%attr(755, root, root) %{_libdir}/mysql/plugin/component_keyring_kmip.so +%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 +%attr(755, root, root) %{_libdir}/mysql/plugin/component_reference_cache.so +%attr(755, root, root) %{_libdir}/mysql/plugin/component_test_audit_api_message.so +%attr(755, root, root) %{_libdir}/mysql/plugin/component_test_component_deinit.so +%attr(755, root, root) %{_libdir}/mysql/plugin/component_test_host_application_signal.so +%attr(755, root, root) %{_libdir}/mysql/plugin/component_test_mysql_command_services.so +%attr(755, root, root) %{_libdir}/mysql/plugin/component_test_mysql_system_variable_set.so +%attr(755, root, root) %{_libdir}/mysql/plugin/component_test_sensitive_system_variables.so +%attr(755, root, root) %{_libdir}/mysql/plugin/component_test_status_var_reader.so +%attr(755, root, root) %{_libdir}/mysql/plugin/component_test_table_access.so +%attr(755, root, root) %{_libdir}/mysql/plugin/component_test_udf_services.so +%attr(755, root, root) %{_libdir}/mysql/plugin/component_validate_password.so +%attr(755, root, root) %{_libdir}/mysql/plugin/conflicting_variables.so +%attr(755, root, root) %{_libdir}/mysql/plugin/connection_control.so +%attr(755, root, root) %{_libdir}/mysql/plugin/ddl_rewriter.so +%attr(755, root, root) %{_libdir}/mysql/plugin/ha_example.so +%attr(755, root, root) %{_libdir}/mysql/plugin/ha_mock.so +%attr(755, root, root) %{_libdir}/mysql/plugin/keyring_file.so +%attr(755, root, root) %{_libdir}/mysql/plugin/keyring_udf.so +%attr(755, root, root) %{_libdir}/mysql/plugin/innodb_engine.so +%attr(755, root, root) %{_libdir}/mysql/plugin/libmemcached.so +%attr(755, root, root) %{_libdir}/mysql/plugin/locking_service.so +%attr(755, root, root) %{_libdir}/mysql/plugin/mypluglib.so +%attr(755, root, root) %{_libdir}/mysql/plugin/mysql_clone.so +%attr(755, root, root) %{_libdir}/mysql/plugin/mysql_no_login.so +%attr(755, root, root) %{_libdir}/mysql/plugin/rewrite_example.so +%attr(755, root, root) %{_libdir}/mysql/plugin/rewriter.so +%attr(755, root, root) %{_libdir}/mysql/plugin/semisync_master.so +%attr(755, root, root) %{_libdir}/mysql/plugin/semisync_slave.so +%attr(755, root, root) %{_libdir}/mysql/plugin/semisync_replica.so +%attr(755, root, root) %{_libdir}/mysql/plugin/semisync_source.so +%attr(755, root, root) %{_libdir}/mysql/plugin/validate_password.so +%attr(755, root, root) %{_libdir}/mysql/plugin/version_token.so +%attr(755, root, root) %{_libdir}/mysql/plugin/test_services_command_services.so +%attr(755, root, root) %{_libdir}/mysql/plugin/test_services_host_application_signal.so +%attr(755, root, root) %{_libdir}/mysql/plugin/test_udf_wrappers.so +%attr(755, root, root) %{_libdir}/mysql/plugin/data_masking* +%if 0%{?mecab} +%{_libdir}/mysql/mecab +%attr(755, root, root) %{_libdir}/mysql/plugin/libpluginmecab.so +%endif +#coredumper +%attr(755, root, root) %{_includedir}/coredumper/coredumper.h +%attr(755, root, root) /usr/lib/libcoredumper.a +# Percona plugins +%attr(755, root, root) %{_libdir}/mysql/plugin/audit_log.so +%attr(755, root, root) %{_libdir}/mysql/plugin/audit_login_messages.so +%attr(755, root, root) %{_libdir}/mysql/plugin/auth_pam.so +%attr(755, root, root) %{_libdir}/mysql/plugin/auth_pam_compat.so +%attr(755, root, root) %{_libdir}/mysql/plugin/libfnv1a_udf.* +%attr(755, root, root) %{_libdir}/mysql/plugin/libfnv_udf.* +%attr(755, root, root) %{_libdir}/mysql/plugin/libmurmur_udf.* +%attr(755, root, root) %{_libdir}/mysql/plugin/dialog.so +%attr(755, root, root) %{_libdir}/mysql/plugin/keyring_vault.so +%attr(644, root, root) %{_datadir}/greatsql/mysql-log-rotate +%attr(644, root, root) %{_datadir}/greatsql/dictionary.txt +%attr(644, root, root) %{_datadir}/greatsql/innodb_memcached_config.sql +%attr(644, root, root) %{_datadir}/greatsql/install_rewriter.sql +%attr(644, root, root) %{_datadir}/greatsql/uninstall_rewriter.sql +%attr(644, root, root) %{_datadir}/greatsql/install_audit_log.sql +%attr(644, root, root) %{_datadir}/greatsql/sys_masking.sql +%attr(644, root, root) %{_datadir}/greatsql/uninstall_audit_log.sql +%if 0%{?systemd} +%attr(644, root, root) %{_unitdir}/mysqld.service +%attr(644, root, root) %{_unitdir}/mysqld@.service +%attr(644, root, root) %{_prefix}/lib/tmpfiles.d/mysql.conf +%else +%attr(755, root, root) %{_sysconfdir}/init.d/mysql +%endif +%attr(644, root, root) %config(noreplace,missingok) %{_sysconfdir}/logrotate.d/mysql +%dir %attr(751, mysql, mysql) /var/lib/mysql +%dir %attr(755, mysql, mysql) /var/run/mysqld +%dir %attr(750, mysql, mysql) /var/lib/mysql-files +%dir %attr(750, mysql, mysql) /var/lib/mysql-keyring + +%attr(755, root, root) %{_datadir}/greatsql/messages_to_clients.txt +%attr(755, root, root) %{_datadir}/greatsql/messages_to_error_log.txt +%attr(755, root, root) %{_datadir}/greatsql/charsets/ +%attr(755, root, root) %{_datadir}/greatsql/bulgarian/ +%attr(755, root, root) %{_datadir}/greatsql/chinese/ +%attr(755, root, root) %{_datadir}/greatsql/czech/ +%attr(755, root, root) %{_datadir}/greatsql/danish/ +%attr(755, root, root) %{_datadir}/greatsql/dutch/ +%attr(755, root, root) %{_datadir}/greatsql/english/ +%attr(755, root, root) %{_datadir}/greatsql/estonian/ +%attr(755, root, root) %{_datadir}/greatsql/french/ +%attr(755, root, root) %{_datadir}/greatsql/german/ +%attr(755, root, root) %{_datadir}/greatsql/greek/ +%attr(755, root, root) %{_datadir}/greatsql/hungarian/ +%attr(755, root, root) %{_datadir}/greatsql/italian/ +%attr(755, root, root) %{_datadir}/greatsql/japanese/ +%attr(755, root, root) %{_datadir}/greatsql/korean/ +%attr(755, root, root) %{_datadir}/greatsql/norwegian-ny/ +%attr(755, root, root) %{_datadir}/greatsql/norwegian/ +%attr(755, root, root) %{_datadir}/greatsql/polish/ +%attr(755, root, root) %{_datadir}/greatsql/portuguese/ +%attr(755, root, root) %{_datadir}/greatsql/romanian/ +%attr(755, root, root) %{_datadir}/greatsql/russian/ +%attr(755, root, root) %{_datadir}/greatsql/serbian/ +%attr(755, root, root) %{_datadir}/greatsql/slovak/ +%attr(755, root, root) %{_datadir}/greatsql/spanish/ +%attr(755, root, root) %{_datadir}/greatsql/swedish/ +%attr(755, root, root) %{_datadir}/greatsql/ukrainian/ + +%files -n greatsql-client +%defattr(-, root, root, -) +%doc %{?license_files_server} +%attr(755, root, root) %{_bindir}/mysql +%attr(755, root, root) %{_bindir}/mysqladmin +%attr(755, root, root) %{_bindir}/mysqlbinlog +%attr(755, root, root) %{_bindir}/mysqlcheck +%attr(755, root, root) %{_bindir}/mysqldecrypt +%attr(755, root, root) %{_bindir}/mysqldump +%attr(755, root, root) %{_bindir}/mysqlimport +%attr(755, root, root) %{_bindir}/mysqlpump +%attr(755, root, root) %{_bindir}/mysqlshow +%attr(755, root, root) %{_bindir}/mysqlslap +%attr(755, root, root) %{_bindir}/mysql_config_editor +%attr(755, root, root) %{_bindir}/mysql_migrate_keyring +%attr(755, root, root) %{_bindir}/mysql_keyring_encryption_test + +%attr(644, root, root) %{_mandir}/man1/mysql.1* +%attr(644, root, root) %{_mandir}/man1/mysqladmin.1* +%attr(644, root, root) %{_mandir}/man1/mysqlbinlog.1* +%attr(644, root, root) %{_mandir}/man1/mysqlcheck.1* +%attr(644, root, root) %{_mandir}/man1/mysqldump.1* +%attr(644, root, root) %{_mandir}/man1/mysqlpump.1* +%attr(644, root, root) %{_mandir}/man1/mysqlimport.1* +%attr(644, root, root) %{_mandir}/man1/mysqlshow.1* +%attr(644, root, root) %{_mandir}/man1/mysqlslap.1* +%attr(644, root, root) %{_mandir}/man1/mysql_config_editor.1* + +%files -n greatsql-devel +%defattr(-, root, root, -) +%doc %{?license_files_server} +%attr(644, root, root) %{_mandir}/man1/comp_err.1* +%attr(644, root, root) %{_mandir}/man1/mysql_config.1* +%attr(755, root, root) %{_bindir}/mysql_config +%ifarch %{multiarchs} +%attr(755, root, root) %{_bindir}/mysql_config-%{__isa_bits} +%endif +%{_includedir}/mysql +%{_datadir}/aclocal/mysql.m4 +%{_libdir}/mysql/lib%{shared_lib_pri_name}.a +%{_libdir}/mysql/libmysqlservices.a +%{_libdir}/mysql/lib%{shared_lib_pri_name}.so +%{_libdir}/pkgconfig/%{shared_lib_pri_name}.pc + +%files -n greatsql-shared +%defattr(-, root, root, -) +%doc %{?license_files_server} +%dir %attr(755, root, root) %{_libdir}/mysql +%attr(644, root, root) %{_sysconfdir}/ld.so.conf.d/mysql-%{_arch}.conf +%{_libdir}/mysql/lib%{shared_lib_pri_name}.so.21* + +%files -n greatsql-test +%defattr(-, root, root, -) +%doc %{?license_files_server} +%attr(-, root, root) %{_datadir}/mysql-test +%attr(755, root, root) %{_bindir}/mysql_client_test +%attr(755, root, root) %{_bindir}/mysqltest +%attr(755, root, root) %{_bindir}/mysqltest_safe_process +%attr(755, root, root) %{_bindir}/mysqlxtest + +%attr(755, root, root) %{_libdir}/mysql/plugin/libtest_sql_sleep_is_connected.so +%attr(755, root, root) %{_libdir}/mysql/plugin/auth.so +%attr(755, root, root) %{_libdir}/mysql/plugin/auth_test_plugin.so +%attr(755, root, root) %{_libdir}/mysql/plugin/component_example_component1.so +%attr(755, root, root) %{_libdir}/mysql/plugin/component_example_component2.so +%attr(755, root, root) %{_libdir}/mysql/plugin/component_example_component3.so +%attr(755, root, root) %{_libdir}/mysql/plugin/component_log_sink_test.so +%attr(755, root, root) %{_libdir}/mysql/plugin/component_test_backup_lock_service.so +%attr(755, root, root) %{_libdir}/mysql/plugin/component_test_string_service_charset.so +%attr(755, root, root) %{_libdir}/mysql/plugin/component_test_string_service_long.so +%attr(755, root, root) %{_libdir}/mysql/plugin/component_test_string_service.so +%attr(755, root, root) %{_libdir}/mysql/plugin/component_pfs_example.so +%attr(755, root, root) %{_libdir}/mysql/plugin/component_pfs_example_component_population.so +%attr(755, root, root) %{_libdir}/mysql/plugin/pfs_example_plugin_employee.so +%attr(755, root, root) %{_libdir}/mysql/plugin/component_test_pfs_notification.so +%attr(755, root, root) %{_libdir}/mysql/plugin/component_test_pfs_resource_group.so +%attr(755, root, root) %{_libdir}/mysql/plugin/component_test_udf_registration.so +%attr(755, root, root) %{_libdir}/mysql/plugin/component_test_mysql_current_thread_reader.so +%attr(755, root, root) %{_libdir}/mysql/plugin/component_udf_reg_3_func.so +%attr(755, root, root) %{_libdir}/mysql/plugin/component_udf_reg_avg_func.so +%attr(755, root, root) %{_libdir}/mysql/plugin/component_udf_reg_int_func.so +%attr(755, root, root) %{_libdir}/mysql/plugin/component_udf_reg_int_same_func.so +%attr(755, root, root) %{_libdir}/mysql/plugin/component_udf_reg_only_3_func.so +%attr(755, root, root) %{_libdir}/mysql/plugin/component_udf_reg_real_func.so +%attr(755, root, root) %{_libdir}/mysql/plugin/component_udf_unreg_3_func.so +%attr(755, root, root) %{_libdir}/mysql/plugin/component_udf_unreg_int_func.so +%attr(755, root, root) %{_libdir}/mysql/plugin/component_udf_unreg_real_func.so +%attr(755, root, root) %{_libdir}/mysql/plugin/component_test_sys_var_service_int.so +%attr(755, root, root) %{_libdir}/mysql/plugin/component_test_sys_var_service.so +%attr(755, root, root) %{_libdir}/mysql/plugin/component_test_sys_var_service_same.so +%attr(755, root, root) %{_libdir}/mysql/plugin/component_test_sys_var_service_str.so +%attr(755, root, root) %{_libdir}/mysql/plugin/component_test_status_var_service.so +%attr(755, root, root) %{_libdir}/mysql/plugin/component_test_status_var_service_int.so +%attr(755, root, root) %{_libdir}/mysql/plugin/component_test_status_var_service_reg_only.so +%attr(755, root, root) %{_libdir}/mysql/plugin/component_test_status_var_service_str.so +%attr(755, root, root) %{_libdir}/mysql/plugin/component_test_status_var_service_unreg_only.so +%attr(755, root, root) %{_libdir}/mysql/plugin/component_test_system_variable_source.so +%attr(644, root, root) %{_libdir}/mysql/plugin/daemon_example.ini +%attr(755, root, root) %{_libdir}/mysql/plugin/libdaemon_example.so +%attr(755, root, root) %{_libdir}/mysql/plugin/replication_observers_example_plugin.so +%attr(755, root, root) %{_libdir}/mysql/plugin/libtest_framework.so +%attr(755, root, root) %{_libdir}/mysql/plugin/libtest_services.so +%attr(755, root, root) %{_libdir}/mysql/plugin/libtest_services_threaded.so +%attr(755, root, root) %{_libdir}/mysql/plugin/libtest_session_detach.so +%attr(755, root, root) %{_libdir}/mysql/plugin/libtest_session_attach.so +%attr(755, root, root) %{_libdir}/mysql/plugin/libtest_session_in_thd.so +%attr(755, root, root) %{_libdir}/mysql/plugin/libtest_session_info.so +%attr(755, root, root) %{_libdir}/mysql/plugin/libtest_sql_2_sessions.so +%attr(755, root, root) %{_libdir}/mysql/plugin/libtest_sql_all_col_types.so +%attr(755, root, root) %{_libdir}/mysql/plugin/libtest_sql_cmds_1.so +%attr(755, root, root) %{_libdir}/mysql/plugin/libtest_sql_commit.so +%attr(755, root, root) %{_libdir}/mysql/plugin/libtest_sql_complex.so +%attr(755, root, root) %{_libdir}/mysql/plugin/libtest_sql_errors.so +%attr(755, root, root) %{_libdir}/mysql/plugin/libtest_sql_lock.so +%attr(755, root, root) %{_libdir}/mysql/plugin/libtest_sql_processlist.so +%attr(755, root, root) %{_libdir}/mysql/plugin/libtest_sql_replication.so +%attr(755, root, root) %{_libdir}/mysql/plugin/libtest_sql_shutdown.so +%attr(755, root, root) %{_libdir}/mysql/plugin/libtest_sql_stmt.so +%attr(755, root, root) %{_libdir}/mysql/plugin/libtest_sql_sqlmode.so +%attr(755, root, root) %{_libdir}/mysql/plugin/libtest_sql_stored_procedures_functions.so +%attr(755, root, root) %{_libdir}/mysql/plugin/libtest_sql_views_triggers.so +%attr(755, root, root) %{_libdir}/mysql/plugin/libtest_x_sessions_deinit.so +%attr(755, root, root) %{_libdir}/mysql/plugin/libtest_x_sessions_init.so +%attr(755, root, root) %{_libdir}/mysql/plugin/qa_auth_client.so +%attr(755, root, root) %{_libdir}/mysql/plugin/qa_auth_interface.so +%attr(755, root, root) %{_libdir}/mysql/plugin/qa_auth_server.so +%attr(755, root, root) %{_libdir}/mysql/plugin/test_security_context.so +%attr(755, root, root) %{_libdir}/mysql/plugin/test_services_plugin_registry.so +%attr(755, root, root) %{_libdir}/mysql/plugin/test_udf_services.so +%attr(755, root, root) %{_libdir}/mysql/plugin/udf_example.so +%attr(755, root, root) %{_libdir}/mysql/plugin/component_mysqlx_global_reset.so +%attr(755, root, root) %{_libdir}/mysql/plugin/component_test_mysql_runtime_error.so +%attr(755, root, root) %{_libdir}/mysql/plugin/libtest_sql_reset_connection.so + +%if 0%{?rocksdb} +%files -n greatsql-rocksdb +%attr(-, root, root) +%{_libdir}/mysql/plugin/ha_rocksdb.so +%attr(755, root, root) %{_bindir}/ldb +%attr(755, root, root) %{_bindir}/mysql_ldb +%attr(755, root, root) %{_bindir}/sst_dump +%endif + +%files -n greatsql-mysql-router +%defattr(-, root, root, -) +%doc %{src_dir}/router/README.router %{src_dir}/router/LICENSE.router +%dir %{_sysconfdir}/mysqlrouter +%config(noreplace) %{_sysconfdir}/mysqlrouter/mysqlrouter.conf +%attr(644, root, root) %config(noreplace,missingok) %{_sysconfdir}/logrotate.d/mysqlrouter +%{_bindir}/mysqlrouter +%{_bindir}/mysqlrouter_keyring +%{_bindir}/mysqlrouter_passwd +%{_bindir}/mysqlrouter_plugin_info +%attr(644, root, root) %{_mandir}/man1/mysqlrouter.1* +%attr(644, root, root) %{_mandir}/man1/mysqlrouter_passwd.1* +%attr(644, root, root) %{_mandir}/man1/mysqlrouter_plugin_info.1* +%if 0%{?systemd} +%{_unitdir}/mysqlrouter.service +%{_tmpfilesdir}/mysqlrouter.conf +%else +%{_sysconfdir}/init.d/mysqlrouter +%endif +%{_libdir}/mysqlrouter/private/libmysqlharness*.so.* +%{_libdir}/mysqlrouter/private/libmysqlrouter*.so.* +%{_libdir}/mysqlrouter/private/libmysqlrouter_http.so.* +%{_libdir}/mysqlrouter/private/libmysqlrouter_http_auth_backend.so.* +%{_libdir}/mysqlrouter/private/libmysqlrouter_http_auth_realm.so.* +%{_libdir}/mysqlrouter/private/libprotobuf-lite.so.* +%dir %{_libdir}/mysqlrouter +%dir %{_libdir}/mysqlrouter/private +%{_libdir}/mysqlrouter/*.so +%dir %attr(755, mysqlrouter, mysqlrouter) /var/log/mysqlrouter +%dir %attr(755, mysqlrouter, mysqlrouter) /var/run/mysqlrouter + +%files -n greatsql-icu-data-files +%defattr(-, root, root, -) +%doc %{?license_files_server} +%dir %attr(755, root, root) %{_libdir}/mysql/private/icudt69l +%{_libdir}/mysql/private/icudt69l/unames.icu +%{_libdir}/mysql/private/icudt69l/brkitr + +%changelog +* Thu Apr 24 2025 GreatSQL - 8.0.32-27.6 +- add mysql and mysqlrouter private dir into ldconfig search path +- update descriptions + +* Fri Apr 11 2025 Funda Wang - 8.0.32-27.5 +- greatsql-mysql-config was removed previously, my.cnf was moved + into greatsql-server package without conflicts and obsoletes + +* Tue Apr 1 2025 GreatSQL - 8.0.32-27.4 +- Remove greatsql-mysql-config, greatsql-shared-compat +- Clearly declare the conflicts list + +* Fri Mar 28 2025 Funda Wang - 8.0.32-27.3 +- fix requires_exclude + +* Mon Mar 24 2025 GreatSQL - 8.0.32-27.2 +- Remove debug build stage +- Add some new cmake options + +* 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 + +* Wed Dec 04 2024 shenzhongwei - 8.0.32-26.5 +- fix: %patchN is deprecated (2 usages found), use %patch N (or %patch -P N) + +* Wed Dec 04 2024 Funda Wang - 8.0.32-26.4 +- use conflicts rather than obsoletes for mysql and mariadb sub packages + +* Tue Nov 26 2024 laokz - 8.0.32-26.3 +- Add riscv64 patch +- Add missed condition of packaging mysql_config-%{__isa_bits} + +* Wed Sep 11 2024 GreatSQL - 8.0.32-26.2 +- Fix the issue of missing audit and datamask plugin files for GreatSQL-8.0.32-26.2 + +* Thu Aug 8 2024 GreatSQL - 8.0.32-26.1 +- Release GreatSQL-8.0.32-26.1 + +* Fri Jun 7 2024 GreatSQL - 8.0.32-25.2 +- Change the compilation dependency of compat-openssl to openssl for GreatSQL-8.0.32-25.2 + +* Mon Apr 22 2024 Wenlong Zhang - 8.0.32-25.3 +- add loongarch64 support + +* Thu Dec 28 2023 GreatSQL - 8.0.32-25.1 +- Release GreatSQL-8.0.32-25.1 + +* Wed Jul 5 2023 GreatSQL - 8.0.32-24.2 +- modify libmysqlrouter.so.* to libmysqlrouter*.so.* + +* Wed Jun 7 2023 GreatSQL - 8.0.32-24.1 +- Release GreatSQL-8.0.32-24.1 for openEuler + +* Mon Feb 6 2023 GreatSQL - 8.0.25-16.6 +- compat-openssl11-devel + +* Tue Sep 13 2022 bzhaoop - 8.0.25-16.5 +- refactor the mysqld.cnf into the rpm package +- Add the self-dependency towards greatsql-server and greatsql-mysql-config. + +* Tue Aug 16 2022 GreatSQL - 8.0.25-16.4 +- new package greatsql-mysql-config + +* Fri Aug 12 2022 bzhaoop - 8.0.25-16.3 +- Hide the conflict libs and files from provides and requires. + +* Tue Aug 9 2022 bzhaoop - 8.0.25-16.2 +- Hide the conflict libs and files. + +* Mon Jun 6 2022 GreatSQL - 8.0.25-16.1 +- Release GreatSQL-8.0.25-16.1 for openEuler + +* Mon Apr 25 2022 GreatSQL - 8.0.25-15.1 +- Release GreatSQL-8.0.25-15.1 for openEuler diff --git a/mysql-5.7-sharedlib-rename.patch b/mysql-5.7-sharedlib-rename.patch new file mode 100644 index 0000000..a6c2978 --- /dev/null +++ b/mysql-5.7-sharedlib-rename.patch @@ -0,0 +1,433 @@ +--- client/base/CMakeLists.txt 2018-08-18 03:29:34.986169793 -0400 ++++ client/base/CMakeLists.txt 2018-08-18 03:29:34.991586542 -0400 +@@ -51,4 +51,4 @@ + ${CMAKE_SOURCE_DIR}/client/multi_factor_passwordopt-vars.cc + ) + +-TARGET_LINK_LIBRARIES(client_base perconaserverclient) ++TARGET_LINK_LIBRARIES(client_base mysqlclient) +--- client/CMakeLists.txt 2018-08-18 03:29:59.708213642 -0400 ++++ client/CMakeLists.txt 2018-08-18 03:29:59.712547041 -0400 +@@ -49,13 +49,13 @@ MYSQL_ADD_EXECUTABLE(mysql + mysql_dump_encrypt.cc + multi_factor_passwordopt-vars.cc + ${CMAKE_CURRENT_SOURCE_DIR}/common/user_registration.cc +- LINK_LIBRARIES perconaserverclient client_base ${MY_READLINE_LIBRARY} ++ LINK_LIBRARIES mysqlclient client_base ${MY_READLINE_LIBRARY} + ) + + IF(NOT WITHOUT_SERVER) + MYSQL_ADD_EXECUTABLE(mysql_upgrade + upgrade/program.cc +- LINK_LIBRARIES perconaserverclient client_base ++ LINK_LIBRARIES mysqlclient client_base + ) + ENDIF() + +@@ -73,7 +73,7 @@ MYSQL_ADD_EXECUTABLE(mysqltest + COMPONENT Test + DEPENDENCIES GenError GenClientError + ENABLE_EXPORTS +- LINK_LIBRARIES perconaserverclient ++ LINK_LIBRARIES mysqlclient + ) + IF (WITH_COREDUMPER) + TARGET_LINK_LIBRARIES(mysqltest coredumper) +@@ -83,29 +83,29 @@ MYSQL_ADD_EXECUTABLE(mysqlcheck + check/mysqlcheck.cc + check/mysqlcheck_core.cc + multi_factor_passwordopt-vars.cc +- LINK_LIBRARIES perconaserverclient ++ LINK_LIBRARIES mysqlclient + ) + MYSQL_ADD_EXECUTABLE(mysqldump + mysqldump.cc + mysql_dump_encrypt.cc + multi_factor_passwordopt-vars.cc +- LINK_LIBRARIES perconaserverclient ++ LINK_LIBRARIES mysqlclient + ) + MYSQL_ADD_EXECUTABLE(mysqldecrypt + ../sql/encrypt.cc + path.cc + mysqldecrypt.cc +- LINK_LIBRARIES perconaserverclient ++ LINK_LIBRARIES mysqlclient + ) + MYSQL_ADD_EXECUTABLE(mysqlimport + mysqlimport.cc + multi_factor_passwordopt-vars.cc +- LINK_LIBRARIES perconaserverclient ++ LINK_LIBRARIES mysqlclient + ) + MYSQL_ADD_EXECUTABLE(mysqlshow + mysqlshow.cc + multi_factor_passwordopt-vars.cc +- LINK_LIBRARIES perconaserverclient ++ LINK_LIBRARIES mysqlclient + ) + + OPTION(WITH_JSON_BINLOG_LIBRARY +@@ -249,7 +249,7 @@ SET(MYSQLBINLOG_SOURCES + SET(MYSQLBINLOG_LIBRARIES + binlogevents_static + client_base +- perconaserverclient ++ mysqlclient + ) + + IF(WITH_JSON_BINLOG_LIBRARY) +@@ -291,20 +291,20 @@ TARGET_INCLUDE_DIRECTORIES(mysqlbinlog PRIVATE ${CMAKE_SOURCE_DIR}/sql) + MYSQL_ADD_EXECUTABLE(mysqladmin + mysqladmin.cc + multi_factor_passwordopt-vars.cc +- LINK_LIBRARIES perconaserverclient ++ LINK_LIBRARIES mysqlclient + ) + MYSQL_ADD_EXECUTABLE(mysqlslap + mysqlslap.cc + multi_factor_passwordopt-vars.cc +- LINK_LIBRARIES perconaserverclient ++ LINK_LIBRARIES mysqlclient + ) + MYSQL_ADD_EXECUTABLE(mysql_config_editor + mysql_config_editor.cc +- LINK_LIBRARIES perconaserverclient ++ LINK_LIBRARIES mysqlclient + ) + MYSQL_ADD_EXECUTABLE(mysql_secure_installation + mysql_secure_installation.cc +- LINK_LIBRARIES perconaserverclient ++ LINK_LIBRARIES mysqlclient + ) + MYSQL_ADD_EXECUTABLE(mysql_ssl_rsa_setup + logger.cc +--- client/migrate_keyring/CMakeLists.txt ++++ client/migrate_keyring/CMakeLists.txt +@@ -40,7 +40,7 @@ SET(MIGRATE_KEYRING_LIBRARIES + ${CMAKE_DL_LIBS} + minchassis + mysys +- perconaserverclient ++ mysqlclient + client_base + ${SSL_LIBRARIES} + ) +--- include/mysql.h 2022-09-13 10:19:20.000000000 +0300 ++++ include/mysql.h 2022-09-13 12:40:29.000000000 +0300 +@@ -28,7 +28,7 @@ + /** + @file include/mysql.h + This file defines the client API to MySQL and also the ABI of the +- dynamically linked libperconaserverclient. ++ dynamically linked libmysqlclient. + + The ABI should never be changed in a released product of MySQL, + thus you need to take great care when changing the file. In case +@@ -410,12 +410,12 @@ + + /* + mysql_server_init/end need to be called when using libmysqld or +- libperconaserverclient (exactly, mysql_server_init() is called by ++ libmysqlclient (exactly, mysql_server_init() is called by + mysql_init() so you don't need to call it explicitly; but you need to call + mysql_server_end() to free memory). The names are a bit misleading + (mysql_SERVER* to be used when using libmysqlCLIENT). So we add more general + names which suit well whether you're using libmysqld or +- libperconaserverclient. We intend to promote these aliases over the ++ libmysqlclient. We intend to promote these aliases over the + mysql_server* ones. + */ + #define mysql_library_init mysql_server_init +--- libmysql/CMakeLists.txt ++++ libmysql/CMakeLists.txt +@@ -283,15 +283,15 @@ + # authentication IAM client plug-in + ADD_SUBDIRECTORY(authentication_oci_client) + +-# Merge several convenience libraries into one big perconaserverclient +-MERGE_CONVENIENCE_LIBRARIES(perconaserverclient ${LIBS_TO_MERGE} ++# Merge several convenience libraries into one big mysqlclient ++MERGE_CONVENIENCE_LIBRARIES(mysqlclient ${LIBS_TO_MERGE} + COMPONENT Development + LINK_LIBRARIES ${LIBS_TO_LINK} + ) + + # Visual Studio users need debug static library for debug projects + IF(MSVC) +- INSTALL_DEBUG_TARGET(perconaserverclient DESTINATION ${INSTALL_LIBDIR}/debug) ++ INSTALL_DEBUG_TARGET(mysqlclient DESTINATION ${INSTALL_LIBDIR}/debug) + + INSTALL_DEBUG_TARGET(auth_win_client DESTINATION ${INSTALL_LIBDIR}/debug) + INSTALL_DEBUG_TARGET(clientlib DESTINATION ${INSTALL_LIBDIR}/debug) +@@ -326,13 +326,13 @@ + STRING_APPEND(OS_SHARED_LIB_VERSION + ".${SHARED_LIB_MINOR_VERSION}.${SHARED_LIB_PATCH_VERSION}") + ENDIF() +- # Name of shared library is libperconaserverclient on Unix +- SET(UNIX_OUTPUT_NAME OUTPUT_NAME perconaserverclient) ++ # Name of shared library is libmysqlclient on Unix ++ SET(UNIX_OUTPUT_NAME OUTPUT_NAME mysqlclient) + SET(UNIX_VERSION VERSION "${OS_SHARED_LIB_VERSION}") + SET(UNIX_SOVERSION SOVERSION "${SHARED_LIB_MAJOR_VERSION}") + ENDIF() + +-# Merge several convenience libraries into one big perconaserverclient ++# Merge several convenience libraries into one big mysqlclient + # and link them together into shared library. + MERGE_LIBRARIES_SHARED(libmysql ${LIBS_TO_MERGE} + EXPORTS +@@ -353,7 +353,7 @@ + + IF(LINUX_STANDALONE AND KERBEROS_CUSTOM_LIBRARY) + ADD_DEPENDENCIES(libmysql ${kerberos_target}) +- ADD_DEPENDENCIES(perconaserverclient ${kerberos_target}) ++ ADD_DEPENDENCIES(mysqlclient ${kerberos_target}) + ENDIF() + + IF(UNIX) +@@ -368,8 +368,8 @@ + ENDIF() + + # clean direct output needs to be set several targets have the same name +- #(perconaserverclient in this case) +- SET_TARGET_PROPERTIES(perconaserverclient PROPERTIES CLEAN_DIRECT_OUTPUT 1) ++ #(mysqlclient in this case) ++ SET_TARGET_PROPERTIES(mysqlclient PROPERTIES CLEAN_DIRECT_OUTPUT 1) + SET_TARGET_PROPERTIES(libmysql PROPERTIES CLEAN_DIRECT_OUTPUT 1) + ENDIF() + +--- libmysql/libmysql.ver.in ++++ libmysql/libmysql.ver.in +@@ -21,5 +21,5 @@ + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + + +-libperconaserverclient_@SHARED_LIB_MAJOR_VERSION@.0 ++libmysqlclient_@SHARED_LIB_MAJOR_VERSION@.0 + { global: ${CLIENT_API_FUNCTIONS};${CLIENT_API_FUNCTIONS_UNDOCUMENTED}; ${CLIENT_API_NONBLOCKING_FUNCTIONS}; local: *; }; +--- plugin/percona-pam-for-mysql/CMakeLists.txt ++++ plugin/percona-pam-for-mysql/CMakeLists.txt +@@ -36,7 +36,7 @@ IF(HAVE_PAM AND HAVE_GETPWNAM_R AND HAVE_GETGRGID_R AND HAVE_DLFCN_H) + MYSQL_ADD_PLUGIN(dialog + src/dialog.cc + ../../sql-common/get_password.cc +- LINK_LIBRARIES perconaserverclient ++ LINK_LIBRARIES mysqlclient + MODULE_ONLY) + + IF(UNIX) +--- plugin/x/tests/driver/CMakeLists.txt ++++ plugin/x/tests/driver/CMakeLists.txt +@@ -42,7 +42,7 @@ MYSQL_ADD_EXECUTABLE(mysqlxtest + LINK_LIBRARIES + mysys + strings +- perconaserverclient ++ mysqlclient + ${MYSQLX_CLIENT_FULL_LIB} + ${MYSQLX_PROTOCOL_FULL_LIB} + ${PROTOBUF_LIBRARY} +--- router/src/router/src/CMakeLists.txt ++++ router/src/router/src/CMakeLists.txt +@@ -71,7 +71,7 @@ TARGET_LINK_LIBRARIES(router_lib + ${CMAKE_DL_LIBS} + harness-library + harness_stdx +- perconaserverclient ++ mysqlclient + ${SSL_LIBRARIES} + io_component + ) +--- router/tests/fuzzers/CMakeLists.txt ++++ router/tests/fuzzers/CMakeLists.txt +@@ -34,7 +34,7 @@ IF(LIBFUZZER_COMPILE_FLAGS) + + LINK_LIBRARIES + harness-library +- perconaserverclient ++ mysqlclient + ${SSL_LIBRARIES} + + RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} +@@ -62,7 +62,7 @@ IF(LIBFUZZER_COMPILE_FLAGS) + + LINK_LIBRARIES + harness-library +- perconaserverclient ++ mysqlclient + ${SSL_LIBRARIES} + + RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} +--- scripts/CMakeLists.txt ++++ scripts/CMakeLists.txt +@@ -302,7 +302,7 @@ ELSE() + ENDIF() + + # Use cmake variables to inspect dependencies for +-# perconaserverclient library (add -l stuff) ++# mysqlclient library (add -l stuff) + SET(CLIENT_LIBS "") + SET(LIBS "") + +@@ -337,11 +337,11 @@ MACRO(EXTRACT_LINK_LIBRARIES target var) + STRING(REGEX REPLACE "[ ]+$" "" ${var} "${${var}}") + ENDMACRO() + +-EXTRACT_LINK_LIBRARIES(perconaserverclient CLIENT_LIBS) ++EXTRACT_LINK_LIBRARIES(mysqlclient CLIENT_LIBS) + + IF(MSVC) +- GET_TARGET_PROPERTY(LIBMYSQL_OS_SHLIB_VERSION perconaserverclient VERSION) +- GET_TARGET_PROPERTY(LIBMYSQL_OS_OUTPUT_NAME perconaserverclient OUTPUT_NAME) ++ GET_TARGET_PROPERTY(LIBMYSQL_OS_SHLIB_VERSION mysqlclient VERSION) ++ GET_TARGET_PROPERTY(LIBMYSQL_OS_OUTPUT_NAME mysqlclient OUTPUT_NAME) + ELSE() + GET_TARGET_PROPERTY(LIBMYSQL_OS_SHLIB_VERSION libmysql VERSION) + GET_TARGET_PROPERTY(LIBMYSQL_OS_OUTPUT_NAME libmysql OUTPUT_NAME) +--- storage/ndb/test/run-test/CMakeLists.txt ++++ storage/ndb/test/run-test/CMakeLists.txt +@@ -47,7 +47,7 @@ + test_execution_resources.cpp + DESTINATION mysql-test/ndb + ENABLE_EXPORTS +- LINK_LIBRARIES ndbNDBT ndbclient_static perconaserverclient ++ LINK_LIBRARIES ndbNDBT ndbclient_static mysqlclient + ) + + IF(MY_COMPILER_IS_CLANG) +--- storage/ndb/tools/CMakeLists.txt ++++ storage/ndb/tools/CMakeLists.txt +@@ -230,10 +230,10 @@ IF(NOT WIN32 AND NOT SOLARIS) + COMPONENT ClusterTools + ) + IF(NCURSES_HAS_STDSCR) +- TARGET_LINK_LIBRARIES(ndb_top perconaserverclient ${NCURSESW_LIB}) ++ TARGET_LINK_LIBRARIES(ndb_top mysqlclient ${NCURSESW_LIB}) + ELSE() + TARGET_LINK_LIBRARIES(ndb_top +- perconaserverclient ++ mysqlclient + ${NCURSESW_LIB} + ${NCURSES_TINFO_LIB}) + ENDIF() +--- testclients/CMakeLists.txt ++++ testclients/CMakeLists.txt +@@ -23,9 +23,9 @@ + ADD_WSHADOW_WARNING() + + MYSQL_ADD_EXECUTABLE(mysql_client_test mysql_client_test.cc COMPONENT Test) +-TARGET_LINK_LIBRARIES(mysql_client_test perconaserverclient) ++TARGET_LINK_LIBRARIES(mysql_client_test mysqlclient) + + IF(WITH_UNIT_TESTS) + MYSQL_ADD_EXECUTABLE(bug25714 bug25714.cc SKIP_INSTALL) +- TARGET_LINK_LIBRARIES(bug25714 perconaserverclient) ++ TARGET_LINK_LIBRARIES(bug25714 mysqlclient) + ENDIF() +--- unittest/gunit/group_replication/CMakeLists.txt ++++ unittest/gunit/group_replication/CMakeLists.txt +@@ -47,7 +47,7 @@ + gr_unit_test_resource + gunit_large + server_unittest_library +- perconaserverclient ++ mysqlclient + mysqlgcs + ) + ENDFOREACH() +--- unittest/gunit/xplugin/xcl/CMakeLists.txt ++++ unittest/gunit/xplugin/xcl/CMakeLists.txt +@@ -77,7 +77,7 @@ TARGET_LINK_LIBRARIES(${XCL_UNIT_TESTS} + ${MYSQLX_PROTOCOL_FULL_LIB} + ${PROTOBUF_LIBRARY} + ${LZ4_LIBRARY} +- perconaserverclient ++ mysqlclient + gtest + gmock + ) +--- unittest/gunit/xplugin/xpl/CMakeLists.txt ++++ unittest/gunit/xplugin/xpl/CMakeLists.txt +@@ -115,7 +115,7 @@ TARGET_LINK_LIBRARIES(${XPL_UNIT_TESTS} + ${GCOV_LDFLAGS} + ${MYSQLX_CLIENT_LIB} + mysqlx +- perconaserverclient ++ mysqlclient + gtest + gmock + ) +#--- storage/tokudb/PerconaFT/tools/CMakeLists.txt 2018-08-29 12:23:52.000000000 -0400 +#+++ storage/tokudb/PerconaFT/tools/CMakeLists.txt 2018-08-29 12:41:38.711986474 -0400 +#@@ -20,7 +20,7 @@ +# target_link_libraries(${tool} sql binlog rpl master slave) +# endif () +# else () +#- target_link_libraries(${tool} perconaserverclient) +#+ target_link_libraries(${tool} mysqlclient) +# endif () +# endif () + +--- libmysql/authentication_kerberos/CMakeLists.txt 2021-09-28 04:49:14.000000000 +0000 ++++ libmysql/authentication_kerberos/CMakeLists.txt 2021-09-28 09:24:09.917822028 +0000 +@@ -65,7 +65,7 @@ + LIST(APPEND UTILITY "sspi_utility.cc") + ENDIF() + +-SET(MY_SQL "perconaserverclient") ++SET(MY_SQL "mysqlclient") + + DISABLE_MISSING_PROFILE_WARNING() + +--- unittest/gunit/changestreams/CMakeLists.txt 2022-03-31 15:09:27.559009464 +0000 ++++ unittest/gunit/changestreams/CMakeLists.txt 2022-03-31 15:10:26.404854666 +0000 +@@ -36,7 +36,7 @@ + SET(TESTS_LINK_LIBRARIES + changestreams_standalone_static + binlogstandalone_static +- perconaserverclient ++ mysqlclient + gunit_small) + + IF (WITH_CS_PROTOBUF) + +--- router/src/router/tests/CMakeLists.txt 2022-07-26 08:37:14.834824576 +0000 ++++ router/src/router/tests/CMakeLists.txt 2022-07-26 08:38:26.484931770 +0000 +@@ -130,7 +130,7 @@ + ADD_HARNESS_TEST_FILE(test_mysql_session.cc + MODULE ${TEST_MODULE} + LIB_DEPENDS +- test-helpers perconaserverclient ++ test-helpers mysqlclient + EXTRA_SOURCES + ../src/common/mysql_session.cc + ../src/common/log_filter.cc +@@ -146,7 +146,7 @@ + ADD_HARNESS_TEST_FILE(test_metadata_check.cc + MODULE ${TEST_MODULE} + LIB_DEPENDS +- test-helpers perconaserverclient ++ test-helpers mysqlclient + EXTRA_SOURCES + ../src/common/mysql_session.cc + ../src/common/log_filter.cc +@@ -168,7 +168,7 @@ + ADD_HARNESS_TEST_FILE(test_cluster_metadata.cc + MODULE ${TEST_MODULE} + LIB_DEPENDS +- test-helpers perconaserverclient ++ test-helpers mysqlclient + EXTRA_SOURCES + ../src/common/mysql_session.cc + ../src/common/log_filter.cc +@@ -190,7 +190,7 @@ + ADD_HARNESS_TEST_FILE(test_windows_service.cc + MODULE ${TEST_MODULE} + LIB_DEPENDS +- test-helpers perconaserverclient ++ test-helpers mysqlclient + EXTRA_SOURCES + ../src/windows/main-windows.cc + ../src/windows/nt_servc.cc + diff --git a/mysql_config.sh b/mysql_config.sh new file mode 100644 index 0000000..05007f7 --- /dev/null +++ b/mysql_config.sh @@ -0,0 +1,36 @@ +#! /bin/bash +# +# Wrapper script for mysql_config to support multilib +# +# + +# This command respects setarch, works on OL6/RHEL6 and later +isa_bits=$(rpm --eval %__isa_bits) + +case $bits in + 32|64) bits=$isa_bits ;; + *) bits=unknown ;; +esac + +# Try mapping by uname if rpm command failed +if [ "$bits" = "unknown" ] ; then + arch=$(uname -m) + case $arch in + x86_64|ppc64) bits=64 ;; + i386|i486|i586|i686|pentium3|pentium4|athlon|ppc) bits=32 ;; + *) bits=unknown ;; + esac +fi + +if [ "$bits" == "unknown" ] ; then + echo "$0: error: failed to determine isa bits on your arch." + exit 1 +fi + +if [ -x /usr/bin/mysql_config-$bits ] ; then + /usr/bin/mysql_config-$bits "$@" +else + echo "$0: error: needed binary: /usr/bin/mysql_config-$bits is missing. Please check your MySQL installation." + exit 1 +fi + diff --git a/mysqld.cnf b/mysqld.cnf new file mode 100644 index 0000000..8b54db6 --- /dev/null +++ b/mysqld.cnf @@ -0,0 +1,36 @@ +# GreatSQL template configuration +# +# For advice on how to change settings please see +# http://dev.mysql.com/doc/refman/8.0/en/server-configuration-defaults.html + +[mysqld] +# +# Remove leading # and set to the amount of RAM for the most important data +# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%. +# innodb_buffer_pool_size = 128M +# +# Remove the leading "# " to disable binary logging +# Binary logging captures changes between backups and is enabled by +# default. It's default setting is log_bin=binlog +# disable_log_bin +# +# Remove leading # to set options mainly useful for reporting servers. +# The server defaults are faster for transactions and fast SELECTs. +# Adjust sizes as needed, experiment to find the optimal values. +# join_buffer_size = 128M +# sort_buffer_size = 2M +# read_rnd_buffer_size = 2M +# +# Remove leading # to revert to previous value for default_authentication_plugin, +# this will increase compatibility with older clients. For background, see: +# https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_default_authentication_plugin +# default-authentication-plugin=mysql_native_password + +# The default mysql directories are as follow +# datadir=/var/lib/mysql +# socket=/var/lib/mysql/mysql.sock +# log-error=/var/log/mysqld.log +# pid-file=/var/run/mysqld/mysqld.pid + +# Keep the same behavior like other MySQL based/series Databases(MariaDB, Percona, GreatSQL, MySQL5.7 and MySQL8.0) +!includedir /etc/my.cnf.d diff --git a/openEuler-25.03-GreatSQL测试报告.md b/openEuler-25.03-GreatSQL测试报告.md new file mode 100644 index 0000000..832f3e5 --- /dev/null +++ b/openEuler-25.03-GreatSQL测试报告.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)