定时备份
# 登陆需要定时备份数据库的服务器,编写执行文件
**1.创建备份数据库的可执行文件**
---
touch /etc/mongo_back.sh
ENTER "i" begin edit backups file.
```
#!/bin/bash
#mongo bin目录
sourcePath='/home/mongo/mongodb/bin'
#备份文件目录
targetPath='/root/mongobak'
#文件夹名称
nowTime=$(date +%Y%m%d)
start()
{
${sourcePath}/mongodump -u BackupAccount -p password -h 182.92.239.193:23717[1] --authenticationDatabase admin --oplog --out ${targetPath}/${nowTime}
}
execute()
{
start
if[ $? -eq 0 ]
then
echo "back successfully!"
else
echo "back failure!"
fi
}
#判断该路径下的日期文件夹是否存在,不存在则创建
if [ ! -d "${targetPath}/${nowTime}" ]
then
mkdir ${targetPath}/${nowTime}
fi
execute
echo "==================== back end ${nowTime} ===================="
```
press "ESC" button, input":wq", press "ENTER",
Exit edit and save, backups file's executable file.
***
**2.创建删除数据库备份文件的可执行文件**
---
touch /etc/mongo_del.sh
ENTER "i" begin edit delete backups file.
```
#!/bin/bash
#文件路径
targetPath="/root/mongobak"
#文件夹名称
nowTime=$(date -d '-7days' +%Y%m%d)[2]
if[ -d "${targetPath}/${nowTime}" ]
then
rm -rf "${targetPath}/${nowTime}"
echo "====================${targetPath}/${nowTime}/==================== DELETE DOWN !!!"
fi
echo "====================${nowTime}===================="
```
press "ESC", input ":wq", press "ENTER",
Exit edit and save, delete backups file's executable file.
***
**3.创建日志文档目录**
---
mkdir /root/mongobaklog
touch /root/mongobaklog/back.log
touch /root/mongobaklog/del.log
***
**4.将任务添加到定时执行文件中**
---
`crontab -e`或`vim /etc/crontab` 编辑定时任务
```
M H D M W[4]
0 1 * * * /etc/mongo_back.sh >> /root/mongobaklog/bak.log 2>&1 &[5]
0 3 * * * /etc/mongo_del.sh >> /root/mongobaklog/del.log 2>&1 &
```
press "ESC", input ":wq", press "ENTER"
Exit edit and save, timed task executable file.
`/bin/systemctl reload crond.service` 重新载入配置
`/bin/systemctl restart crond.service` 重启crontab,修改完定时任务文件后,记得重启。=> CentOS 7
service crond restart => Linux
***
**5.crontab相关命令**
--
-e,编辑定时任务
-l,此命令会列出所有定时任务。
-r,删除定时任务,这个会将crontab里面的任务全删了,想好了再用。删除单条任务,用-e编辑。
***
**注:**
[1]:当服务器出现宕机或其他情况,导致主节点更换时,要及时更换主节点IP。保证备份数据一直在从节点。
[2]:$(date -d '-7days' +%Y%m%d) => -7days = 7天前,删除7天前的备份文件。若需要修改备份周期,修改此数即可。
[3]:语句中“[]”需要在紧挨中括号的内测,各添加1个空格,否则会报错,虽然不影响执行。但是以为万一。
[4]:M:分钟 取值范围 0-59,H:小时 取值范围0-23,D:天/几号 取值范围1-31,M:月份 取值范围1-12,W:星期几 取值范围 0-7(0或7都是星期天)
星号(\*):代表所有可能的值,例如month字段如果是星号,则表示在满足其他字段的制约条件后每月都执行该命令操作。
逗号(,):可以用逗号隔开的值指定一个列表范围,例如:“1,2,5,7,8,9”
中杠(-):可以用整数之间的中杠表示一个整数范围,例如:“2-6”,表示“2,3,4,5,6”
正斜杠(/)可以用正斜杠指定时间的间隔频率,例如:“*/10”,如果用在minute字段,表示每10分钟执行1次。
[5]:语句 ">> /root/mongobaklog/bak.log 2>&1 &"
">> path" => 双箭头后的路径为输出日志路径。
">>" => 双箭头表示追加。
">" => 单箭头表示覆盖。
"1" => 代表标准输出。
"2" => 表示错误输出。
"2>&1" => 表示将错误输出重定向到1中。这里使用单箭头,是因为若使用双箭头,则会导致错误,任务不执行。错误输出是否会将标准输出覆盖,未知。此小段语句中不能有空格。否则任务不执行。
"&" => 在最后表示在后台运行,数字1前面的符合,为转义符,不加,1会被解释为数字1.
"/dev/null" => 是一个空设备,也成为位桶(bit bucket),任何写入它的输出都将被抛弃,如果不想让消息以标准输出显示或写入文件,那可可以将消息定向到位桶。"/root/mongobaklog/bak.log" 替换为 "/dev/null"即可。