高可用 · 高性能 · 高兼容 · 高安全——MySQL 的理想开源替代方案

📅 2026-03-24 | 📦 版本 GreatSQL 8.4.4-4 | 🔖 开源 · GPLv2 | ⏱ 预计阅读 10 分钟


📋 目录

  1. GreatSQL 是什么
  2. 高可用(High Availability)
  3. 高性能(High Performance)
  4. 高兼容(High Compatibility)
  5. 高安全(High Security)
  6. GreatSQL vs MySQL 特性对比
  7. 安装部署
  8. my.cnf 配置详解(8.4.4-4)
  9. 总结

1. GreatSQL 是什么

GreatSQL 是一款由国内团队主导开发的开源免费数据库(GPLv2 协议),基于 MySQL/Percona Server for MySQL 演进而来,专注于在普通商用硬件上满足金融级应用场景需求。它可以作为 MySQL 或 Percona Server for MySQL 的即插即用替代品,做到二进制层面 100% 兼容。

核心优势

特性 说明
🏦 金融级可靠 ACID 完整性 + MGR 强一致,满足核心交易场景
🔓 完全开源 GPLv2 协议,零授权费用,社区持续演进
🔄 零成本迁移 与 MySQL 8.4 完全兼容,替换无需改代码
📈 性能飞跃 OLTP +20%,OLAP 提升数个数量级

标签MySQL 兼容 | 开源免费 | 金融级 | 高可用 MGR | Oracle 语法 | 国密支持


2. 高可用(High Availability)

GreatSQL 对 MySQL Group Replication(MGR)和主从复制进行了大量深度优化,显著提升了稳定性、切换速度和数据可靠性,是目前开源生态中 MGR 功能最为完善的发行版。

MGR 高可用增强特性

特性 说明
地理标签(Geo Tag) 支持多机房架构,感知节点所在机房,优化跨地域容灾策略
仲裁节点(Arbitrator) 用轻量级仲裁节点替代完整数据节点,降低高可用架构的服务器成本
读写动态 VIP 主从切换时 VIP 自动漂移,业务无感知;读 VIP 支持跨节点负载均衡
快速单主模式(Fast Single Primary) 单主模式下大幅提升写入吞吐,降低事务延迟
智能选主(GTID_FIRST 策略) 主库故障时优先选取事务最新的节点,避免数据回退
流控算法优化 重写 MGR 流控逻辑,事务吞吐更平稳,消除周期性抖动
大事务传输压缩 MGR 大事务在传输时自动压缩,降低网络带宽消耗
主主双向复制防回路 跨机房容灾场景下,防止 Binlog 在主主架构中无限循环
磁盘满处理优化 节点磁盘空间耗尽时,仅隔离该节点,不影响整个 MGR 集群
事务认证队列清理优化 解决高负载下每 60 秒触发一次的性能抖动问题
Binlog 读取限速 从节点向主节点请求 Binlog 时支持速率限制,保护主库 I/O
Recovery 机制优化 加速节点重新加入集群的过程,减少长时间等待

💡 最佳实践
生产环境推荐 3 节点 MGR 架构(1 主 + 1 从 + 1 仲裁节点),配合 greatdb_ha 插件实现 VIP 自动漂移,可做到 RTO < 30s、RPO = 0 的强一致高可用。


3. 高性能(High Performance)

GreatSQL 在 OLTP 和 OLAP 两个维度均有显著性能提升,引入了两款全新引擎,同时对 InnoDB 核心进行了深度改造。

性能提升概览

场景 提升幅度
TPC-C(OLTP 综合) 较 MySQL 8.4 提升 ~30%
并行 LOAD DATA 较原生提升 ~20x
TPC-H(OLAP 分析) Rapid 引擎提升数十至上百倍
InnoDB OLTP 整体 大锁拆分优化 +20%

两大新引擎

引擎 特点
🚀 Rapid 引擎 大规模并行 · 内存查询 · 高压缩比专为 HTAP/OLAP 场景设计,数据分析性能提升数个数量级
🌪️ Turbo 引擎 多线程并发 · 向量化执行实时高性能并行查询,适用于复杂 SQL 加速

其他性能增强

  • InnoDB 大锁拆分 & 无锁化 — 多种锁优化方案,OLTP 场景整体性能提升约 20%
  • 并行 LOAD DATA — 支持多线程并行导入,性能提升约 20 倍;对无显式主键场景也有专项优化
  • 线程池(Thread Pool) — 降低线程创建销毁开销,高并发场景下性能更稳定
  • 非阻塞式 DDL — DDL 操作期间不阻塞业务请求,避免雪崩效应
  • 异步删除大表 — 后台异步回收大表空间,消除 DROP TABLE 引发的 I/O 毛刺
  • NUMA 亲和性优化 — 将前端用户线程与后台线程绑定到固定 NUMA 节点,提升缓存命中率

4. 高兼容(High Compatibility)

GreatSQL 100% 兼容 MySQL 及 Percona Server for MySQL 的所有语法和行为,同时扩展支持大量常用 Oracle 语法,为存量 Oracle 应用迁移提供便利通道。

兼容项 说明
数据类型兼容 支持 Oracle 风格的数据类型声明方式
函数兼容 内置 Oracle 常用内置函数别名及扩展
SQL 语法兼容 支持 CONNECT BY、ROWNUM 等 Oracle 特有语法
存储程序兼容 PL/SQL 风格的存储过程、包、游标等

ℹ️ 迁移场景

  • 从 MySQL 迁移:无需任何改动,直接替换二进制即可。
  • 从 Oracle 迁移:支持大多数常见 Oracle 语法,可显著降低改造工作量。

5. 高安全(High Security)

GreatSQL 内置多项企业级安全特性,满足金融、政务等对数据安全有严格要求的行业规范。

安全特性 说明
逻辑备份加密 mysqldump 导出文件支持加密,防止备份文件泄露
Clone 物理备份加密 Clone 插件产生的物理备份文件全程加密存储
审计日志 记录所有数据库访问和操作行为,便于安全审查与合规
InnoDB 表空间国密加密(SM4) 采用国家标准密码算法 SM4 对 InnoDB 表空间进行透明加密
数据脱敏 支持基于函数和策略两种脱敏方式,保护查询结果中的敏感字段

6. GreatSQL vs MySQL 特性对比

以下对比基于 GreatSQL 8.4.4-4 与 MySQL 8.4.4 社区版。

特性 GreatSQL 8.4.4-4 MySQL 8.4.4 CE
开源免费 ✓ 完全开源 部分功能收费
MGR 高可用增强 ✓ 深度优化 基础功能
地理标签 / 仲裁节点 ✓ 支持 ✗ 不支持
Rapid OLAP 引擎 ✓ 支持 ✗ 不支持
Turbo 向量化引擎 ✓ 支持 ✗ 不支持
并行 LOAD DATA(~20x) ✓ 支持 ✗ 不支持
非阻塞式 DDL ✓ 支持 ✗ 不支持
Oracle 语法兼容 ✓ 大部分支持 ✗ 不支持
国密 SM4 加密 ✓ 支持 ✗ 不支持
数据脱敏 ✓ 支持 ✗ 不支持
审计日志 ✓ 支持 企业版才有
线程池 ✓ 支持 企业版才有

7. 安装部署

推荐:安装 jemalloc(x86_64)

jemalloc 能有效减少内存碎片,提升高并发场景下的内存分配效率。

# 安装 EPEL 源
yum install -y epel-release

# 安装 jemalloc
yum -y install jemalloc jemalloc-devel

RPM 包安装(CentOS 8 / RHEL 8)

# 下载 RPM 包后一次性安装所有组件
rpm -ivh --nodeps \
  greatsql-client-8.4.4-4.1.el8.x86_64.rpm \
  greatsql-devel-8.4.4-4.1.el8.x86_64.rpm \
  greatsql-icu-data-files-8.4.4-4.1.el8.x86_64.rpm \
  greatsql-server-8.4.4-4.1.el8.x86_64.rpm \
  greatsql-shared-8.4.4-4.1.el8.x86_64.rpm

# 启动服务
systemctl enable --now mysqld

# 查看运行状态
systemctl status mysqld

其他版本的安装包下载,点击如下链接进行下载

https://gitee.com/GreatSQL/GreatSQL/releases/tag/GreatSQL-8.4.4-4https://gitee.com/GreatSQL/GreatSQL/releases/tag/GreatSQL-8.4.4-4

⚠️ 注意
安装后请立即修改 root 临时密码,并参考下方 my.cnf 配置示例完善配置文件,避免使用默认配置在生产环境上线。

安装步骤时序

  1. 准备操作系统 — 关闭 SELinux / 调整 ulimit / 挂载数据盘 / 安装 jemalloc
  2. 下载并安装 RPM 包 — 从官方 Gitee Releases 下载对应版本的 RPM 安装包
  3. 配置 my.cnf — 根据服务器规格调整关键参数(见下节)
  4. 初始化 & 启动 — systemctl start mysqld,获取临时密码并修改
  5. 配置 MGR(可选) — 启用 group_replication 插件,搭建高可用集群

8. my.cnf 配置详解(8.4.4-4)

以下配置基于官方示例(假设服务器为 128C256G,RPM 包安装),已按功能模块拆解并加注释说明。实际使用时请根据服务器硬件规格按比例调整。

🖥️ [client] — 客户端基础配置

参数 说明
socket /data/GreatSQL/mysql.sock Unix Socket 文件路径

💻 [mysql] — 命令行客户端配置

参数 说明
loose-skip-binary-as-hex (无值,开关项) 二进制数据不以 HEX 显示,更易阅读
prompt "(\D)[\u@GreatSQL][\d]>" 自定义命令行提示符,显示时间/用户/库名
no-auto-rehash (无值,开关项) 禁用自动补全,加速连接速度

🔧 [mysqld] — 服务基础配置

参数 说明
user mysql
port 3306
server_id 3306 集群中每个节点必须唯一
basedir /usr/
datadir /data/GreatSQL
character-set-server UTF8MB4
skip_name_resolve ON 关闭 DNS 反解,提升连接速度
default_time_zone "+8:00"
mysql_native_password ON 兼容旧版客户端认证插件

⚡ Performance — 性能参数

参数 说明
max_connections 1024 最大连接数
table_open_cache 4096
sort_buffer_size 4M
join_buffer_size 4M
read_buffer_size 8M
bulk_insert_buffer_size 64M
thread_cache_size 768
tmp_table_size 96M
max_allowed_packet 64M
sql_generate_invisible_primary_key ON 无主键表自动生成隐式主键
loose-lock_ddl_polling_mode ON 非阻塞式 DDL 轮询模式

📋 Logs — 日志配置

参数 说明
log_error_verbosity 3 错误日志详细级别
slow_query_log ON 开启慢查询日志
long_query_time 0.01 慢查询阈值(秒),0.01 = 10ms
log_queries_not_using_indexes ON 记录未使用索引的查询
log_slow_verbosity FULL
binlog_format ROW
sync_binlog 1 每次事务提交都刷盘,最安全
max_binlog_size 1G
binlog_space_limit 500G Binlog 总占用空间上限
binlog_expire_logs_seconds 604800 604800 = 7 天
gtid_mode ON
enforce_gtid_consistency ON

🔄 Replication — 复制配置

参数 说明
relay_log_recovery ON 重启后自动从主库重新获取 Relay Log
replica_parallel_type LOGICAL_CLOCK
replica_parallel_workers 16 从库并行回放线程数
replica_preserve_commit_order ON 保证从库提交顺序与主库一致
loose-gdb_parallel_load ON 并行 LOAD DATA 开关

🗄️ InnoDB — 存储引擎配置

参数 说明
innodb_buffer_pool_size 96G 专用数据库服务器建议设为物理内存 50-70%
innodb_buffer_pool_instances 8
innodb_flush_log_at_trx_commit 1 1 = 每次提交刷盘,最安全
innodb_redo_log_capacity 4G
innodb_io_capacity 10000 后台 I/O 能力,根据磁盘性能调整
innodb_io_capacity_max 20000
innodb_flush_method O_DIRECT
innodb_use_fdatasync ON
innodb_lock_wait_timeout 10
innodb_rollback_on_timeout ON 锁超时时回滚整个事务而非仅最后一条语句
innodb_print_all_deadlocks ON 记录所有死锁信息到错误日志
innodb_adaptive_hash_index OFF 高并发下关闭以减少锁竞争
kill_idle_transaction 300 杀死空闲超过 300s 的事务,防止长事务积压
innodb_data_file_async_purge ON 异步清理数据文件,提升稳定性

💡 配置调优建议

  • innodb_buffer_pool_size 设为可用内存的 50%~70%
  • innodb_io_capacity / innodb_io_capacity_max 根据磁盘实测 IOPS 设置
  • replica_parallel_workers 建议不超过 CPU 核数的 1/4
  • MGR 相关配置默认注释,按需开启
  • Rapid / Turbo 引擎默认注释,按需加载

完整配置文件(原文)

#
# my.cnf example for GreatSQL 8.4.4-4
#
# 下面参数选项设置仅作为参考,假定服务器配置为128C256G
# 假定以RPM包方式安装GreatSQL
#
[client]
socket=/data/GreatSQL/mysql.sock

[mysql]
loose-skip-binary-as-hex
prompt="(\\D)[\\u@GreatSQL][\\d]>"
no-auto-rehash

[mysqld]
user=mysql
port=3306
server_id=3306
basedir=/usr/
datadir=/data/GreatSQL
socket=/data/GreatSQL/mysql.sock
pid-file=mysql.pid
character-set-server=UTF8MB4
skip_name_resolve=ON
default_time_zone="+8:00"
bind_address="0.0.0.0"
secure_file_priv=/data/GreatSQL
mysql_native_password=ON

# Performance
lock_wait_timeout=3600
open_files_limit=65535
back_log=1024
max_connections=1024
max_connect_errors=1000000
table_open_cache=4096
table_definition_cache=2048
sort_buffer_size=4M
join_buffer_size=4M
read_buffer_size=8M
read_rnd_buffer_size=4M
bulk_insert_buffer_size=64M
thread_cache_size=768
interactive_timeout=600
wait_timeout=600
tmp_table_size=96M
max_heap_table_size=96M
max_allowed_packet=64M
net_buffer_shrink_interval=180
sql_generate_invisible_primary_key=ON
loose-lock_ddl_polling_mode=ON
loose-lock_ddl_polling_runtime=200

# Logs
log_timestamps=SYSTEM
log_error=error.log
log_error_verbosity=3
slow_query_log=ON
log_slow_extra=ON
slow_query_log_file=slow.log
long_query_time=0.01
log_queries_not_using_indexes=ON
log_throttle_queries_not_using_indexes=60
min_examined_row_limit=100
log_slow_admin_statements=ON
log_slow_replica_statements=ON
log_slow_verbosity=FULL
log_bin=binlog
binlog_format=ROW
sync_binlog=1
binlog_cache_size=4M
max_binlog_cache_size=6G
max_binlog_size=1G
binlog_space_limit=500G
binlog_rows_query_log_events=ON
binlog_expire_logs_seconds=604800
binlog_checksum=CRC32
binlog_order_commits=OFF
gtid_mode=ON
enforce_gtid_consistency=ON

# Replication
relay-log=relaylog
relay_log_recovery=ON
replica_parallel_type=LOGICAL_CLOCK
replica_parallel_workers=16
replica_preserve_commit_order=ON
replica_checkpoint_period=2
loose-rpl_read_binlog_speed_limit=0

# Parallel LOAD DATA
loose-gdb_parallel_load=ON
loose-innodb_optimize_no_pk_parallel_load=ON

# Rapid
#loose-plugin_load_add='ha_rapid.so'
#loose-rapid_memory_limit=64G
#loose-rapid_worker_threads=32
#loose-secondary_engine_parallel_load_workers=16

# Turbo
#loose-plugin_load_add='turbo.so'
#loose-turbo_memory_limit= 64G
#loose-turbo_worker_threads=32

# Clone
#loose-plugin_load_add='mysql_clone.so'

# MGR
#loose-plugin_load_add='group_replication.so'
#loose-group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaa1"
#loose-group_replication_view_change_uuid="bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbb1"
#loose-group_replication_local_address="172.16.16.10:33061"
#loose-group_replication_group_seeds='172.16.16.10:33061,172.16.16.12:33061,172.16.16.12:33061'
#loose-group_replication_ip_allowlist='172.160.16.0/8,192.168.0.0/24,::1/128'
#loose-group_replication_communication_stack="XCOM"
#loose-group_replication_recovery_use_ssl=OFF
#loose-group_replication_ssl_mode=DISABLED
#loose-group_replication_start_on_boot=OFF
#loose-group_replication_bootstrap_group=OFF
#loose-group_replication_exit_state_action=READ_ONLY
#loose-group_replication_flow_control_mode="DISABLED"
#loose-group_replication_single_primary_mode=ON
#loose-group_replication_enforce_update_everywhere_checks=OFF
#loose-group_replication_majority_after_mode=ON
#loose-group_replication_communication_max_message_size=10M
#loose-group_replication_arbitrator=OFF
#loose-group_replication_single_primary_fast_mode=1
#loose-group_replication_request_time_threshold=100
#loose-group_replication_primary_election_mode=GTID_FIRST
#loose-group_replication_unreachable_majority_timeout=0
#loose-group_replication_member_expel_timeout=5
#loose-group_replication_autorejoin_tries=288
#loose-group_replication_recovery_get_public_key=ON
#loose-group_replication_donor_threshold=100

# greatdb_ha
#loose-plugin_load_add='greatdb_ha.so'
#loose-greatdb_ha_enable_mgr_vip=OFF
#loose-greatdb_ha_mgr_vip_nic='eth0'
#loose-greatdb_ha_mgr_vip_ip='172.16.16.252'
#loose-greatdb_ha_mgr_vip_mask='255.255.255.0'
#loose-greatdb_ha_port=33062
#loose-greatdb_ha_mgr_read_vip_ips="172.16.16.251,172.16.16.252"
#loose-greatdb_ha_mgr_read_vip_floating_type="TO_ANOTHER_SECONDARY"
#loose-greatdb_ha_send_arp_packge_times=5
#loose-greatdb_ha_mgr_exit_primary_kill_connection_mode=OFF
#report_host=172.16.16.10
#report_port=3306

# InnoDB
innodb_buffer_pool_size=96G #如果是专用的数据库服务器,则可以设置为物理内存的50%-70%,视实际情况而定
innodb_buffer_pool_instances=8
innodb_data_file_path=ibdata1:12M:autoextend
innodb_flush_log_at_trx_commit=1
innodb_log_buffer_size=64M
innodb_redo_log_capacity=4G
innodb_doublewrite_files=64
innodb_doublewrite_pages=128
innodb_max_undo_log_size=4G
innodb_io_capacity=10000
innodb_io_capacity_max=20000
innodb_open_files=65534
innodb_flush_method=O_DIRECT
innodb_use_fdatasync=ON
innodb_lru_scan_depth=9000
innodb_lock_wait_timeout=10
innodb_rollback_on_timeout=ON
innodb_print_all_deadlocks=ON
innodb_online_alter_log_max_size=4G
innodb_print_ddl_logs=OFF
innodb_status_file=ON
innodb_status_output=OFF
innodb_status_output_locks=ON
innodb_sort_buffer_size=64M
innodb_adaptive_hash_index=OFF
innodb_numa_interleave=OFF
innodb_spin_wait_delay=20
innodb_print_lock_wait_timeout_info=OFF
innodb_change_buffering=none
kill_idle_transaction=300
innodb_data_file_async_purge=ON

9. 总结

GreatSQL 是国内开源数据库生态中的一颗明珠。它在 MySQL 坚实基础之上,打磨出真正面向生产、面向金融级场景的能力:

价值 说明
高可用不再是痛点 MGR 深度优化 + greatdb_ha VIP 自动漂移,搭建企业级高可用集群门槛大幅降低
HTAP 一体化 Rapid + Turbo 双引擎,让同一套数据库同时支撑交易和分析,无需额外维护 OLAP 系统
Oracle 迁移利器 广泛的 Oracle 语法兼容,让存量 Oracle 应用向开源迁移有了可行路径
安全合规开箱即用 国密 SM4、审计、脱敏、备份加密,满足金融、政务等行业的合规要求
零迁移成本 100% 兼容 MySQL,现有应用无需任何改动即可替换

🔗 相关链接


整理说明:本文整理自 GreatSQL 官方 Gitee 仓库 及 GreatSQL-Doc 文档库
GreatSQL 采用 GPLv2 开源协议 · 版本 8.4.4-4 · 整理日期 2026-03-24

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐