在阿里云服务器上配置自动备份 MongoDB 数据库的操作

657 阅读2分钟

我是吃了没有提前备份数据的亏,因为一次误操作,删除了所有数据。阿里云的ECS服务器控制台有定时与自动化任务-自动备份数据服务,不免费。那么就自己动手来吧。

如果你是考虑数据的安全性,那么在备份数据后,还需要上传到OSS,或其他可以存储的地方。

一、安装 mongodb-org-tools

这个软件包包含了 MongoDB 备份所需的命令,如 mongodumpmongorestore

sudo yum install mongodb-org-tools

如果遇到在 CentOS 上,无法找到 mongodb-org-tools 软件包的问题

No match for argument: mongodb-org-tools Error: Unable to find a match: mongodb-org-tools
  1. 创建一个新的仓库文件 /etc/yum.repos.d/mongodb-org.repo,并将以下内容粘贴到文件中:
[mongodb-org-4.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.4.asc

我使用的是 MongoDB 4.4.6 版本。如果你需要其他版本,请在 baseurlgpgkey 中替换相应的版本号。

  1. 清除缓存并安装 mongodb-org-tools
sudo yum clean all
sudo yum install mongodb-org-tools

二、创建一个备份脚本 backup_mongodb.sh

  1. 输入以下命令,在 /usr/local/bin 目录下创建备份脚本并使用 nano 编辑器打开:
sudo nano /usr/local/bin/backup_mongodb.sh
  1. 将以下内容粘贴到打开的编辑器中(请替换 <MONGODB_USER><MONGODB_PASSWORD><MONGODB_DATABASE><BACKUP_DIR> 为实际值):
#!/bin/bash

# MongoDB 凭证
MONGODB_USER="<MONGODB_USER>"
MONGODB_PASSWORD="<MONGODB_PASSWORD>"
MONGODB_DATABASE="<MONGODB_DATABASE>"

# Backup 目录(我的目录:/var/backups/mongodb,请根据你的实际情况设置)
BACKUP_DIR="<BACKUP_DIR>"

# 如果不存在,创建备份目录
mkdir -p ${BACKUP_DIR}

# 获取当前日期和时间
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")

# Backup 文件名
BACKUP_FILE="${BACKUP_DIR}/mongodb_backup_${TIMESTAMP}.gz"

# 运行mongodump命令来备份MongoDB
mongodump --username=${MONGODB_USER} --password=${MONGODB_PASSWORD} --db=${MONGODB_DATABASE} --gzip --archive=${BACKUP_FILE}

echo "MongoDB backup created at ${BACKUP_FILE}"

# 删除超过7天的备份文件
find ${BACKUP_DIR} -type f -mtime +7 -name "mongodb_backup_*.gz" -exec rm {} \; 

echo "Deleted backups older than 7 days"
  1. 保存文件并退出编辑器。在 nano 编辑器中,按 Ctrl + X(^X),然后按 Y,然后按 Enter
  2. 为脚本设置可执行权限:
sudo chmod +x /usr/local/bin/backup_mongodb.sh

现在,你可以在任何地方通过运行 backup_mongodb.sh 命令来手动执行该备份脚本。

三、配置定时任务

如果你需要定期自动备份,使用 crontab 配置定时任务以定期运行备份脚本。

  1. 运行以下命令:
crontab -e
  1. 在打开的编辑器中,添加以下行以每天凌晨 1 点运行备份脚本(确保替换 /path/to/backup_mongodb.sh 为实际的脚本路径):
# 分 小时 日 月 星期几 
#每天凌晨1点自动执行备份脚本
0 1 * * * /path/to/backup_mongodb.sh

#如果你只需要每周执行一次自动备份
0 1 * * 0 /path/to/backup_mongodb.sh
#代表每周日凌晨1点执行

保存并退出编辑器。现在,你的 MongoDB 数据库将每天凌晨 1 点自动备份,并且只保留最近 7 天的备份数据。

以上,就完成了在阿里云服务器上配置自动备份 MongoDB 数据库的操作。