GreatSQL 8.0.32-26 今日发布

GreatSQL 8.0.32-26 今日发布

版本信息

特性增强

GreatSQL 8.0.32-26 版本在 高可用高性能高兼容高安全 等多方面都有增强新特性,包括 Clone 增量备份、压缩备份,MGR 新加入成员节点时自动选择最新数据节点为 donor 节点,NUMA 亲和性优化,非阻塞式 DDL,无主键表导入优化,更多 Oracle 兼容用法,最后登录信息,基于规则的数据脱敏功能等多个新特性。

高可用

  • 当有新成员节点加入 MGR 时,如果选择 Clone 方式复制数据,支持自动选择从最新事务数据的成员节点复制数据,可有效提升 Clone 速度,提高 MGR 的服务可靠性。当新加入节点触发 Clone 方式复制数据时,也支持该特性。

    参数 group_replication_donor_threshold 用于定义选择 donor 节点时判断事务延迟阈值,取值范围 [1, MAX],默认值为 MAX。MAX 值取决于 CPU 类型,在 32-bit 系统中是 2147483647(2^31-1),而在 64-bit 系统中是 9223372036854775807(2^63-1)。

    当新成员节点加入 MGR 时,新成员节点只会选择那些延迟小于 group_replication_donor_threshold 的节点作为 donor 节点。

    假设 group_replication_donor_threshold = 100,那么:

  1. 现在 MGR 中有两个节点A、B,它们的 GTID 分别是 [1-300]、[1-280],新节点 C 加入,由于 A & B 节点的 GTID 差值小于预设阈值,则随机选择 A 或 B 其中一个节点作为 donor 节点。
  2. 现在 MGR 中有两个节点A、B,它们的 GTID 分别是 [1-400]、[1-280],新节点 C 加入,由于 A & B 节点的 GTID 差值大于预设阈值,则只会选择 A 作为 donor 节点。
  3. 现在 MGR 中有三个节点A、B、C,它们的 GTID 分别是 [1-400]、[1-350]、[1-280],新节点 D 加入,由于 C 节点的 GTID 差值大于预设阈值,A & B 节点 GTID 延迟小于预设阈值,则会随机选择 A 或 B 其中一个作为 donor 节点。
  • 在主从复制中,由从节点向主节点发起 Binlog 读取请求,如果读取太快或并发太多线程就会加大主节点的压力。新增参数 rpl_read_binlog_speed_limit 用于控制从节点上向主节点发起 Binlog 读取请求的限速,这对于控制主从复制中的网络带宽使用率、降低主节点压力、或在数据恢复过程中降低消耗资源非常有用。该参数可在从节点端设置生效。

  • 优化了在 快速单主模式 下 relay log 应用逻辑,提升 MGR 整体性能;并优化了当 relay log 存在堆积时的 applier 线程的内存消耗异常情况。

  • 优化了 asynchronous connection failover 中的故障检测效率,特别是发生网络故障时,备用集群能更快完成主从复制通道调整,降低主从复制链路断开的时间,提高整体可用性。以设置 MASTER_RETRY_COUNT = 2 为例(slave_net_timeoutMASTER_CONNECT_RETRY 默认值均为 60),在主从复制通道间发生网络故障时导致的复制中断持续约 3 分钟,优化后故障影响时长缩短到 10 – 20 秒以内。可以利用 asynchronous connection failover 实现两个 MGR 集群间的主从复制,实现跨机房间的高可用切换方案。

  • 地理标签 功能中包含两个参数 group_replication_zone_id(默认值为 0)和 group_replication_zone_id_sync_mode(默认值为ON)。在旧版本中,要求各个节点的 group_replication_zone_id_sync_mode 保持一致,否则无法加入 MGR。新版本中,允许仲裁节点设置不同的 group_replication_zone_id_sync_mode。例如,节点 A1、A2 设置 group_replication_zone_id = 0 & zone_id_sync_mode = ON;节点 B1、B2 设置 group_replication_zone_id = 1,它们也必须设置 zone_id_sync_mode = ON;仲裁投票节点C 设置 group_replication_zone_id = 2,但可以设置 group_replication_zone_id_sync_mode = OFF

  • 当启用 greatdb_ha Plugin 时,新增支持 IPv6。

更多信息详见文档:高可用 https://greatsql.cn/docs/8.0.32-26/5-enhance/5-2-ha.html

高性能

更多信息详见文档:高性能 https://greatsql.cn/docs/8.0.32-26/5-enhance/5-1-highperf.html

高兼容

更多信息详见文档:高兼容 https://greatsql.cn/docs/8.0.32-26/5-enhance/5-3-easyuse.html

高安全

更多信息详见文档:高安全 https://greatsql.cn/docs/8.0.32-26/5-enhance/5-4-security.html

其他

缺陷修复

  • 修复了在部分 ARM 架构环境中无法使用并行复制的问题,详见:MySQL Bug 110752 https://bugs.mysql.com/bug.php?id=110752
  • 修复了最后登录信息和审计日志入表时未处理 Binlog 可能导致主从异常的问题。在新版本中,最后登录信息和审计日志都不会记录 Binlog,避免因为主从复制(也包括 MGR)中各实例都开启该特性记录 Binlog 而造成主从复制失败(或 MGR 报错)。
  • 修复了数个因为 SQL 注入可能导致数据库实例发生 coredump 的问题,大幅提升 GreatSQL 对 SQL 注入风险的抵御能力。
  • 修复了 Oracle 模式下 NULL 值唯一约束问题。在原来的 Oracle 模式下,插入 NULL 值会触发唯一约束冲突;而在 Oracle 数据库中,是允许向唯一约束列中重复写入 NULL 值的。在新版本中修复了这个问题。
-- 在老版本中
greatsql> SET sql_mode = ORACLE;
greatsql> CREATE TABLE t1 (c1 INT UNIQUE);
greatsql> SHOW CREATE TABLE t1\G
*************************** 1. row ***************************
       Table: t1
Create Table: CREATE TABLE "t1" (
  "my_row_id" bigint unsigned NOT NULL AUTO_INCREMENT /*!80023 INVISIBLE */,
  "c1" int DEFAULT NULL,
  PRIMARY KEY ("my_row_id"),
  UNIQUE KEY "c1" ("c1") /* nulls are equal in unique index as oracle does */
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

greatsql> INSERT INTO t1 SELECT NULL;
Query OK, 1 row affected (0.01 sec)
Records: 1  Duplicates: 0  Warnings: 0

greatsql> INSERT INTO t1 SELECT NULL;
ERROR 1062 (23000): Duplicate entry 'NULL' for key 't1.c1'

在新版本中修复了这个唯一性约束问题:

-- 在新版本中
greatsql> SET sql_mode = ORACLE;
greatsql> CREATE TABLE t1 (c1 INT UNIQUE);
greatsql> SHOW CREATE TABLE t1\G
*************************** 1. row ***************************
       Table: t1
Create Table: CREATE TABLE "t1" (
  "my_row_id" bigint unsigned NOT NULL AUTO_INCREMENT /*!80023 INVISIBLE */,
  "c1" int DEFAULT NULL,
  PRIMARY KEY ("my_row_id"),
  UNIQUE KEY "c1" ("c1") /* nulls are equal in unique index as oracle does */
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

greatsql> INSERT INTO t1 SELECT NULL;
Query OK, 1 row affected (0.01 sec)
Records: 1  Duplicates: 0  Warnings: 0

-- 不再报告唯一性约束冲突
greatsql> INSERT INTO t1 SELECT NULL;
Query OK, 1 row affected (0.01 sec)
Records: 1  Duplicates: 0  Warnings: 0

注意事项

无。

升级/降级到 GreatSQL 8.0.32-26

升级到 GreatSQL 8.0.32-26

以下是升级到 GreatSQL 8.0.32-26 的几种不同场景说明。

  • 如果旧版本是 GreatSQL 8.0.32-25,并且没有使用 Rapid 引擎,则可以直接在原来的 datadir 基础上,修改 basedir 后,原地(in-place)启动 GreatSQL 8.0.32-26 后会完成自动升级。
  • 如果旧版本是 GreatSQL 8.0.32-25,并且已启用 Rapid 引擎,这种情况下暂时先不要升级,可以等到后续发布带新版本 Rapid 引擎的 GreatSQL 8.0.32-26 版本后再升级。
  • 如果旧版本是 GreatSQL 8.0.32-24、8.0.25-*、5.7.36-39 等系列版本,则可以直接在原来的 datadir 基础上,修改 basedir 后,原地(in-place)启动 GreatSQL 8.0.32-26 后会完成自动升级。
  • 如果是 MySQL 8.0.(<= 8.0.32 版本)、Percona Server 8.0.(<= 8.0.32 版本)等系列版本,则可以直接在原来的 datadir 基础上,修改 basedir 后,原地(in-place)启动 GreatSQL 8.0.32-26 后会完成自动升级。
  • 如果是 MySQL 8.0.(> 8.0.32 版本)、Percona Server 8.0.(> 8.0.32 版本)等系列版本,则需要利用逻辑备份方式导出数据,再导入的方式完成升级,不支持原地(in-place)升级到 GreatSQL 8.0.32-26。
  • 如果是 MySQL 5.7.(>= 5.7.23 版本)、Percona Server 5.7.(<= 5.7.23 版本)等系列版本,则可以直接在原来的 datadir 基础上,修改 basedir 后,原地(in-place)启动 GreatSQL 8.0.32-26 后会完成自动升级。

在以上几个原地升级场景中,务必保证 GreatSQL 中参数 upgrade 不能设置为 NONE,可以设置为默认的 AUTOFORCE。例如:

[mysqld]
upgrade = AUTO

更多迁移升级方案请参考:迁移升级

降级到 GreatSQL 8.0.32-26

如果是要从 MySQL/Percona 8.0.32 之后的版本降级到 GreatSQL 8.0.32-26 版本,则需要采取逻辑备份 + 逻辑导入方式完成降级操作,并且在逻辑备份导入完成后的首次重启时,务必设置 upgrade = FORCE 强制升级所有数据表,包括系统表。

降级过程操作大致如下所示:

  1. 在高版本中逻辑备份全量数据
$ mysqldump -S/data/MySQL/mysql.sock -A --triggers --routines --events --single-transaction > /data/backup/fulldump.sql
  1. 在GreatSQL 8.0.32-26版本环境中导入逻辑备份文件,完成逻辑恢复
$ mysql -S/data/GreatSQL/mysql.sock -f < /data/backup/fulldump.sql
  1. 修改my.cnf,确保 upgrade = FORCE 设置
$ vim /etc/my.cnf
...
[mysqld]
...
upgrade = FORCE
...
  1. 重启GreatSQL,降级完成
$ systemctl restart greatsql

重启过程中,可以看到日志有类似下面的强制升级过程

$ tail -f /data/GreatSQL/error.log
...
[Note] [MY-013387] [Server] Upgrading system table data.
[Note] [MY-013385] [Server] Upgrading the sys schema.
[Note] [MY-013400] [Server] Upgrade of help tables started.
[Note] [MY-013400] [Server] Upgrade of help tables completed.
[Note] [MY-013394] [Server] Checking 'mysql' schema.
[Note] [MY-013394] [Server] Checking 'sys' schema.
[System] [MY-013381] [Server] Server upgrade from '80032' to '80032' completed.
...

如果不设置 upgrade = FORCE 强制升级所有表,有可能发生系统表 mysql.procs_priv 损坏错误,在创建用户时可能会报告类似下面的错误:

greatsql> create user tpch identified by 'tpch';
ERROR 1728 (HY000): Cannot load from mysql.procs_priv. The table is probably corrupted

GreatSQL VS MySQL

1.主要特性 GreatSQL 8.0.32-26 MySQL 8.0.32
开源
ACID 完整性
MVCC 特性
支持行锁
Crash 自动修复
表分区(Partitioning)
视图(Views)
子查询(Subqueries)
触发器(Triggers)
存储程序(Stored Programs)
外键(Foreign Keys)
窗口函数(Window Functions)
通用表表达式 CTE
地理信息(GIS)
基于 GTID 的复制
组复制(MGR)
MyRocks 引擎
支持龙芯架构
2. 性能提升扩展 GreatSQL 8.0.32-26 MySQL 8.0.32
AP 引擎 仅云上HeatWave
NUMA 亲和性优化
非阻塞式 DDL
无主键表导入优化
InnoDB 并行查询 仅主键扫描
并行 LOAD DATA
InnoDB 事务 ReadView 无锁优化
InnoDB 事务大锁拆分优化
InnoDB 资源组
自定义 InnoDB 页大小
Contention-Aware Transaction Scheduling
InnoDB Mutexes 拆分优化
MEMORY 引擎优化
InnoDB Flushing 优化
并行 Doublewrite Buffer
InnoDB 快速索引创建优化
VARCHAR/BLOB/JSON 类型存储单列压缩
数据字典中存储单列压缩信息
3. 面向开发者提升改进 GreatSQL 8.0.32-26 MySQL 8.0.32
X API
JSON
NoSQL Socket-Level接口
InnoDB 全文搜索改进
更多 Hash/Digest 函数
Oracle 兼容-数据类型
Oracle 兼容-函数
Oracle 兼容-SQL语法
Oracle 兼容-存储程序
4. 基础特性提升改进 GreatSQL 8.0.32-26 MySQL 8.0.32
MGR 提升-地理标签
MGR 提升-仲裁节点
MGR 提升-读写节点绑定VIP
MGR 提升-快速单主模式
MGR 提升-智能选主机制
MGR 提升-全新流控算法
MGR 提升-网络分区异常处理
MGR 提升-节点异常退出处理
MGR 提升-节点磁盘满处理
MGR 提升-自动选择 donor 节点
Clone 增量备份
Clone 备份压缩
Binlog 读取限速
information_schema 表数量 95 65
全局性能和状态指标 853 434
优化器直方图(Histograms)
Per-Table 性能指标
Per-Index 性能指标
Per-User 性能指标
Per-Client 性能指标
Per-Thread 性能指标
全局查询相应耗时统计
SHOW INNODB ENGINE STATUS 增强
回滚段信息增强
临时表信息增强
用户统计信息增强
Slow log 信息增强
5.安全性提升 GreatSQL 8.0.32-26 MySQL 8.0.32
国密支持
备份加密
审计 仅企业版
数据脱敏
最后登录记录
SQL Roles
SHA-2 密码Hashing
密码轮换策略
PAM 认证插件 仅企业版
Keyring 存储在文件中
Keyring 存储在Hashicorp Vault中 仅企业版
InnoDB 数据加密
InnoDB 日志加密
InnoDB 各种表空间文件加密
二进制日志加密
临时文件加密
强制加密
6. 运维便利性提升 GreatSQL 8.0.32-26 MySQL 8.0.32
DDL 原子性
数据字典存储 InnoDB 表
快速 DDL
SET PERSIST
不可见索引
线程池(Threadpool) 仅企业版
备份锁
SHOW GRANTS 扩展
表损坏动作扩展
杀掉不活跃事务
START TRANSACTION WITH CONSISTENT SNAPSHOT 扩展

GreatSQL 8.0.32-26 基于 Percona Server for MySQL 8.0.32 版本,它在 MySQL 8.0.32 基础上做了大量的改进和提升以及众多新特性,详情请见:Percona Server for MySQL feature comparison https://docs.percona.com/percona-server/8.0/feature-comparison.html,这其中包括线程池、审计、数据脱敏等 MySQL 企业版才有的特性,以及 performance_schema 提升、information_schema 提升、性能和可扩展性提升、用户统计增强、PROCESSLIST 增强、Slow Log 增强等大量改进和提升,这里不一一重复列出。

GreatSQL Release Notes

GreatSQL 8.0

GreatSQL 5.7


Enjoy GreatSQL

关于 GreatSQL

GreatSQL是适用于金融级应用的国内自主开源数据库,具备高性能、高可靠、高易用性、高安全等多个核心特性,可以作为MySQL或Percona Server的可选替换,用于线上生产环境,且完全免费并兼容MySQL或Percona Server。

相关链接: GreatSQL社区 Gitee GitHub Bilibili

GreatSQL社区:

社区博客有奖征稿详情:https://greatsql.cn/thread-100-1-1.html

技术交流群:

微信:扫码添加GreatSQL社区助手微信好友,发送验证信息加群

玄机博客
© 版权声明
THE END
喜欢就支持一下吧
点赞10 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片快捷回复

    暂无评论内容