环境准备
开源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目录:
备份数据
全量备份
数据准备:备份前插入三条数据:
按照以下命令,执行全量备份:
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:指定在备份过程中使用的并行线程数
执行结果如下图:
备份成功完成后,即可在指定的目录(/home/fwg/full )里看到备份文件:
备份完成后通过/home/bk查看xtrabackup_info文件获取lsn,用作增量备份:
增量备份
数据准备:原有三条数据的基础上,新增加两条数据记录:
执行增量备份命令:
/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号
执行过程如下:
备份完成,可以在指定的目录(/home/fwg/incr/)查看增量备份文件。
日志备份
日志备份较为简单,可以直接将数据目录下的所有的二进制日志文件拷贝到指定备份目录下即可:
恢复数据
执行数据恢复之前,先停止数据库服务,并且通过清理polardb数据库相关目录(包括:/data、/log、/mysql、/run、/tmp),模拟数据丢失场景。
全量备份集恢复
解压备份
将完全备份对应的备份集文件解包到指定位置,这里可以直接指定为数据目录,解包命令如下:
/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/
应用数据完成,查看数据目录(/home/polarx/polardbx-engine/data):
查看xtrabackup_binlog_info文件获取index,用于指定元数据刷新
元数据刷新
将恢复后的数据目录修改用户属主
chown -R polarx:polarx /home/polarx/polardbx-engine
元数据刷新需要切换到非root用户,与环境搭建时一致
连续两次启动数据库(首次启动后可能无法连接,第二次启动后正常):
数据库启动完成后,即可访问数据库查看数据:
注:如果数据库启动失败,将数据目录下的二进制日志文件清理后重新启动即可:
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/
将增量备份集应用到完全备份集中
/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/
应用数据完成后,同完全备份恢复后操作一致,完成元数据刷新后启动数据库,即可查看数据:
数据备份集结合日志文件实现指定时间点恢复
数据备份集恢复后,获取日志文件,确定恢复的指定时间是在哪个日志文件中。
例如:
日志文件为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 "
/u01/xcluster80/bin/mysqlbinlog --no-defaults /home/fwg/mysql-binlog.000003 |grep "end_log_pos " | tail -1
如上mysql-bin.000003为指定时间所在的日志文件。
- 裁剪binlog到指定恢复的时间点
/u01/polardbx_engine_xtrabackup80/bin/mysqlbinlogtailor --truncate-datetime="2025-10-25 09:59:35" mysql-binlog.000003
此命令会将mysql-binlog.000003进行裁剪,裁剪后的文件对应的时间为2025-10-25 09:56:28---2025-10-25 09:59:35。- 将mysql-binlog.000003前序binlong日志文件(如本案例中涉及:mysql-binlog.000001、mysql-binlog.000002),以及裁剪后的mysql-binlog.000003都放入数据目录中,并创建日志索引文件:
- 需要确保恢复机数据库配置文件中server_id值与备份机不同,如果相同将不会回放binlog到指定时间。
- 重复以上元数据刷新步骤,启动数据库
- 查看恢复出来的数据