备份与恢复 #
一、备份概述 #
备份是数据安全的重要保障,ArangoDB提供多种备份方式。
1.1 备份类型 #
| 类型 | 工具 | 说明 |
|---|---|---|
| 逻辑备份 | arangodump/arangorestore | 导出JSON数据 |
| 物理备份 | 文件复制 | 复制数据文件 |
| 快照备份 | 存储快照 | 存储系统快照 |
1.2 备份策略 #
text
备份策略:
├── 全量备份:定期完整备份
├── 增量备份:只备份变化数据
├── 异地备份:备份到远程存储
└── 备份验证:定期验证备份可用性
二、逻辑备份 #
2.1 arangodump基本使用 #
备份整个数据库:
bash
arangodump \
--server.endpoint tcp://127.0.0.1:8529 \
--server.username root \
--server.password password \
--output-directory /backup/full
2.2 备份指定数据库 #
bash
arangodump \
--server.database mydb \
--server.username root \
--server.password password \
--output-directory /backup/mydb
2.3 备份指定集合 #
bash
arangodump \
--server.database mydb \
--collection users \
--collection orders \
--output-directory /backup/collections
2.4 压缩备份 #
bash
arangodump \
--output-directory /backup/compressed \
--compress-output true
2.5 增量备份 #
bash
arangodump \
--output-directory /backup/incremental \
--incremental true
2.6 备份选项 #
| 选项 | 说明 |
|---|---|
| –server.database | 数据库名称 |
| –collection | 指定集合 |
| –output-directory | 输出目录 |
| –compress-output | 压缩输出 |
| –incremental | 增量备份 |
| –threads | 并发线程数 |
三、逻辑恢复 #
3.1 arangorestore基本使用 #
恢复整个数据库:
bash
arangorestore \
--server.endpoint tcp://127.0.0.1:8529 \
--server.username root \
--server.password password \
--input-directory /backup/full
3.2 恢复到指定数据库 #
bash
arangorestore \
--server.database newdb \
--create-database true \
--input-directory /backup/mydb
3.3 恢复指定集合 #
bash
arangorestore \
--server.database mydb \
--collection users \
--collection orders \
--input-directory /backup/collections
3.4 覆盖现有数据 #
bash
arangorestore \
--input-directory /backup/full \
--overwrite true
3.5 导入数据 #
只导入数据,不创建结构:
bash
arangorestore \
--input-directory /backup/full \
--import-data true \
--create-collection false
3.6 恢复选项 #
| 选项 | 说明 |
|---|---|
| –server.database | 目标数据库 |
| –create-database | 创建数据库 |
| –create-collection | 创建集合 |
| –import-data | 导入数据 |
| –overwrite | 覆盖现有数据 |
| –threads | 并发线程数 |
四、物理备份 #
4.1 冷备份 #
停止服务后复制数据文件:
bash
systemctl stop arangodb3
cp -r /var/lib/arangodb3 /backup/cold
systemctl start arangodb3
4.2 热备份 #
使用LVM快照:
bash
lvcreate -L 10G -s -n arangodb_snapshot /dev/vg0/arangodb
4.3 数据文件位置 #
| 系统 | 数据目录 |
|---|---|
| Linux | /var/lib/arangodb3 |
| macOS | /usr/local/var/lib/arangodb3 |
| Windows | C:\ProgramData\ArangoDB |
五、集群备份 #
5.1 集群逻辑备份 #
bash
arangodump \
--server.endpoint tcp://coordinator:8529 \
--server.username root \
--server.password password \
--output-directory /backup/cluster
5.2 集群恢复 #
bash
arangorestore \
--server.endpoint tcp://coordinator:8529 \
--server.username root \
--server.password password \
--input-directory /backup/cluster \
--cluster true
5.3 集群备份注意事项 #
text
注意事项:
├── 通过Coordinator执行备份
├── 备份期间避免DDL操作
├── 大数据量备份使用多线程
└── 验证备份完整性
六、备份脚本 #
6.1 完整备份脚本 #
bash
#!/bin/bash
BACKUP_DIR="/backup/arangodb"
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_PATH="${BACKUP_DIR}/${DATE}"
RETENTION_DAYS=7
mkdir -p ${BACKUP_PATH}
arangodump \
--server.endpoint tcp://127.0.0.1:8529 \
--server.username root \
--server.password ${ARANGO_PASSWORD} \
--output-directory ${BACKUP_PATH} \
--compress-output true \
--threads 4
if [ $? -eq 0 ]; then
echo "Backup completed: ${BACKUP_PATH}"
find ${BACKUP_DIR} -type d -mtime +${RETENTION_DAYS} -exec rm -rf {} \;
echo "Old backups cleaned"
else
echo "Backup failed"
exit 1
fi
6.2 增量备份脚本 #
bash
#!/bin/bash
BACKUP_DIR="/backup/arangodb/incremental"
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_PATH="${BACKUP_DIR}/${DATE}"
mkdir -p ${BACKUP_PATH}
arangodump \
--server.endpoint tcp://127.0.0.1:8529 \
--server.username root \
--server.password ${ARANGO_PASSWORD} \
--output-directory ${BACKUP_PATH} \
--incremental true \
--threads 4
echo "Incremental backup completed: ${BACKUP_PATH}"
6.3 定时备份 #
crontab配置:
text
# 每天凌晨2点全量备份
0 2 * * * /scripts/arangodb_backup.sh >> /var/log/arango_backup.log 2>&1
# 每小时增量备份
0 * * * * /scripts/arangodb_incremental.sh >> /var/log/arango_backup.log 2>&1
七、异地备份 #
7.1 同步到远程服务器 #
bash
rsync -avz /backup/arangodb/ remote-server:/backup/arangodb/
7.2 上传到云存储 #
bash
aws s3 sync /backup/arangodb/ s3://my-bucket/arangodb-backup/
7.3 异地备份脚本 #
bash
#!/bin/bash
BACKUP_DIR="/backup/arangodb"
S3_BUCKET="s3://my-bucket/arangodb-backup"
# 本地备份
/scripts/arangodb_backup.sh
# 上传到S3
aws s3 sync ${BACKUP_DIR}/ ${S3_BUCKET}/ --delete
echo "Backup synced to S3"
八、备份验证 #
8.1 验证备份完整性 #
bash
#!/bin/bash
BACKUP_DIR="/backup/arangodb/latest"
# 检查文件是否存在
if [ ! -f "${BACKUP_DIR}/metadata.json" ]; then
echo "Backup metadata missing"
exit 1
fi
# 恢复到测试数据库
arangorestore \
--server.database test_restore \
--create-database true \
--input-directory ${BACKUP_DIR}
if [ $? -eq 0 ]; then
echo "Backup validation passed"
# 删除测试数据库
arangosh --server.database test_restore --javascript.execute-string "db._dropDatabase('test_restore')"
else
echo "Backup validation failed"
exit 1
fi
8.2 数据校验 #
javascript
// 检查文档数量
var originalCount = db.users.count();
// 恢复后检查
var restoredCount = db._query("FOR u IN users RETURN 1").toArray().length;
if (originalCount !== restoredCount) {
throw new Error("Document count mismatch");
}
九、恢复演练 #
9.1 恢复演练脚本 #
bash
#!/bin/bash
BACKUP_DIR="/backup/arangodb/latest"
TEST_DB="restore_test_$(date +%s)"
echo "Starting restore drill..."
# 创建测试数据库
arangosh --javascript.execute-string "db._createDatabase('${TEST_DB}')"
# 恢复数据
arangorestore \
--server.database ${TEST_DB} \
--input-directory ${BACKUP_DIR}
if [ $? -eq 0 ]; then
echo "Restore successful"
# 验证数据
arangosh --server.database ${TEST_DB} --javascript.execute-string "
var collections = db._collections();
collections.forEach(function(c) {
if (!c.properties().isSystem) {
print(c.name() + ': ' + c.count() + ' documents');
}
});
"
# 清理
arangosh --javascript.execute-string "db._dropDatabase('${TEST_DB}')"
echo "Restore drill completed successfully"
else
echo "Restore failed"
exit 1
fi
十、最佳实践 #
10.1 备份策略建议 #
text
建议:
├── 生产环境每天全量备份
├── 关键数据每小时增量备份
├── 保留至少7天备份
├── 异地备份
└── 定期恢复演练
10.2 备份检查清单 #
text
检查项:
├── 备份是否成功完成
├── 备份文件是否完整
├── 备份是否可以恢复
├── 异地备份是否同步
└── 备份日志是否正常
十一、总结 #
备份与恢复要点:
- 逻辑备份:arangodump/arangorestore
- 物理备份:文件复制、快照
- 增量备份:只备份变化数据
- 异地备份:rsync、云存储
- 备份验证:定期恢复演练
下一步,让我们学习性能优化!
最后更新:2026-03-27