数据库备份脚本单库备份和单表备份

     

目录

      1.全库备份

      2.数据库中的指定部分表进行备份

      3.备份指定库以及指定库中的指定部分表。


      近期因为mysql数据库数据量增加的比较快,使用的阿里云的主机,内网远程备份,在备份过程中耗用了大量的带宽,导致用户在登陆的时候出现短暂登陆不上的情况,以前的数据库备份脚本是整库备份,备份了日志表等一些相对不重要的表,无形中增加了备份的时间以及带宽,故花了点时间将脚本改了一下。

     1.全库备份

     以前的脚本-----按库进行全备

  backup.sh

#!/bin/bash
MYUSER=root
MYPASS=123456
MYLOGIN="mysql -u$MYUSER -p$MYPASS"
MYDUMP="mysqldump -u$MYUSER -p$MYPASS -B"
#DATABASE="$($MYLOGIN -e "show databases;"|egrep -vi "Data|_schema|mysql")"
#for dbname in $DATABASE
#do

MYDIR=/backup/$dbname
[ ! -d $MYDIR ] && mkdir -p $MYDIR
/bin/nice -n 19 $MYDUMP $dbname|gzip >$MYDIR/${dbname}_$(date +%F).sql.gz
done
find /backup/ -name "*.gz" -mtime +7 -exec rm -rf {} \;

     更改后的表 

     2.数据库中的指定部分表进行备份

     tables.txt,格式为库名.表名字

    ·在测试中文本在windows编辑器中编辑好了,上传到linux环境,运行脚本的时候,会导致有些乱码,可以在linux环境用vim打开,复制文本,最好不要直接上传到linux环境。

   tables.txt

ApolloPortalDB.App
ApolloPortalDB.Consumer
ApolloPortalDB.Role
ApolloPortalDB.Users

ApolloConfigDB.Cluster
ApolloConfigDB.Item
ApolloConfigDB.ServerConfig

  这样有一点就是比较繁琐,如果mysql中含有多个数据库,库里面有许多表都需要备份,需要将所有表都添加到这个文本文件

   脚本mysql-backup-singletable.sh 

#!/bin/bash
## backup some tables on some databases;
MYUSER=root
MYPASS=root
HOST="192.168.0.248"
MYDUMP="mysqldump -u$MYUSER -p$MYPASS -h$HOST "
TABLES_TXT=/backup/tables.txt
echo "`date +'%Y-%m-%d %H:%M:%S'` begin to backup databases------------------------------------------------------- "
for line in `cat $TABLES_TXT`
do
    #echo $line 
    #TableName=$line
    DbName=`echo $line | awk -F '.' '{print $1}'`
    #TableName=`echo $line | awk -F '.' '{print $1" "$2}'`
    TableName=`echo $line | awk -F '.' '{print $2}'`
    MYDIR=/backup/$DbName
    echo "`date +'%Y-%m-%d %H:%M:%S'` begin to backup table $line-------------- "
    [ ! -d $MYDIR ] && mkdir -p $MYDIR
    /bin/nice -n 19 $MYDUMP $DbName  $TableName|gzip >$MYDIR/${line}_$(date +%F).sql.gz
   echo "`date +'%Y-%m-%d %H:%M:%S'` end backup table $line------------------  "
done
echo "`date +'%Y-%m-%d %H:%M:%S'` end backupdatabases--------------------------------------------------------------"
find /backup/ -name "*.gz" -mtime +7 -exec rm -rf {} \;

该脚本也比较简单,就是对文本中的数据进行解析作为变量传入到备份语句中。

执行语句,会将脚本信息重定向到自定义的日志中。

sh /backup/mysql-backup-singletable.sh > /backup/$(date +%F).log 2>&1

注意:不能将此条语句直接放到定时任务中,定时任务不能识别此条语句,可以将这条语句放入脚本中,在定时任务中执行脚本就好了,参考下面例子。

3.备份指定库以及指定库中的指定部分表。

上面的两个脚本可以结合在一起使用。

只需要将库备份脚本中过滤掉相关库,然后在表备份脚本中添加上相关库的相关表即可,实现自由组合。

例如

过滤掉含这些关键字的库,然后将这些苦衷需要备份的表以库名.表名的形式添加到tables.txt文本中集合。

创建mysql_cron.sh

#!/bin/bash
###go running scripts
sh /backup/backup.sh && sh /backup/mysql-backup-singletable.sh > /backup/$(date +%F).log 2>&1

添加定时任务,晚上一点钟执行

* 1 * * * sh /backup/mysql_cron.sh 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值