shell脚本实现数据库自动备份

自动备份参考一、三步骤即可,二步骤实现备份成功的同时推送消息到钉钉群(可省略)

一、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 * * * * 即每分钟执行一次,以便前期测试)

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值