开源PolarDB-X备份恢复操作实操

本文涉及的产品
云原生数据库 PolarDB 分布式版,标准版 2核8GB
简介: 作者介绍:付文革,航天壹进制(江苏)信息科技有限公司产品研发,专注于数据库备份,主攻MySQL相关数据库以及各种国产分布式数据库的备份恢复,主要使用Java 、Python、Shell等编程语言航天壹进制(江苏)信息科技有限公司(简称航天壹进制)作为中国航天科工集团有限公司旗下上市公司航天工业发展股份有限公司的全资下属企业,专注于数据安全领域,自主研发并提供数据保护与业务连续性管理产品、解决方案及服务。

环境准备

开源PolarDB-X支持全量备份、增量备份、日志备份。本文基于已有的备份能力进行备份/恢复能力进行验证与操作实现,给大家提供操作参考。

本操作基于的基本环境:

  • 操作工具:开源MySQL备份工具:xtrabackup
  • 数据库版本:开源PolarDB-X v2.4.1,标准版(集中式)
  • 数据库部署架构:单节点部署

工具安装

下载xtrabackup工具安装包(注意提前自行配置系统Yum源,本文不赘述),使用命令:

yum install -y t-polardbx-engine-xtrabackup-80-8.0.32-20240821163958.alios7.x86_64.rpm

安装完成后默认会创建/u01/polardbx_engine_xtrabackup80目录:

image.png

备份数据

全量备份

数据准备:备份前插入三条数据:

image.png

按照以下命令,执行全量备份:

u01/polardbx_engine_xtrabackup80/bin/xtrabackup --defaults-file=/home/polarx/polardbx-engine/my.cnf --xtrabackup-plugin-dir="/u01/polardbx_engine_xtrabackup80/lib/plugin"  
--stream=xbstream  
--backup  
--extra-lsndir=/home/bk  
--parallel=4  --socket=/home/polarx/polardbx-engine/tmp.mysql.sock >/home/fwg/full/bakcup.xbstream

参数说明:(可自行在网上查询)

--defaults-file:指定主配置文件

--xtrabackup-plugin-dir:指定XtraBackup插件的安装路径,若未指定,工具会自动搜索默认路径;

--stream:使用 xtrabackup 进行流式备份

--backup:指定执行备份操作

--extra-lsndir:备份过程中包含额外的目录(例如日志目录或者其他重要数据目录),你可以使用 --extra-lsndir 参数,也可以使用 --include 来指定额外的文件或目录。

--parallel:指定在备份过程中使用的并行线程数

执行结果如下图:

image.png

image.png

备份成功完成后,即可在指定的目录(/home/fwg/full )里看到备份文件:

image.png

image.png

备份完成后通过/home/bk查看xtrabackup_info文件获取lsn,用作增量备份:

image.png


增量备份

数据准备:原有三条数据的基础上,新增加两条数据记录:

image.png

执行增量备份命令:

/u01/polardbx_engine_xtrabackup80/bin/xtrabackup --defaults-file=/home/polarx/polardbx-engine/my.cnf --xtrabackup-plugin-dir="/u01/polardbx_engine_xtrabackup80/lib/plugin"  
--stream=xbstream  
--backup 
--incremental-lsn=346461404 
--extra-lsndir=/home/bk/inc  
--parallel=4  --socket=/home/polarx/polardbx-engine/tmp.mysql.sock >/home/fwg/incr/bakcup_inc.xbstream

注意,我们增量备份命令中,指定了:incremental-lsn=346461404 ,即上次全量备份的lsn号

执行过程如下:

image.png

image.png

备份完成,可以在指定的目录(/home/fwg/incr/)查看增量备份文件。

日志备份

日志备份较为简单,可以直接将数据目录下的所有的二进制日志文件拷贝到指定备份目录下即可:

image.png

恢复数据

执行数据恢复之前,先停止数据库服务,并且通过清理polardb数据库相关目录(包括:/data、/log、/mysql、/run、/tmp),模拟数据丢失场景。

image.png

image.png

全量备份集恢复

解压备份

将完全备份对应的备份集文件解包到指定位置,这里可以直接指定为数据目录,解包命令如下:

/u01/polardbx_engine_xtrabackup80/bin/xbstream -x < /home/fwg/full/bakcup.xbstream -C /home/polarx/polardbx-engine/data/

解包完成后应用数据,应用命令如下:

/u01/polardbx_engine_xtrabackup80/bin/xtrabackup --defaults-file=/home/polarx/polardbx-engine/my.cnf --xtrabackup-plugin-dir="/u01/polardbx_engine_xtrabackup80/lib/plugin" 
--prepare
 --target-dir=/home/polarx/polardbx-engine/data/

image.png

image.png

应用数据完成,查看数据目录(/home/polarx/polardbx-engine/data):

image.png

查看xtrabackup_binlog_info文件获取index,用于指定元数据刷新

image.png

元数据刷新

将恢复后的数据目录修改用户属主

chown -R polarx:polarx /home/polarx/polardbx-engine

元数据刷新需要切换到非root用户,与环境搭建时一致

image.png

连续两次启动数据库(首次启动后可能无法连接,第二次启动后正常):

image.png

数据库启动完成后,即可访问数据库查看数据:

image.png

注:如果数据库启动失败,将数据目录下的二进制日志文件清理后重新启动即可:

rm -f data/mysql-binlog.*

全量+多个增量备份集恢复

将完全备份集解包到指定文件

/u01/polardbx_engine_xtrabackup80/bin/xbstream -x < /home/fwg/full/bakcup.xbstream -C /home/polarx/polardbx-engine/data/

将增量备份集解包到指定文件

/u01/polardbx_engine_xtrabackup80/bin/xbstream -x < /home/fwg/incr/bakcup_inc.xbstream -C /home/fwg/incr/

应用完全备份集

/u01/polardbx_engine_xtrabackup80/bin/xtrabackup --defaults-file=/home/polarx/polardbx-engine/my.cnf --xtrabackup-plugin-dir="/u01/polardbx_engine_xtrabackup80/lib/plugin" 
--prepare --apply-log-only
 --target-dir=/home/polarx/polardbx-engine/data/

image.png

将增量备份集应用到完全备份集中

/u01/polardbx_engine_xtrabackup80/bin/xtrabackup --defaults-file=/home/polarx/polardbx-engine/my.cnf --xtrabackup-plugin-dir="/u01/polardbx_engine_xtrabackup80/lib/plugin" 
--prepare  
--apply-log-only 
--target-dir=/home/polarx/polardbx-engine/data/ --incremental-dir=/home/fwg/incr/

image.png

应用数据完成后,同完全备份恢复后操作一致,完成元数据刷新后启动数据库,即可查看数据:

image.png

数据备份集结合日志文件实现指定时间点恢复

数据备份集恢复后,获取日志文件,确定恢复的指定时间是在哪个日志文件中。

例如:

日志文件为mysql-binlog.000001 ... mysql-binlog.000099,需要恢复的时间点为 “2025-10-25 09:59:35”

1、确定需要的日志文件,遍历日志文件,获取每个日志文件的开始时间(start)和结束时间(end),符合start<=指定时间<=end的日志为最后一个日志文件。

mysqlbinlog  --no-defaults  /tmp/mysql-bin.000003 |grep -m 1 "end_log_pos "

image.png

/u01/xcluster80/bin/mysqlbinlog --no-defaults /home/fwg/mysql-binlog.000003 |grep "end_log_pos " | tail -1

image.png

如上mysql-bin.000003为指定时间所在的日志文件。

  1. 裁剪binlog到指定恢复的时间点
/u01/polardbx_engine_xtrabackup80/bin/mysqlbinlogtailor --truncate-datetime="2025-10-25 09:59:35" mysql-binlog.000003

  1. 此命令会将mysql-binlog.000003进行裁剪,裁剪后的文件对应的时间为2025-10-25 09:56:28---2025-10-25 09:59:35。
  2. 将mysql-binlog.000003前序binlong日志文件(如本案例中涉及:mysql-binlog.000001、mysql-binlog.000002),以及裁剪后的mysql-binlog.000003都放入数据目录中,并创建日志索引文件:


    image.png
  3. 需要确保恢复机数据库配置文件中server_id值与备份机不同,如果相同将不会回放binlog到指定时间。
    image.png
  4. 重复以上元数据刷新步骤,启动数据库
  5. 查看恢复出来的数据

image.png

相关文章
|
17天前
|
机器学习/深度学习 人工智能 自然语言处理
AgentEvolver:让智能体系统学会「自我进化」
AgentEvolver 是一个自进化智能体系统,通过自我任务生成、经验导航与反思归因三大机制,推动AI从“被动执行”迈向“主动学习”。它显著提升强化学习效率,在更少参数下实现更强性能,助力智能体持续自我迭代。开源地址:https://github.com/modelscope/AgentEvolver
632 38
|
2月前
|
SQL 关系型数据库 MySQL
开源新发布|PolarDB-X v2.4.2开源生态适配升级
PolarDB-X v2.4.2开源发布,重点完善生态能力:新增客户端驱动、开源polardbx-proxy组件,支持读写分离与高可用;强化DDL变更、扩缩容等运维能力,并兼容MySQL主备复制及MCP AI生态。
开源新发布|PolarDB-X v2.4.2开源生态适配升级
|
18天前
|
数据采集 人工智能 自然语言处理
Meta SAM3开源:让图像分割,听懂你的话
Meta发布并开源SAM 3,首个支持文本或视觉提示的统一图像视频分割模型,可精准分割“红色条纹伞”等开放词汇概念,覆盖400万独特概念,性能达人类水平75%–80%,推动视觉分割新突破。
986 59
Meta SAM3开源:让图像分割,听懂你的话
|
21天前
|
监控 应用服务中间件 API
Agentic 应用时代,Dify 全链路可观测最佳实践
本文讲述 Dify 平台在 Agentic 应用开发中面临的可观测性挑战,从开发者与运维方双重视角出发,系统分析了当前 Dify 可观测能力的现状、局限与改进方向
331 18
Agentic 应用时代,Dify 全链路可观测最佳实践
|
21天前
|
机器人 数据挖掘 API
一个销售数据分析机器人的诞生:看 Dify 如何在 DMS 助力下实现自动化闭环
Dify 作为一款低代码 AI 应用开发平台,凭借其直观的可视化工作流编排能力,极大降低了大模型应用的开发门槛。
361 22
一个销售数据分析机器人的诞生:看 Dify 如何在 DMS 助力下实现自动化闭环
|
23天前
|
人工智能 编解码 数据挖掘
如何给AI一双“懂节奏”的耳朵?
VARSTok 是一种可变帧率语音分词器,能智能感知语音节奏,动态调整 token 长度。它通过时间感知聚类与隐式时长编码,在降低码率的同时提升重建质量,实现高效、自然的语音处理,适配多种应用场景。
147 18
|
22天前
|
运维 监控 数据可视化
故障发现提速 80%,运维成本降 40%:魔方文娱的可观测升级之路
魔方文娱携手阿里云构建全栈可观测体系,实现故障发现效率提升 80%、运维成本下降 40%,并融合 AI 驱动异常检测,迈向智能运维新阶段。
210 36
|
24天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
813 228