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

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

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

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

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

创立备份目录

# 长期备份文件夹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_DIRrm -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 -deleteexit

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 <备份文件门路>