脚本实现mysql数据库快速备份

底层核心还是使用的mysqldump备份方式。
支持排查链接串种的部分数据库
支持排除数据库中的指定表
使用:
1.修改基础数据库信息
2.sh执行即可

#!/bin/bash
#数据库连接串信息
User="root"
Password="root"
Host="127.0.0.1"
Dir="/data/dbbak/mysql"
EmailTo="xxxx@google.com"

### 获取主机名、IP、日期和随机数 
local_name=$(hostname --fqdn) 
local_ip=$(/sbin/ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|grep -v 172|awk '{print $2}'|tr -d "addr:" |head -n 1)  
date=$(date +%Y%m%d-%H%M) 
fen=$(($RANDOM%59+1)) 

# 邮件发送函数-需要自行实现
function sendMail() {  
    # 构造邮件标题和内容,这里简化了邮件发送逻辑  
    title="状态: $4 数据库备份: 时间: $1 IP: $2 主机: $3"  
    echo "正在发送邮件,主题: ${title} - OA日常备份"  
    # 注意:这里使用mail命令发送邮件,需要确保mail命令已配置好  
    echo "备份成功" | mail -s "${title} - OA日常备份" $EmailTo
    echo "邮件发送成功。"
}  

# 输出脚本开始时间  
echo "数据库备份脚本开始执行于 $(date)"  
echo 
# 忽略数据库中的某些表
IGNORE_TABLE="--ignore-table=keeprisk_oa.salary_adjust --ignore-table=keeprisk_oa.salary_basic --ignore-table=keeprisk_oa.salary_report --ignore-table=keeprisk_oa.salary_subsidy --ignore-table=keeprisk_oa.wt_salary_input --ignore-table=keeprisk_oa.wt_salary_input_year_bonus"

# 创建目录  
mkdir -p $Dir
echo "备份目录 $Dir 已创建(或已存在)。"  
echo
#链接中需要排除掉的数据库,通过空格区分
EXCLUDE_DBS="information_schema performance_schema mysql sys zabbix street keeprisk_base test deqing tfyun pms-system keepriskframework"  

# 遍历数据库并备份。注意这里排除了部分数据库。
for i in $(mysql -h$Host -P3306 -u$User -p$Password -e 'SHOW DATABASES' | grep -vE "Database|${EXCLUDE_DBS}") 
do
    echo 
    # 创建数据库备份目录  
    if [ ! -d "$Dir/$i" ]; then  
      mkdir -p "$Dir/$i"  
      echo "为数据库 $i 创建了目录 $Dir/$i。"
      echo 
    fi 

	# 备份数据库,忽略特定表  
    echo "正在备份数据库 $i..."  
    echo 
    mysqldump -u$User -p$Password -h$Host -P3306 --single-transaction --quick --events --routines --databases $i $IGNORE_TABLE | gzip > "$Dir/$i/$i-$date.gz"  
    if [ $? -eq 0 ]; then  
        echo "数据库 $i 备份成功,备份文件位于 $Dir/$i/$i-$date.gz"  
        echo 
    else  
        echo "数据库 $i 备份失败!"  
        echo 
    fi  

    # 删除7天前的备份文件  
    echo "正在删除数据库 $i 超过7天的旧备份文件..."  
    echo 
    find "$Dir/$i" -type f -name '*.gz' -mtime +7 -delete  
    echo "旧备份文件已删除。" 
    echo 

done
  
    # 发送邮件(如果需要)-----TODO 邮件发送这里还存在一些问题
    #sendMail "$date" "$local_ip" "$local_name" "Backup Success" 

    # 输出脚本完成时间  
    echo "数据库备份脚本执行完成于 $(date)"  

exit 0

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CloverAn

如果文章对你有帮助,感谢支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值