PITR Restore

有时我们可能希望将数据库恢复到过去的某个特定点,这称为PITR(Point in Time Recovery)

RDS for PostgreSQL 允许恢复到备份保留期内的任何时间点。这是通过将自动备份与事务日志结合使用来实现的,事务日志每 5 分钟上传到 S3。

最新恢复时间

RDS 会跟踪数据库的最新可恢复时间,我们可以使用CLI 查找此信息:

aws rds describe-db-instances \
  --db-instance-identifier rds-pg-labs \
  --region $AWSREGION \
  --query 'DBInstances[0].LatestRestorableTime' \
  --output text

image-20231104153029067

我们可以使用以下命令将数据库恢复到我们在上一步中查找到的最新可恢复时间:

aws rds restore-db-instance-to-point-in-time \
  --source-db-instance-identifier rds-pg-labs \
  --target-db-instance-identifier rds-pg-labs-restore-latest \
  --restore-time 2023-11-04T07:23:34+00:00

现在我们回到RDS控制台查看恢复的数据库:

image-20231104153242225

恢复到特定时间

现在我们将使用RDS 控制台将我们的数据库恢复到 30 分钟前。选择rds-pg-labs数据库,选择Restore to point in time:

image-20231104153319488

在页面上,自定义恢复时间。输入新的数据库实例标识符(例如rds-pg-labs-earlier-restore),将其余信息保留为默认值,然后单击Restore:

image-20231104153435610

返回到数据库列表,看到正在创建的新实例:

image-20231104153509625

删除资源

上面创建了两个备份出来的数据库,实验完成后将它们删掉:

AWSREGION=`aws configure get region`

aws rds delete-db-instance \
	--db-instance-identifier rds-pg-labs-earlier-restore \
	--skip-final-snapshot \
	--delete-automated-backups \
	--region $AWSREGION

aws rds delete-db-instance \
	--db-instance-identifier rds-pg-labs-restore-latest \
	--skip-final-snapshot \
	--delete-automated-backups \
	--region $AWSREGION