一、使用场景

公司数据库备份,适用于mysql5.6、mysql5.7

二、代码解析

  • 获取到数据库列表
    #获取数据库名
    dbname=`mysql -u{dbuser} -p{dbpasswd} -e "show databases;" |egrep -v "Database|sys|information_schema|mysql|performance_schema"`
    
  • 备份数据库
    mysqldump -u{dbuser} -p{dbpasswd} -F -B db --master-data={1,2} --single-transaction |gzip>{logpath}/{db}{backtime}.sql.gz 2>> ${logpath}/mysqllog.log
    
  • 删除历史备份
    find $datapath -name "*.gz" -type f -mtime +15 -exec rm -rf {} \; > /dev/null 2>&1
    

三、代码

#!/bin/bash
#功能:数据库备份
#yousong.xiang
#v1.0.2
. /etc/profile

#数据库用户名
##GRANT SELECT, RELOAD, SUPER, LOCK TABLES ON *.* TO 'mysqldumper'@'localhost' identified by 're8Z3db57dltINJdWF5e&2fMu';
##flush privileges ;
dbuser='mysqldumper'
#数据库用密码
dbpasswd='123456'
#备份时间
backtime=`date '+%Y%m%d%H%M%S'`
t_time=`date '+%Y-%m-%d %H:%M:%S'`

#日志备份路径
logpath='/data/mysqlbakup'
#数据备份路径
datapath='/data/mysqlbakup'

if [ ! -d {datapath} ];then  mkdir{datapath} -p
fi

#日志记录头部
echo "备份时间为{t_time},备份数据库表{dbname} 开始" >> {logpath}/log.log

#获取数据库名
dbname=`mysql -u{dbuser} -p{dbpasswd} -e "show databases;" |egrep -v "Database|sys|information_schema|mysql|performance_schema"`

#正式备份数据库
for db indbname; do
  mysqldump -u{dbuser} -p{dbpasswd} -F -B db --master-data={1,2} --single-transaction |gzip>{logpath}/{db}{backtime}.sql.gz 2>> {logpath}/mysqllog.log
  #备份成功以下操作
  if [ "?" == 0 ];then
    cd datapath

    #删除15天前备份,也就是只保存7天内的备份
    finddatapath -name "*.gz" -type f -mtime +15 -exec rm -rf {} \; > /dev/null 2>&1
    echo "{t_time} 数据库{db} 备份成功!!" >> {logpath}/mysqllog.log
  else
    #备份失败则进行以下操作
    echo "{t_time} 数据库 {db} 备份失败!!" >>{logpath}/mysqllog.log
  fi
done
最后修改日期: 2023年12月13日

作者

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。