用 MariaDB Backup 实现时间点恢复(PITR)

时间点恢复(Point-In-Time Recovery,简称 PITR)用于把数据库恢复到指定时间点。从备份恢复,可以还原数据目录在备份时刻的状态,但这一步不会恢复二进制日志。进行时间点恢复时,应先从完整备份或增量备份恢复数据目录,再通过 mysqlbinlog 工具重放二进制日志,将数据恢复到目标时间。

除非步骤明确说明使用普通用户,否则以下命令按官方示例以 root 身份执行。

1. 查找恢复所需的二进制日志位置

启用二进制日志是 PITR 的前提。MariaDB Backup 在对已开启二进制日志的 MariaDB Server 进行备份时,会将日志信息保存在 mariadb_backup_binlog_info 文件中;旧版使用的文件名是 xtrabackup_binlog_info。查阅这个文件,确定要使用的二进制日志文件名及位置。下面的示例位置是 321:

cat /data/backups/full/mariadb_backup_binlog_info
mariadb-node4.00001     321

2. 配置新的数据目录

更新配置文件(例如 my.cnf),使服务器使用新的数据目录:

[mysqld]
datadir=/var/lib/mysql_new

3. 恢复备份

按照完整备份与恢复说明恢复备份。

4. 启动数据库服务器

启动 MariaDB Server:

systemctl start mariadb

5. 用 mysqlbinlog 创建恢复脚本

使用 mysqlbinlog 从旧数据目录中的二进制日志创建 SQL 脚本。指定备份日志信息文件中的起始位置,以及想恢复到的日期和时间。官方这一段使用旧文件名 xtrabackup_binlog_info;新版对应文件名见第 1 步。以下命令按官方示例以普通用户身份执行:

$ mysqlbinlog --start-position=321 \
      --stop-datetime="2019-06-28 12:00:00" \
      /var/lib/mysql/mariadb-node4.00001 \
      > mariadb-binlog.sql

示例中的 321、日志文件名、数据目录与 2019-06-28 12:00:00 都是示例值,应依据实际备份及目标时间核定。

6. 执行恢复脚本

在使用新数据目录的数据库实例中,执行上一步生成的脚本:

$ mariadb < mariadb-binlog.sql

延伸阅读

基于 InnoDB 日志归档的时间点恢复提供另一种流程:重放归档的 InnoDB 预写日志,而非二进制日志。官方文档说明该功能自 MariaDB 13.0 起提供。

mariadb-backup 不支持 innodb_log_archive 设置为 ON 时的日志格式。如果服务器以 innodb_log_archive=ON 运行,mariadb-backup 会失败;该配置应使用上面链接的 InnoDB 日志归档恢复流程。

来源:MariaDB 官方文档 Point-In-Time Recovery (PITR, mariadb-backup),版权及贡献者信息归原文权利人所有。页面原许可声明为:“This page is licensed: CC BY-SA / Gnu FDL”。本离线稿件保留该声明,尚未核定许可版本、双许可选择规则及完整分发条件,因此不标记为可发布稿。中文翻译与排版整理日期:2026-10-03;代码保持原样,补充了示例值和新旧元数据文件名说明。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容