GreatSQL Clone在线备份恢复:热备+增量+压缩全攻略
【免费下载链接】GreatSQLGreatSQL是一款开源免费数据库,可在普通硬件上满足金融级应用场景,具有高可用、高性能、高兼容、高安全等特性,可作为MySQL或Percona Server for MySQL的理想可选替换。项目地址: https://gitcode.com/GreatSQL/GreatSQL
作为一款开源免费数据库,GreatSQL 的Clone 在线备份恢复能力堪称 DBA 的"救场神器":无需停服即可完成全量热备,支持基于页面跟踪的增量备份,还能在传输与落盘两个层面压缩数据,把备份对生产环境的影响降到最低。无论你是要把 GreatSQL 快速拉起一个从库,还是构建一套"热备+增量+压缩"的完整备份恢复方案,Clone 插件都能用几条 SQL 搞定。
一、什么是 GreatSQL Clone 在线备份恢复
Clone 是 GreatSQL 内置的备份恢复插件,核心原理是"在本地或远程实例之间,复制一份物理数据快照"。它的最大价值在于在线——克隆过程中源实例(Donor)可以持续对外提供服务,业务零感知,彻底告别传统mysqldump逻辑备份耗时长、锁表严重的痛点。
它的三大招牌能力正是你需要的:
| 能力 | 说明 | 典型场景 |
|---|---|---|
| 🖥️ 热备份 | 在线全量克隆,不锁业务 | 日常全量备份、快速扩容只读实例 |
| ➕ 增量备份 | PAGE TRACK页面跟踪,只拷贝变化数据 | 周期性增量备份,节省时间与空间 |
| 📦 压缩备份 | 网络层 + 文件层双重压缩 | 跨机房传输、长期归档,大幅降低带宽与磁盘成本 |
Clone 插件的实现代码全部开源,核心逻辑在 plugin/clone/ 目录,数据压缩相关实现在 sql/clone_compress.cc,参数定义见 plugin/clone/src/clone_plugin.cc。
二、一键安装 Clone 插件
克隆前先装上插件,一条 SQL 即可:
INSTALL PLUGIN clone SONAME 'mysql_clone.so';安装后可用SHOW PLUGINS;确认状态,并查看克隆历史表:
SHOW PLUGINS; -- 确认 clone 插件已 ACTIVE SELECT * FROM mysql.clone_history; -- 克隆历史记录 SELECT * FROM performance_schema.clone_status; -- 当前克隆状态 SELECT * FROM performance_schema.clone_progress; -- 克隆进度明细💡 提示:
mysql.clone_history保存每次克隆的任务结果,是排查克隆失败原因的"第一现场"。
三、热备第一步:本地全量备份的最快方法
本地克隆无需网络,是备份到本机磁盘的最快全量热备方式,一条语句完成:
CLONE LOCAL DATA DIRECTORY = '/data/backup/clone_full';执行后,源实例会在线生成一份完整的物理数据目录快照,业务读写不受影响。之后可以把该目录直接作为新实例的数据目录启动,或者继续做增量克隆的基础快照。
对应核心流程可参考源码 plugin/clone/src/clone_local.cc 中的plugin_clone_local实现。
四、增量备份:PAGE TRACK 页面跟踪增量克隆
全量备份之后,数据每天都在变。如果每次都重新全量克隆,既费时间又费带宽。GreatSQL 的增量克隆方案基于PAGE TRACK(页面跟踪)机制,只需在全量克隆时开启页面跟踪,之后就能精准克隆出"上次备份以来发生变化的数据页"。
开启页面跟踪的全量备份
CLONE LOCAL DATA DIRECTORY = '/data/backup/clone_base' ENABLE PAGE TRACK;基于跟踪页面的增量克隆
CLONE LOCAL DATA DIRECTORY = '/data/backup/clone_incr' ENABLE PAGE TRACK;增量克隆会读取页面跟踪日志,只把变更过的数据页拷贝到新目录,数据量通常只有全量的百分之几到十几,备份窗口大幅缩短。
✅ 组合策略推荐:每周一次开启 PAGE TRACK 的全量备份 + 每天一次增量克隆,再配合定期清理过期备份目录,就是一套性价比极高的"热备+增量"备份体系。
增量备份的页面跟踪逻辑在 plugin/clone/src/clone_client.cc 与 plugin/clone/src/clone_local.cc 中实现,感兴趣可深入研读。
五、远程在线备份:一条 SQL 拉出新实例
要快速搭建从库、构建高可用集群或迁移实例,用远程克隆一步到位:
CLONE INSTANCE FROM 'backup_user'@'192.168.1.10':3306 IDENTIFIED BY 'backup_pass' DATA DIRECTORY = '/data/mysql_clone/data';克隆完成后,GreatSQL 会自动重启实例并加载克隆数据,一个可用的新实例即"复制粘贴"完成,整个过程业务无感知。远程克隆的协调逻辑在 plugin/clone/src/clone_server.cc 中。
远程克隆的安全加固
- 仅允许可信 Donor:设置
clone_valid_donor_list白名单,防止从陌生地址克隆数据:
SET GLOBAL clone_valid_donor_list = '192.168.1.10:3306,192.168.1.11:3306';- 启用加密传输:通过
clone_ssl_key、clone_ssl_cert配置 SSL 证书,克隆流量全程加密。 - 恢复前校验一致性:
performance_schema.clone_status与clone_progress可实时监控克隆进度与状态。
六、压缩全攻略:网络压缩 + 文件压缩怎么选
备份文件动辄几十上百 GB,压缩是省带宽、省磁盘的关键。GreatSQL Clone 提供了两层独立压缩,可按需组合:
网络层压缩(传输中压缩)
控制数据在网络传输过程中的压缩,适合跨机房、跨地域备份:
SET GLOBAL clone_enable_compression = ON; -- 开启网络压缩 SET GLOBAL clone_compression_algorithm = 'ZSTD'; -- 算法:ZSTD(默认)/ ZLIB SET GLOBAL clone_zstd_compression_level = 3; -- ZSTD 压缩级别 1~10,默认 3文件层压缩(落盘压缩)
在文件写入备份目录时压缩,备份文件直接以压缩格式落盘,归档更省空间:
SET GLOBAL clone_file_compress = 'CLONE_FILE_COMPRESS_ZSTD'; -- NONE/LZ4/ZSTD SET GLOBAL clone_file_compress_threads = 4; -- 并行压缩线程,默认 4 SET GLOBAL clone_file_compress_zstd_level = 1; -- ZSTD 级别 1~19,默认 1选型建议:
- 🚀 追求极致速度、磁盘充足:文件层选
LZ4,压缩快、CPU 开销小; - 🎯 追求高压缩比、网络带宽紧张:文件层选
ZSTD,并适当调高级别; - 🔗 只做跨机房传输、不在本地留备份:只开
clone_enable_compression即可。
💡 实测思路参考:官方测试用例 mysql-test/suite/clone/r/clone_compress.result 覆盖了"本地增量 + ZSTD 压缩克隆"的完整流程,可作为你验证压缩效果的最佳脚本。
七、性能调优:让克隆跑得更快更稳
克隆默认参数已足够稳健,但在大实例上合理调优收益明显,常用参数如下:
| 参数 | 默认值 | 建议 | 作用 |
|---|---|---|---|
clone_buffer_size | 4M | 32M~128M | 数据传输缓冲区,越大磁盘 IO 并行度越高 |
clone_max_concurrency | 8 | 16~32 | 最大并发线程数,适合多核高 IO 机器 |
clone_autotune_concurrency | ON | 保持 ON | 自动调节并发,避免压垮系统 |
clone_max_network_bandwidth | 0(不限) | 按需设置 MiB/s | 限制网络带宽,保护业务流量 |
clone_max_data_bandwidth | 0(不限) | 按需设置 MiB/s | 限制磁盘 IO 带宽,避免影响在线业务 |
clone_block_ddl | OFF | 按需开启 | 克隆期间是否阻塞 DDL,配合clone_ddl_timeout使用 |
例如,一个 500G 的实例想要"快而稳"地克隆,可以这样配置:
SET GLOBAL clone_buffer_size = 64 * 1024 * 1024; -- 64M 缓冲区 SET GLOBAL clone_max_concurrency = 16; -- 16 个并发线程 SET GLOBAL clone_max_network_bandwidth = 200; -- 限速 200 MiB/s这些参数在 plugin/clone/src/clone_plugin.cc 中定义,最大并发支持到 128 线程,弹性十足。
八、恢复实战:克隆数据如何找回
克隆数据恢复的核心是让新实例追平到源实例的最新状态。GreatSQL 支持两种恢复模式,通过clone_data_recovery_mode切换:
SET GLOBAL clone_data_recovery_mode = 'CLONE_DATA_RECOVERY_GTID'; -- 按 GTID 追平(默认) SET GLOBAL clone_data_recovery_mode = 'CLONE_DATA_RECOVERY_BINLOG_POSITION'; -- 按 binlog 位点追平- GTID 模式:主从环境首选,克隆后自动从 GTID 集合继续同步,简单可靠;
- binlog 位点模式:适合未开启 GTID 的传统主从架构。
远程克隆完成后实例会自动恢复并重启;本地克隆目录则可通过将其作为新实例的datadir启动来完成"恢复",配合 binlog 继续追平最新数据。
九、总结:一套方案覆盖全部备份场景
GreatSQL Clone 在线备份恢复,用四条 SQL 就能覆盖最核心的备份诉求:
- 全量热备:
CLONE LOCAL在线快照,业务零停机; - 增量备份:
ENABLE PAGE TRACK页面级增量,备份又快又省; - 远程克隆:
CLONE INSTANCE FROM秒建新实例,扩从库、搭集群利器; - 压缩归档:网络层 + 文件层双重压缩,带宽磁盘成本双降。
对于追求"高可用、高性能、高安全"的金融级应用,GreatSQL 的 Clone 插件正是替代传统mysqldump逻辑备份的理想选择。动手实践时,不妨从一条CLONE LOCAL开始,配合 mysql-test/suite/clone/ 下的官方测试脚本,逐步搭建起属于你自己的"热备+增量+压缩"备份体系。
【免费下载链接】GreatSQLGreatSQL是一款开源免费数据库,可在普通硬件上满足金融级应用场景,具有高可用、高性能、高兼容、高安全等特性,可作为MySQL或Percona Server for MySQL的理想可选替换。项目地址: https://gitcode.com/GreatSQL/GreatSQL
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考