前段时间,我个人的服务器数据库莫名其妙就被删了,得知情况的我泪流满面。
后来我搜了很多关于恢复数据库的资料,但是基本都是依赖备份去恢复的,而身为小白的我却没有定时备份我的数据库。
幸亏我的数据库里面的数据还不算多,就打算从头开始。
经过这次疼痛的教训,当时我第一件事就是给我的服务器上一个定时备份的脚本,毕竟不能再同一个地方摔两次嘛。
顺便写个博客记录一下,以防以后还需要用到。
创建备份目录
# 临时备份文件夹
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 <备份文件路径>
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。