腾讯 GreatSQL 全链路实战:从国产化选型到 MGR 集群部署

一、GreatSQL 是谁?为什么是信创首选?

1. 腾讯系国产 MySQL 分支的崛起

GreatSQL ​ 是由腾讯云主导维护、万里开源等厂商共同参与的一款开源 MySQL 分支数据库。它基于 MySQL 8.0 内核,在完全兼容原生 MySQL 协议与语法的前提下,针对金融级应用场景信创环境进行了深度优化。

在 2026 年的技术栈中,它已成为替代 Oracle MySQL、Percona Server 的首选国产化方案,尤其适合运行在银河麒麟、统信 UOS、OpenEuler 等国产操作系统上。

2. 核心优势:不只是"兼容",更是"超越"

特性维度 GreatSQL 增强点 解决痛点
高兼容性 100% 兼容 MySQL 5.7/8.0 协议,驱动无需修改 Java/Spring Boot 应用可零代码迁移
MGR 高可用 深度优化 Group Replication,支持地理标签、仲裁节点 解决原生 MGR 脑裂、流控抖动问题,适合多机房部署
高性能 并行查询引擎 (Turbo)、线程池、InnoDB 锁拆分 TPC-C 性能较 MySQL 提升约 30%,高并发更稳定
高安全 表空间国密加密、审计日志、数据脱敏 满足金融、政务等保三级要求
信创适配 官方支持 x86_64 及 ARM64(飞腾、鲲鹏)架构 完美运行于国产 CPU + 国产 OS 环境

二、环境准备与安装部署(CentOS/麒麟/统信实战)

1. 环境预检与依赖安装

GreatSQL 对硬件要求极低,1C2G ​ 即可运行测试环境。生产环境建议 8C16G​ 起步。

复制代码
# 1. 确认操作系统及架构(适配 x86_64 或 aarch64)
cat /etc/os-release && uname -m

# 2. 关闭 SELinux(生产环境可配置策略,但建议关闭以排除干扰)
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

# 3. 关闭防火墙或放行端口(3306, 33061-MGR)
systemctl stop firewalld && systemctl disable firewalld
# 若需开启防火墙:firewall-cmd --add-port=3306/tcp --permanent && firewall-cmd --reload

# 4. 安装基础依赖(CentOS/麒麟/UOS 通用)
yum install -y libaio-devel numactl-devel openssl-devel jemalloc jemalloc-devel

2. 下载策略:官方源与镜像选择

**推荐使用二进制包(Binary Tarball)**​ 部署,灵活性最高,适合绝大多数国产环境。

3. 配置文件详解(/etc/my.cnf

这是部署的核心环节。GreatSQL 的配置与 MySQL 8.0 高度一致,但针对 MGR 和性能做了预设。

复制代码
[mysqld]
# 基础目录配置
user = mysql
port = 3306
basedir = /usr/local/greatsql
datadir = /data/greatsql
socket = /data/greatsql/mysql.sock
pid-file = mysql.pid

# 字符集与网络
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
skip_name_resolve = ON
bind_address = 0.0.0.0

# 性能优化(2C4G 测试机配置)
innodb_buffer_pool_size = 1G
innodb_log_file_size = 256M
max_connections = 512
thread_cache_size = 100

# 二进制日志(MGR 必须开启)
server_id = 1
log_bin = binlog
binlog_format = ROW
gtid_mode = ON
enforce_gtid_consistency = ON

# GreatSQL MGR 插件加载
plugin_load_add = 'mysql_clone.so'
plugin_load_add = 'group_replication.so'
loose-group_replication_group_name = 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaa1'
loose-group_replication_local_address = '本机内网IP:33061'
loose-group_replication_group_seeds = '节点1IP:33061,节点2IP:33061,节点3IP:33061'
loose-group_replication_start_on_boot = OFF
loose-group_replication_bootstrap_group = OFF

# 安全配置
default_authentication_plugin = mysql_native_password

4. 初始化与启动

复制代码
# 1. 创建数据目录和用户
mkdir -p /data/greatsql
useradd -r -s /sbin/nologin mysql
chown -R mysql:mysql /data/greatsql /usr/local/greatsql

# 2. 设置环境变量
echo 'export PATH=/usr/local/greatsql/bin:$PATH' >> /etc/profile
source /etc/profile

# 3. 初始化数据库(注意:GreatSQL 8.0 默认使用 caching_sha2_password,建议指定为 native)
mysqld --defaults-file=/etc/my.cnf --initialize-insecure --user=mysql
# 生产环境建议使用 --initialize 生成随机密码(查看 error.log)

# 4. 启动服务
cp /usr/local/greatsql/support-files/mysql.server /etc/init.d/mysqld
systemctl enable mysqld
systemctl start mysqld

# 5. 首次登录(如果使用 -insecure 初始化,直接回车)
mysql -uroot -p

三、进阶实战:MGR 集群部署(高可用架构)

GreatSQL 的核心价值在于其增强的 MGR(组复制) ​ 能力。下面部署一个三节点单主模式集群。

1. 节点通用配置(Node1, Node2, Node3)

在三台服务器上重复上述安装步骤,确保:

  • server_id唯一(1, 2, 3)

  • loose-group_replication_local_address设置为当前节点的内网IP

  • loose-group_replication_group_seeds包含所有三个节点的 IP

2. 引导第一个节点(Primary)

Node1​ 上执行:

复制代码
-- 1. 创建复制用户
SET SQL_LOG_BIN=0;
CREATE USER 'repl'@'%' IDENTIFIED BY 'GreatSQL@123';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;
SET SQL_LOG_BIN=1;

-- 2. 配置 Group Replication 恢复通道
CHANGE MASTER TO MASTER_USER='repl', MASTER_PASSWORD='GreatSQL@123' FOR CHANNEL 'group_replication_recovery';

-- 3. 引导集群(注意:只在第一个节点执行一次)
SET GLOBAL group_replication_bootstrap_group=ON;
START GROUP_REPLICATION;
SET GLOBAL group_replication_bootstrap_group=OFF;

-- 4. 查看集群状态(应为 ONLINE)
SELECT * FROM performance_schema.replication_group_members;

3. 加入其他节点(Secondary)

Node2 ​ 和 Node3​ 上执行:

复制代码
-- 只需执行加入命令
CHANGE MASTER TO MASTER_USER='repl', MASTER_PASSWORD='GreatSQL@123' FOR CHANNEL 'group_replication_recovery';
START GROUP_REPLICATION;

验证集群:在任一节点插入数据,其他节点应即时可见。

复制代码
CREATE DATABASE greatsql_demo;
USE greatsql_demo;
CREATE TABLE t1 (id INT PRIMARY KEY, name VARCHAR(20));
INSERT INTO t1 VALUES (1, 'GreatSQL MGR Test');

4. GreatSQL MGR 增强特性应用

  • 仲裁节点(Arbitration Node) :如果你只有 2 台服务器,可以部署一个仲裁节点(不存储数据)来避免脑裂,实现高可用。

  • 地理标签(Geo Tags) :在多机房部署时,通过配置 group_replication_zone_id避免跨机房流量,提升性能。


四、Java 应用连接与使用详解

1. JDBC 连接配置

GreatSQL 完全兼容 MySQL Connector/J。你的 application.ymldatasource配置无需任何修改。

复制代码
# Spring Boot 配置示例
spring:
  datasource:
    url: jdbc:mysql://greatsql-node1:3306/greatsql_demo?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
    username: root
    password: your_password
    driver-class-name: com.mysql.cj.jdbc.Driver

关键点

  • 读写分离 :GreatSQL MGR 单主模式下,写操作应发往 Primary 节点,读操作可发往 Secondary。可使用 GreatSQL RouterShardingSphere实现自动路由。

  • 故障切换 :当 Primary 节点宕机,GreatSQL 会自动选举新 Primary,应用端需配置重试机制 或利用 JDBC 的 autoReconnect参数。

2. 数据迁移(从 MySQL 到 GreatSQL)

由于语法完全兼容,迁移过程极其简单:

  1. 逻辑备份 :使用 mysqldump从原 MySQL 导出。

  2. 修改脚本 :仅需检查存储引擎等极少语法(GreatSQL 推荐使用 InnoDB)。

  3. 导入:在 GreatSQL 中执行 SQL 文件。

    导出

    mysqldump -h old_mysql -u root -p --databases your_db > backup.sql

    导入

    mysql -h greatsql_node -u root -p < backup.sql


五、运维管理:备份、监控与升级

1. 备份策略(Clone Plugin + Binlog)

GreatSQL 支持 MySQL 8.0 的克隆插件,可实现物理级快速备份。

复制代码
-- 安装克隆插件
INSTALL PLUGIN clone SONAME 'mysql_clone.so';

-- 本地备份(需配置目录)
CLONE LOCAL DATA DIRECTORY = '/backup/greatsql_clone';

-- 远程备份到另一台服务器
CLONE INSTANCE FROM 'user'@'backup_host':3306 IDENTIFIED BY 'password';

2. 监控要点

  • MGR 状态监控 :定期查询 performance_schema.replication_group_members

  • 性能监控 :GreatSQL 提供了增强的 INFORMATION_SCHEMA视图,可监控并行查询性能。

3. 版本升级

GreatSQL 遵循 MySQL 8.0 的升级路径。建议采用滚动升级方式(适用于 MGR 集群):

  1. 逐台停止 Secondary 节点。

  2. 升级该节点 GreatSQL 软件包。

  3. 启动并加入集群。

  4. 最后升级 Primary 节点(需先切换主节点)。


六、总结:2026 年国产数据库选型建议

对于身处郑州、从事政务云或金融项目开发的你而言,GreatSQL 的选型价值在于:

  1. 信创合规 :它是目前极少数能同时完美适配 ARM 架构(鲲鹏/飞腾) ​ 和 **国产 OS(麒麟/UOS)**​ 的 MySQL 分支,且处于腾讯云的技术护城河之内。

  2. 零迁移成本:Java 应用无需改造,直接运行,极大降低了国产化替代的工期风险。

  3. 金融级能力:MGR 的增强使其具备了同城双活、异地多活的能力,这是很多国产数据库难以企及的成熟度。

最后提醒 :在正式上生产前,务必在你的国产化环境中(如 麒麟 v10 + 飞腾 CPU)进行压力测试,重点验证 MGR 网络分区(脑裂)处理能力。GreatSQL 的仲裁节点特性在资源受限的政务云环境中非常实用。

相关推荐
GreatSQL社区11 天前
参数配置不当导致GreatSQL异步复制IO线程中断
数据库·greatsql
GreatSQL社区10 个月前
用systemd管理GreatSQL服务详解
数据库·mysql·greatsql