Linux 定时备份 MongoDB数据 并上传至 Azure Blob


编程3461 阅0 评

方式

每日定时执行备份脚本,将 mongo 的整个数据库进行打包压缩,然后将打包后的文件上传到 Azure Blob中。

MongoDB 备份文件

通过 mongodump 命令将mongo数据库备份出来,会导出bson格式的文件

MongoDB 备份(mongodump)与恢复(mongorestore):
https://www.runoob.com/mongodb/mongodb-mongodump-mongorestore.html

mongodump -h localhost --authenticationDatabase admin -u 账号 -p 密码 -d 数据库名 -o 输出目录


导出文件结构:
.
 |_输出目录
   |_数据库名
     |_集合名.metadata.json
     |_集合名.bson

Azure Blob 上传文件

关于 linux 通过命令操作 Azure Blob,可以使用官方提供的 AzCpoy工具,工具文档及下载地址见:
https://docs.microsoft.com/zh-cn/azure/storage/common/storage-use-azcopy-v10
使用 AzCopy 将文件上传到 Azure Blob 存储:
https://docs.microsoft.com/zh-cn/azure/storage/common/storage-use-azcopy-blobs-upload

上传文件命令:
azcopy cp "/path/to/file.txt" "https://[account].blob.core.windows.net/[container]/[path/to/blob]?[SAS]"

定时备份

脚本

. 下载AzCpoy脚本

mkdir ~/scripts && wget -O ~/scripts/azcopy_v10.tar.gz https://aka.ms/downloadazcopy-v10-linux && tar -xf ~/scripts/azcopy_v10.tar.gz -C ~/scripts/ --strip-components=1

. 备份脚本
vim ~/scripts/mongodb_backup.sh

#!/bin/sh
echo "启动MongoDB备份脚本..."

# 环境
ENV=dev
# 工作目录
WORK_DIR=~/backup/mongodb
# 当前时间字符串,格式:2021011521
DATE=$(TZ=UTC-8 date +"%Y%m%d%H")
# mongodump 命令备份文件的输出目录
DEST_DIR=$WORK_DIR/$DATE
# 最终打包文件名,格式:前缀+时间,如:mongodb-data-backup-2021011521.tar.gz
PACK_FILE_NAME=mongodb-data-backup-$DATE.tar.gz
PACK_FILE_PATH=$WORK_DIR/$PACK_FILE_NAME

# Azure Blob 配置
AZURE_BLOB_ACCOUNT_NAME=contentdevsa
AZURE_BLOB_HOST=https://$AZURE_BLOB_ACCOUNT_NAME.blob.core.chinacloudapi.cn
AZURE_BLOB_CONTAINER=backup
AZURE_BLOB_SAS=共享签名
AZURE_BLOB_FILE_DIR=mongo/$ENV
AZURE_BLOB_FILE_PATH=$AZURE_BLOB_HOST/$AZURE_BLOB_CONTAINER/$AZURE_BLOB_FILE_DIR/$PACK_FILE_NAME

# 创建输出目录
rm -rf $WORK_DIR
mkdir -p $DEST_DIR

echo "正在执行 mongodump 命令..."
mongodump -h localhost --authenticationDatabase admin -u 账号 -p 密码 -d ai121_content -o $DEST_DIR

echo "正在打包 $PACK_FILE_PATH ..."
tar -zcvf $PACK_FILE_PATH -C $DEST_DIR .

echo "开始上传 $PACK_FILE_NAME 到 Azure Blob"
sudo ~/scripts/azcopy cp $PACK_FILE_PATH $AZURE_BLOB_FILE_PATH$AZURE_BLOB_SAS

# 删除 mongodump 命令备份文件的输出目录
rm -rf $DEST_DIR

echo "MongoDB备份完毕"

使脚本可执行:

chmod +x ~/scripts/mongodb_backup.sh

定时执行

crontab -e

0 2 * * * ~/scripts/mongodb_backup.sh

恢复备份数据

使用mongo提供的mongorestore工具将数据重新导入到数据库:

mongorestore -h localhost --authenticationDatabase admin -u 账号 -p 密码 -d 数据库名称 备份数据目录

其他

crontab定时任务没有执行

原因1:虚拟机时区问题

解决方式1(修改系统时区):
sudo cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
service cron restart

解决方式2(修改 Contab 时区 - 未试过):
sudo vim /etc/crontab
添加变量 CRON_TZ=Asia/Shanghai
service cron restart

mongodump 命令找不到

需安装mongo工具包:

apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4 && \
    echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/4.0 multiverse" | tee /etc/apt/sources.list.d/mongodb-org-4.0.list && \
    apt-get update && apt-get install -y mongodb-org-tools
最后更新 2022-01-04
评论 ( 0 )
OωO
隐私评论