Linux 定时备份 MongoDB 数据到 Azure Blob
每日定时执行备份脚本,将 Mongo 的整个数据库进行打包压缩,然后将打包后的文件上传到 Azure Blob 中。
备份工具介绍
MongoDB 备份文件
通过 mongodump
命令将 Mongo 整个数据库导出 bson 格式的文件:
mongodump -h localhost --authenticationDatabase admin -u 账号 -p 密码 -d 数据库名 -o 输出目录
导出文件结构:
.
|_输出目录
|_数据库名
|_集合名.metadata.json
|_集合名.bson
MongoDB 备份(mongodump) 与 恢复(mongorestore) 工具使用文档:https://www.runoob.com/mongodb/mongodb-mongodump-mongorestore.html
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工具包:
https://docs.mongodb.com/database-tools/installation/installation-linux
https://www.mongodb.com/try/download/database-tools