乐趣区

关于linux:Linux-定时备份你的MongoDB数据库

前段时间,我集体的服务器数据库莫名其妙就被删了,得悉状况的我泪流满面。

起初我搜了很多对于复原数据库的材料,然而根本都是依赖备份去复原的,而身为小白的我却没有定时备份我的数据库。

幸好我的数据库外面的数据还不算多,就打算从头开始。

通过这次疼痛的教训,过后我第一件事就是给我的服务器上一个定时备份的脚本,毕竟不能再同一个中央摔两次嘛。

顺便写个博客记录一下,以防当前还须要用到。

创立备份目录

# 长期备份文件夹
mkdir -p /home/mongodb_bak/mongodb_bak_now
# 备份压缩包文件夹
mkdir -p /home/mongodb_bak/mongodb_bak_list

创立备份脚本

vim /home/crontab/MongoDB_bak.sh
#!/bin/sh
# dump 命令执行门路,依据 mongodb 装置门路而定
DUMP=/usr/bin/mongodump
# 长期备份门路
OUT_DIR=/home/backup/mongod_bak/mongod_bak_now
# 压缩后的备份寄存门路
TAR_DIR=/home/backup/mongod_bak/mongod_bak_list
# 以后零碎工夫
DATE=`date +%Y-%m-%d`
# 数据库账号
DB_USER=username
# 数据库明码
DB_PASS=password
# 代表删除 7 天前的备份,即只保留近 7 天的备份
DAYS=7
# 最终保留的数据库备份文件
TAR_BAK="mongod_bak_$DATE.tar.gz"

cd $OUT_DIR
rm -rf $OUT_DIR/*
mkdir -p $OUT_DIR/$DATE
$DUMP -h 127.0.0.1:27017 -u $DB_USER -p $DB_PASS --authenticationDatabase admin -o $OUT_DIR/$DATE
# 压缩格局为 .tar.gz 格局
tar -zcvf $TAR_DIR/$TAR_BAK $OUT_DIR/$DATE
# 删除 15 天前的备份文件
find $TAR_DIR/ -mtime +$DAYS -delete

exit

DB_USER 改为你的数据库账号,DB_PASS 改为你的数据库明码。

批改脚本权限

chmod +x /home/crontab/MongoDB_bak.sh

增加打算工作

vi /etc/crontab

增加一下内容:

# 每周六 18:30 进行备份
30 18 * * 6 root /home/crontab/MongoDB_bak.sh

第一个数值代表分钟,第二个代表小时,第三个代表日期,第四个代表月份,第五个代表星期。

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed

保留后脚本失效。

数据库复原

# 复原全副数据库
mongorestore -u < 数据库账号 > -p < 数据库明码 > --authenticationDatabase "admin" --noIndexRestore --dir < 备份文件夹门路 >
#复原单个数据库
mongorestore -u < 数据库账号 > -p < 数据库明码 > --authenticationDatabase "admin" --noIndexRestore -d < 数据库名 > --dir < 备份文件门路 >
退出移动版