mysql 集群备份脚本_MySQL备份脚本

✏️ 通过mysqldump备份数据库

通过计划任务备份数据库,保留指定天数的数据

#!/bin/bash

#Desc: 用于进行数据库备份,基于旧版优化

#Date: 2020-06-19

#By: yanjie.li

# 运行脚本前先创建一个备份用户,并授予权限 (建议创建一个专用的备份用户,尽量不要使用root用户)

# mysql> grant select,insert,lock tables,show view,trigger on *.* to back@localhost identified by "oodaeh7phoe1iboh7Jua";

# mysql> flush privileges;

back_user_name=root #备份账号

back_user_pass=oodaeh7phoe1iboh7Jua #备份账号密码

back_path=/data/mysql_backup #备份数据存放路径

back_date=`date +%F-%H` #备份日期

back_day=5 #备份保留的天数

# --------------------获取mysql中的数据库名--------------------

#这里默认没有备份系统默认自带库:information_schema、performance_schema、mysql、test库。

/usr/bin/mysql -u ${back_user_name} -p${back_user_pass} -e "show databases;" |grep -v Database |grep -v information_schema |grep -v performance_schema |grep -v "^mysql$" |grep -v "^test$" > /tmp/DBname

# --------------------数据库备份--mysqldump备份--------------------

function MysQLBack () {

#创建备份目录

if [ ! -d "${back_path}/${back_date}" ];then

mkdir -p ${back_path}/${back_date}

fi

echo "--------------------${back_date}--------------------" >> ${back_path}/mysql_back.log

#循环备份每个库

for db_name in `cat /tmp/DBname`; do

/usr/bin/mysqldump --routines --triggers -u ${back_user_name} -p${back_user_pass} ${db_name} > ${back_path}/${back_date}/${db_name}-${back_date}\.sql

if [ $? -eq 0 ];then

echo "$db_name Back OK!" >> ${back_path}/mysql_back.log

else

echo "$db_name Back ERROR!" >> ${back_path}/mysql_back.log

fi

done

echo "" >> ${back_path}/mysql_back.log

}

MysQLBack

# --------------------删除自定义保留天数之前的备份数据,并随机保留两份--------------------

find /data/mysql_backup/ -maxdepth 1 -type d -and -ctime +${back_day} > /tmp/alldirname #找出保留天数之前的数据

# 过滤出所有的数据备份目录 如:2020-06-12-06

for dir_name in `cat /tmp/alldirname`; do

if echo ${dir_name} |grep "[0-9]" >> /dev/null ; then

echo ${dir_name} >> /tmp/delfile

fi

done

# 随机保留两份

if [ ! -d "${back_path}/Oldest/" ];then mkdir -p ${back_path}/Oldest/ ; fi

if [ -f "/tmp/delfile" ]; then

for save in `cat /tmp/delfile |sort -R |head -n2`; do

if [ -d ${save} ]; then

cp -r ${save} ${back_path}/Oldest/

fi

done

# 删除自定义保留天数之前的备份数据

for del in `cat /tmp/delfile`; do

if [ -d ${del} ]; then

rm -rf ${del}

fi

done

fi

# 删除临时文件

rm -f /tmp/delfile && rm -f /tmp/alldirname && rm -f /tmp/DBname

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值