备份与恢复 #

一、备份概述 #

备份是数据安全的重要保障,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
检查项:
├── 备份是否成功完成
├── 备份文件是否完整
├── 备份是否可以恢复
├── 异地备份是否同步
└── 备份日志是否正常

十一、总结 #

备份与恢复要点:

  1. 逻辑备份:arangodump/arangorestore
  2. 物理备份:文件复制、快照
  3. 增量备份:只备份变化数据
  4. 异地备份:rsync、云存储
  5. 备份验证:定期恢复演练

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

最后更新:2026-03-27