GreatSQL 深度解析:金融级开源数据库全攻略
高可用 · 高性能 · 高兼容 · 高安全——MySQL 的理想开源替代方案
📅 2026-03-24 | 📦 版本 GreatSQL 8.4.4-4 | 🔖 开源 · GPLv2 | ⏱ 预计阅读 10 分钟
📋 目录
- GreatSQL 是什么
- 高可用(High Availability)
- 高性能(High Performance)
- 高兼容(High Compatibility)
- 高安全(High Security)
- GreatSQL vs MySQL 特性对比
- 安装部署
- my.cnf 配置详解(8.4.4-4)
- 总结
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
其他版本的安装包下载,点击如下链接进行下载
⚠️ 注意
安装后请立即修改 root 临时密码,并参考下方 my.cnf 配置示例完善配置文件,避免使用默认配置在生产环境上线。
安装步骤时序
- 准备操作系统 — 关闭 SELinux / 调整 ulimit / 挂载数据盘 / 安装 jemalloc
- 下载并安装 RPM 包 — 从官方 Gitee Releases 下载对应版本的 RPM 安装包
- 配置 my.cnf — 根据服务器规格调整关键参数(见下节)
- 初始化 & 启动 — systemctl start mysqld,获取临时密码并修改
- 配置 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
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)