前段时间,我集体的服务器数据库莫名其妙就被删了,得悉状况的我泪流满面。
起初我搜了很多对于复原数据库的材料,然而根本都是依赖备份去复原的,而身为小白的我却没有定时备份我的数据库。
幸好我的数据库外面的数据还不算多,就打算从头开始。
通过这次疼痛的教训,过后我第一件事就是给我的服务器上一个定时备份的脚本,毕竟不能再同一个中央摔两次嘛。
顺便写个博客记录一下,以防当前还须要用到。
创立备份目录
# 长期备份文件夹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 <备份文件门路>