Skip to content

Instantly share code, notes, and snippets.

@lzl
Last active July 1, 2021 19:41
Show Gist options
  • Save lzl/324548f41fb3e55671629287170c03ea to your computer and use it in GitHub Desktop.
Save lzl/324548f41fb3e55671629287170c03ea to your computer and use it in GitHub Desktop.
服务器每日自动备份 MongoDB 数据库的配置方法

第一步,创建一个存放备份的文件夹:

比如 mkdir /alidata/backup

第二步,新建一个自动备份的脚本:

#!/bin/sh
NAME='mxlzb' # 手动修改为待备份项目的数据库名
DATE=`date +%Y%m%d%H%M%S`
DEST='/alidata/backup' # 手动修改为刚刚创建的文件夹
mkdir -p $DEST
cd $DEST
mongodump -d $NAME -o $DEST
tar -zcvf ${NAME}${DATE}.tar.gz ${NAME}
rm -Rf $NAME

我将其保存为 /alidata/scripts/db_backup.sh

第三步,修改定时任务:

sudo crontab -e 进入编辑器后加上下面这句

0 6,18 * * * /alidata/scripts/db_backup.sh >> /alidata/backup/backup.log 2>&1

保存退出,今后服务器会在每天早上六点和晚上六点各备份一次数据库。

更进一步,你可以在电脑上创建一个脚本,每天手动运行一次,增量同步服务器上的备份文件。

touch backup.sh && vi backup.sh

#!/bin/sh
SERVER_USER='root' # 修改为服务器用户名
SERVER_IP='127.0.0.1' # 修改为服务器 IP 地址
SERVER_PATH='/alidata/backup' # 修改为服务器上存放备份的目录
rsync -avz -e ssh ${SERVER_USER}@${SERVER_IP}:${SERVER_PATH} ~/downloads

sh backup.sh

@lzl
Copy link
Author

lzl commented Dec 7, 2016

@romejiang
Copy link

不错,好用。补充几个 shell 细节。

tar打包是尽量使用相对路径。
打包完成后,清理备份目录

#!/bin/sh
NAME='mxlzb' # 手动修改为待备份项目的数据库名
DATE=`date +%Y%m%d%H%M%S`
DEST='/alidata/backup' # 手动修改为刚刚创建的文件夹
mkdir -p $DEST
cd $DEST
mongodump -d $NAME -o $DEST
tar -zcvf ${NAME}${DATE}.tar.gz ${NAME}
rm -Rf $NAME

crontab 中管道用 >> 可以记录下所有的日志,> 只记录最后一条日志。

0 6,18 * * * /alidata/scripts/db_backup.sh >> /alidata/backup/backup.log 2>&1

@lzl
Copy link
Author

lzl commented Dec 28, 2016

补充进去了。并增加了一个本地与服务器之间的增量同步方法,自己电脑也存一份,更保险了。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment