自动备份参考一、三步骤即可,二步骤实现备份成功的同时推送消息到钉钉群(可省略)
一、shell脚本实现数据库自动备份内容如下(我将脚本名称命名为back.sh)(可复制以下脚本,个别参数请根据实际项目修改):
#!/bin/bash
#先指定备份路径
BACKUP=/root/backup
#显示当前时间
DATATIME=$(date "+%Y-%m-%d_%H%M%S")
#运行数据库的主机IP地址(执行备份的主机和运行数据库的主机可能不是同一台,如果同一台填自己IP即可)
HOST=172.19.1.1
#登录数据库的用户名
DB_USER=xss
#数据库该用户名的密码
DB_PW=pwd@123
#备份的数据库名(如需备份所有库,可参考下面步骤直接指定库名为 all)
DATABASE=DT
#开始备份数据库提示语,仅提示作用,手动执行时方便判断到了哪一步
echo "开始备份数据库${DATABASE}"
#创建备份目录(如果指定的目录不存在,则新建目录,!-d不存在则成立,&&表示左端成立则执行右端动作)
[ ! -d ${BACKUP}/${DATATIME} ] && mkdir -p "${BACKUP}/${DATATIME}"
#备份数据库(这里我按项目实际情况指定all-databases,备份所有库)
mysqldump -u${DB_USER} -p${DB_PW} --host=${HOST} --all-databases | gzip > ${BACKUP}/${DATATIME}/$DATATIME.sql.gz
#将文件压缩成 tar.gz
cd ${BACKUP}
tar -zcvf $DATATIME.tar.gz ${DATATIME}
#删除已备份的目录,由于压缩了文件,压缩前原有的可以删了
rm -rf ${BACKUP}/${DATATIME}
#删除14天前的压缩文件(按实际需求,我这里删除14天前的备份文件)
find ${BACKUP} -atime +14 -name "*.tar.gz" -exec rm -rf {} \;
#结束备份数据库提示语,仅提示作用(!e如果该文件存在,则成立,||左端成立,则执行右端,建议加上这个条件,否则即使上面的数据库备份不成功,下面仍然会提示备份成功,这样就没法有效判断)
[ ! -e ${DATATIME}.tar.gz ] || echo "数据库${DATABASE}备份成功!"
#推送到钉钉(这个步骤可省略,我根据项目需求想通过钉钉消息,就知道是否备份数据库。!-e数据库文件存在,则执行右端的python脚本,推送消息到钉钉群,钉钉脚本需要填写2个参数,1为用户名(为了不@我,这里填1,也可填自己实际的钉钉号,这样钉钉机器人发消息就会@我), "DTcenter数据库${DATATIME} 备份成功!"为指定钉钉机器人发送的信息)
[ ! -e ${DATATIME}.tar.gz ] || ./dingding.py 1 test "DTcenter数据库${DATATIME} 备份成功!"
二、钉钉推送消息脚本(不需要推消息到钉钉群的话,二步骤可省略)
1.准备工作:
钉钉创建群-创建群机器人(类型选择自定义)-生成的webhook地址保存-安全设置(需要设置关键字,关键字在推送消息之内,比如 数据库 三个字就在上面的推送消息之内;IP地址段:执行备份数据库的这台主机需能够访问互联网,这台主机的出口IP,就是安全设置的IP,相当于允许这个IP推送消息过来)
2.搭建zabbix(略)
3.python脚本内容:(只需修改webhook,脚本名称为dingding.py,上面那个脚本调用到了这个脚本)
#!/usr/bin/python
#-*- coding: utf-8 -*-
#zabbix钉钉报警
import requests,json,sys,os,datetime
webhook="https://"
#说明:这里改为自己创建的机器人的webhook的值
user=sys.argv[1]
#发给钉钉群中哪个用户
text=sys.argv[3]
#发送的报警内容
data={
"msgtype": "text",
"text": {
"content": text
},
"at": {
"atMobiles": [
user
],
"isAtAll": False
}
}
#钉钉API固定数据格式
headers = {'Content-Type': 'application/json'}
x=requests.post(url=webhook,data=json.dumps(data),headers=headers)
if os.path.exists("/var/log/zabbix/dingding.log"):
f=open("/var/log/zabbix/dingding.log","a+")
else:
f=open("/var/log/zabbix/dingding.log","w+")
f.write("\n"+"--"*30)
if x.json()["errcode"] == 0:
f.write("\n"+str(datetime.datetime.now())+" "+str(user)+" "+"发送成功"+"\n"+str(text))
f.close()
else:
f.write("\n"+str(datetime.datetime.now()) + " " + str(user) + " " + "发送失败" + "\n" + str(text))
f.close()
#将发送的告警信息写入本地日志/var/log/zabbix/dingding.log中
三、自动执行
#编辑定时任务
#在备份数据库的主机里
crontab -e
尾部追加一行即可,图中我还没加,下面是每天早上8点,执行自己的脚本,脚本需指定绝对路径
00 08 * * * /root/backup.sh
#第一个值为分钟,第二个值为时,三个值为日,四为月,五为周(设置为*/1 * * * * 即每分钟执行一次,以便前期测试)