Spanner备份与恢复 #
一、备份概述 #
1.1 备份类型 #
text
Spanner备份类型
├── 自动备份
│ ├── 定期自动创建
│ ├── 可配置保留时间
│ └── 可配置备份计划
│
├── 按需备份
│ ├── 手动创建
│ ├── 指定保留时间
│ └── 适合特殊场景
│
└── 时间点恢复(PITR)
├── 恢复到任意时间点
├── 基于版本历史
└── 保留期可配置
1.2 备份特点 #
text
备份特点:
├── 全量备份
├── 一致性快照
├── 加密存储
├── 跨区域复制
└── 自动过期删除
二、自动备份 #
2.1 配置自动备份 #
bash
# 创建实例时配置备份
gcloud spanner instances create my-instance \
--config=regional-us-central1 \
--nodes=1 \
--backup-schedule="0 2 * * *" \
--backup-retention=7d
# 更新现有实例的备份配置
gcloud spanner instances update my-instance \
--backup-schedule="0 2 * * *" \
--backup-retention=14d
2.2 备份计划配置 #
text
备份计划格式: cron表达式
├── "0 2 * * *": 每天凌晨2点
├── "0 2 * * 0": 每周日凌晨2点
├── "0 2 1 * *": 每月1日凌晨2点
└── 时区为UTC
2.3 保留时间配置 #
text
保留时间选项:
├── 最小: 1天
├── 最大: 366天
├── 默认: 7天
└── 根据合规要求设置
三、按需备份 #
3.1 创建备份 #
bash
# 创建备份
gcloud spanner backups create my-backup \
--instance=my-instance \
--database=my-database \
--retention-period=7d
# 指定过期时间
gcloud spanner backups create my-backup \
--instance=my-instance \
--database=my-database \
--expiration-date=2024-04-03T00:00:00Z
3.2 使用客户端库创建备份 #
java
// Java创建备份
import com.google.cloud.spanner.Backup;
import com.google.cloud.spanner.Instance;
Instance instance = spanner.getInstanceAdminClient().getInstance(instanceId);
Backup backup = instance.createBackup(
databaseId,
backupId,
Timestamp.now()
).waitFor().getResult();
python
# Python创建备份
from google.cloud import spanner
from datetime import datetime, timedelta
instance = spanner_client.instance(instance_id)
database = instance.database(database_id)
backup = instance.backup(backup_id)
operation = backup.create(expire_time=datetime.utcnow() + timedelta(days=7))
operation.result()
3.3 查看备份 #
bash
# 列出所有备份
gcloud spanner backups list --instance=my-instance
# 查看备份详情
gcloud spanner backups describe my-backup \
--instance=my-instance
四、恢复数据库 #
4.1 从备份恢复 #
bash
# 从备份恢复数据库
gcloud spanner databases restore my-restored-db \
--instance=my-instance \
--source-backup=my-backup
# 恢复到其他实例
gcloud spanner databases restore my-restored-db \
--instance=target-instance \
--source-backup=my-backup \
--source-instance=source-instance
4.2 使用客户端库恢复 #
java
// Java恢复数据库
import com.google.cloud.spanner.Database;
import com.google.cloud.spanner.Instance;
Instance instance = spanner.getInstanceAdminClient().getInstance(instanceId);
Database database = instance.restoreDatabase(
databaseId,
sourceInstanceId,
sourceBackupId
).waitFor().getResult();
python
# Python恢复数据库
instance = spanner_client.instance(instance_id)
backup = instance.backup(backup_id)
operation = backup.restore(target_instance_id, target_database_id)
database = operation.result()
4.3 恢复注意事项 #
text
恢复注意事项:
├── 恢复会创建新数据库
├── 目标数据库不能已存在
├── 恢复时间取决于数据量
├── 恢复期间可读取
└── 恢复后需要更新应用配置
五、时间点恢复 #
5.1 启用PITR #
sql
-- PITR默认启用
-- 版本保留时间默认为1小时
-- 查看版本保留时间
SELECT
database_name,
version_retention_period
FROM INFORMATION_SCHEMA.DATABASES;
5.2 配置保留时间 #
bash
# 设置版本保留时间
gcloud spanner databases update my-database \
--instance=my-instance \
--version-retention-period=7d
5.3 时间点恢复 #
sql
-- 查询历史数据
SELECT * FROM users
FOR SYSTEM_TIME AS OF TIMESTAMP '2024-03-27T10:00:00Z';
-- 查询时间范围内的数据
SELECT * FROM users
FOR SYSTEM_TIME BETWEEN
TIMESTAMP '2024-03-27T09:00:00Z' AND
TIMESTAMP '2024-03-27T10:00:00Z';
5.4 使用时间戳恢复 #
java
// Java时间点恢复
import com.google.cloud.spanner.Timestamp;
Timestamp targetTimestamp = Timestamp.ofTimeMicroseconds(1711537200000000L);
// 使用备份恢复到特定时间点
// 需要找到包含目标时间点的备份
六、备份管理 #
6.1 查看备份列表 #
bash
# 列出所有备份
gcloud spanner backups list --instance=my-instance
# 过滤备份
gcloud spanner backups list --instance=my-instance \
--filter="database:my-database"
6.2 更新备份过期时间 #
bash
# 更新过期时间
gcloud spanner backups update my-backup \
--instance=my-instance \
--expiration-date=2024-05-01T00:00:00Z
6.3 删除备份 #
bash
# 删除备份
gcloud spanner backups delete my-backup \
--instance=my-instance
七、备份监控 #
7.1 监控指标 #
text
备份监控指标:
├── backup/created: 备份创建时间
├── backup/size: 备份大小
├── backup/expired: 备份过期时间
├── backup/count: 备份数量
└── backup/storage: 备份存储量
7.2 告警配置 #
bash
# 创建备份失败告警
gcloud alpha monitoring policies create \
--display-name="Spanner Backup Failed" \
--condition-display-name="Backup Failure" \
--condition-filter='resource.type="spanner_instance" AND metric.type="spanner.googleapis.com/backup/failed"'
7.3 备份状态检查 #
bash
# 检查备份状态
gcloud spanner backups describe my-backup \
--instance=my-instance \
--format="value(state)"
八、备份最佳实践 #
8.1 备份策略 #
text
备份策略建议:
├── 配置自动备份
├── 设置合适的保留时间
├── 定期验证备份可用性
├── 重要变更前创建备份
└── 跨区域备份复制
8.2 恢复测试 #
text
恢复测试建议:
├── 定期进行恢复演练
├── 验证数据完整性
├── 测量恢复时间
├── 记录恢复流程
└── 更新应急预案
8.3 成本优化 #
text
备份成本优化:
├── 合理设置保留时间
├── 及时删除不需要的备份
├── 监控备份存储量
├── 评估备份频率
└── 使用增量备份(自动)
九、总结 #
备份类型对比:
| 类型 | 特点 | 使用场景 |
|---|---|---|
| 自动备份 | 定期自动创建 | 常规备份 |
| 按需备份 | 手动创建 | 特殊场景 |
| PITR | 时间点恢复 | 误操作恢复 |
最佳实践:
text
1. 配置自动备份
└── 定期自动备份
2. 设置合适的保留时间
└── 平衡成本和需求
3. 定期测试恢复
└── 确保备份可用
4. 监控备份状态
└── 及时发现问题
5. 制定恢复预案
└── 快速响应
下一步,让我们学习性能优化!
最后更新:2026-03-27