时间点恢复(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 日志归档恢复流程。











暂无评论内容