Couchbase备份与恢复 #

一、备份概述 #

1.1 为什么需要备份 #

text
数据丢失风险:
- 硬件故障
- 人为误操作
- 软件Bug
- 自然灾害
- 网络攻击

1.2 备份类型 #

类型 说明 恢复时间
全量备份 完整数据备份 较长
增量备份 只备份变更 较短
差异备份 与上次全量的差异 中等

1.3 备份策略 #

text
推荐策略:
- 每日全量备份
- 每小时增量备份
- 异地备份存储
- 定期恢复演练

二、cbbackup工具 #

2.1 全量备份 #

备份单个Bucket:

bash
/opt/couchbase/bin/cbbackup \
    http://localhost:8091 /backup/full_$(date +%Y%m%d) \
    -u Administrator -p password \
    -b my-bucket \
    --single-node

备份所有Bucket:

bash
/opt/couchbase/bin/cbbackup \
    http://localhost:8091 /backup/full_$(date +%Y%m%d) \
    -u Administrator -p password \
    --single-node

备份指定节点:

bash
/opt/couchbase/bin/cbbackup \
    http://192.168.1.101:8091 /backup/node1_$(date +%Y%m%d) \
    -u Administrator -p password \
    --single-node

2.2 增量备份 #

bash
/opt/couchbase/bin/cbbackup \
    http://localhost:8091 /backup/incr_$(date +%Y%m%d_%H%M) \
    -u Administrator -p password \
    -b my-bucket \
    --single-node \
    --mode diff

2.3 备份参数 #

参数 说明
-b 指定Bucket
–single-node 从单节点备份
–mode 备份模式(full/diff/accu)
-t 线程数
-x 额外选项

2.4 备份选项 #

bash
/opt/couchbase/bin/cbbackup \
    http://localhost:8091 /backup/custom_$(date +%Y%m%d) \
    -u Administrator -p password \
    -b my-bucket \
    --single-node \
    -x "max_retry=10,retry_backoff=5"

常用选项:

选项 说明
max_retry 最大重试次数
retry_backoff 重试间隔(秒)
batch_size 批量大小
conflict_resolve 冲突解决

三、cbrestore工具 #

3.1 全量恢复 #

bash
/opt/couchbase/bin/cbrestore \
    /backup/full_20240115 http://localhost:8091 \
    -u Administrator -p password \
    -b my-bucket

3.2 恢复到不同Bucket #

bash
/opt/couchbase/bin/cbrestore \
    /backup/full_20240115 http://localhost:8091 \
    -u Administrator -p password \
    -b my-bucket \
    --bucket-destination restored-bucket

3.3 增量恢复 #

bash
/opt/couchbase/bin/cbrestore \
    /backup/incr_20240115_1000 http://localhost:8091 \
    -u Administrator -p password \
    -b my-bucket

3.4 恢复参数 #

参数 说明
-b 源Bucket
–bucket-destination 目标Bucket
-x 额外选项

3.5 恢复选项 #

bash
/opt/couchbase/bin/cbrestore \
    /backup/full_20240115 http://localhost:8091 \
    -u Administrator -p password \
    -b my-bucket \
    -x "max_retry=10,retry_backoff=5,batch_size=1000"

四、cbbackupmgr工具 #

4.1 配置备份 #

bash
/opt/couchbase/bin/cbbackupmgr config \
    --archive /backup/archive \
    --repo my-backup \
    --cluster http://localhost:8091 \
    --username Administrator \
    --password password

4.2 执行备份 #

bash
/opt/couchbase/bin/cbbackupmgr backup \
    --archive /backup/archive \
    --repo my-backup \
    --cluster http://localhost:8091 \
    --username Administrator \
    --password password

4.3 查看备份 #

bash
/opt/couchbase/bin/cbbackupmgr info \
    --archive /backup/archive \
    --repo my-backup

4.4 执行恢复 #

bash
/opt/couchbase/bin/cbbackupmgr restore \
    --archive /backup/archive \
    --repo my-backup \
    --cluster http://localhost:8091 \
    --username Administrator \
    --password password \
    --bucket-source my-bucket \
    --bucket-destination restored-bucket

4.5 合并备份 #

bash
/opt/couchbase/bin/cbbackupmgr merge \
    --archive /backup/archive \
    --repo my-backup \
    --start oldest \
    --end latest

4.6 删除备份 #

bash
/opt/couchbase/bin/cbbackupmgr remove \
    --archive /backup/archive \
    --repo my-backup \
    --backup backup-name

五、自动备份脚本 #

5.1 每日备份脚本 #

bash
#!/bin/bash

BACKUP_DIR="/backup/couchbase"
DATE=$(date +%Y%m%d)
LOG_FILE="/var/log/couchbase_backup.log"

echo "$(date) - 开始备份" >> $LOG_FILE

/opt/couchbase/bin/cbbackupmgr backup \
    --archive $BACKUP_DIR \
    --repo daily \
    --cluster http://localhost:8091 \
    --username Administrator \
    --password $CB_PASSWORD \
    >> $LOG_FILE 2>&1

if [ $? -eq 0 ]; then
    echo "$(date) - 备份成功" >> $LOG_FILE
else
    echo "$(date) - 备份失败" >> $LOG_FILE
    exit 1
fi

find $BACKUP_DIR -type d -mtime +7 -exec rm -rf {} \;

echo "$(date) - 清理旧备份完成" >> $LOG_FILE

5.2 定时任务 #

bash
crontab -e

0 2 * * * /opt/scripts/couchbase_backup.sh

六、备份验证 #

6.1 验证备份完整性 #

bash
/opt/couchbase/bin/cbbackupmgr info \
    --archive /backup/archive \
    --repo my-backup \
    --json | jq '.backups[].complete'

6.2 测试恢复 #

bash
/opt/couchbase/bin/couchbase-cli bucket-create \
    --cluster localhost:8091 \
    --username Administrator \
    --password password \
    --bucket test-restore \
    --bucket-type couchbase \
    --bucket-ramsize 256

/opt/couchbase/bin/cbrestore \
    /backup/full_20240115 http://localhost:8091 \
    -u Administrator -p password \
    -b my-bucket \
    --bucket-destination test-restore

/opt/couchbase/bin/couchbase-cli bucket-delete \
    --cluster localhost:8091 \
    --username Administrator \
    --password password \
    --bucket test-restore

6.3 数据校验 #

sql
SELECT COUNT(*) AS count FROM `my-bucket`.`_default`.`_default`;
SELECT COUNT(*) AS count FROM `test-restore`.`_default`.`_default`;

七、灾难恢复 #

7.1 恢复流程 #

text
步骤:
1. 评估灾难影响
2. 准备恢复环境
3. 恢复集群配置
4. 恢复数据
5. 验证数据完整性
6. 切换应用

7.2 集群配置恢复 #

bash
/opt/couchbase/bin/couchbase-cli cluster-init \
    --cluster localhost:8091 \
    --cluster-name recovery-cluster \
    --cluster-username Administrator \
    --cluster-password password \
    --cluster-ramsize 4096 \
    --services data,index,query

7.3 数据恢复 #

bash
/opt/couchbase/bin/cbbackupmgr restore \
    --archive /backup/archive \
    --repo my-backup \
    --cluster http://localhost:8091 \
    --username Administrator \
    --password password

7.4 索引重建 #

sql
BUILD INDEX ON `my-bucket`.`_default`.`_default`(
    idx_users_name,
    idx_users_email,
    idx_users_city
);

八、云存储备份 #

8.1 AWS S3备份 #

bash
aws s3 sync /backup/archive s3://my-bucket/couchbase-backup/

aws s3 sync s3://my-bucket/couchbase-backup/ /backup/archive

8.2 自动上传脚本 #

bash
#!/bin/bash

BACKUP_DIR="/backup/couchbase"
S3_BUCKET="s3://my-bucket/couchbase-backup"

/opt/couchbase/bin/cbbackupmgr backup \
    --archive $BACKUP_DIR \
    --repo daily \
    --cluster http://localhost:8091 \
    --username Administrator \
    --password $CB_PASSWORD

aws s3 sync $BACKUP_DIR $S3_BUCKET/$(date +%Y%m%d) \
    --storage-class STANDARD_IA

九、备份最佳实践 #

9.1 备份策略 #

text
生产环境建议:
- 每日全量备份
- 每小时增量备份
- 保留30天备份
- 异地备份存储
- 定期恢复演练

9.2 存储规划 #

text
存储需求计算:
备份大小 = 数据大小 × 压缩比 × 保留份数

示例:
数据大小:100GB
压缩比:0.5
保留份数:30
备份存储:100GB × 0.5 × 30 = 1.5TB

9.3 监控告警 #

bash
#!/bin/bash

BACKUP_DIR="/backup/couchbase"
MAX_AGE_HOURS=26

latest_backup=$(find $BACKUP_DIR -type d -name "backup-*" | sort | tail -1)
backup_age=$(( ($(date +%s) - $(date -d "${latest_backup##*-}" +%s)) / 3600 ))

if [ $backup_age -gt $MAX_AGE_HOURS ]; then
    echo "警告:备份已过期 ${backup_age} 小时"
    exit 1
fi

十、总结 #

备份恢复要点:

工具 说明
cbbackup 传统备份工具
cbrestore 传统恢复工具
cbbackupmgr 新版备份管理工具

最佳实践:

  1. 制定备份策略
  2. 定期执行备份
  3. 验证备份完整性
  4. 定期恢复演练
  5. 异地备份存储

下一步,让我们学习性能优化!

最后更新:2026-03-27