mysql全量和增量备份脚本

全量:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@master leo] # cat DBfullBak.sh 
#!/bin/bash
#use mysqldump to fully backup mysql data
 
BakDir= /root/leo/full
LogFile= /root/leo/full/bak .log
 
Date=` date  +%Y%m%d`
Begin=` date  + "%Y年%m月%d日 %H:%M:%S" `
cd  $BakDir
DumpFile=$Date.sql
GZDumpFile=$Date.sql.tgz
mysqldump -uroot -p123456 --all-databases --lock-all-tables --routines --triggers --events --master-data=2 --flush-logs > $DumpFile
tar  zcvf $GZDumpFile $DumpFile
rm  $DumpFile
Last=` date  + "%Y年%m月%d日 %H:%M:%S" `
echo  开始:$Begin 结束:$Last $GZDumpFile succ >> $LogFile

参数注释:

1
2
3
4
5
6
7
--all-databases    #备份所有库
--lock-all-tables  #为所有表加读锁
--routinge         #存储过程与函数
--triggers         #触发器
--events           #记录事件
--master-data=2    #在备份文件中记录当前二进制日志的位置,并且为注释的,1是不注释掉在主从复制中才有意义
--flush-logs       #日志滚动一次

结果如下:

1
2
3
4
5
6
[root@master full] # ls
20140728.sql.tgz  bak.log
[root@master full] # cat bak.log 
开始:2014年07月28日 19:02:59 结束:2014年07月28日 19:02:59 20140728.sql.tgz succ
开始:2014年07月28日 19:12:01 结束:2014年07月28日 19:12:01 20140728.sql.tgz succ
[root@master full] #

增量备份:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
[root@master leo] # cat DBDailyBak.sh 
#!/bin/bash
 
BakDir= /root/leo/binlog/
BinDir= /var/lib/mysql
 
LogFile= /root/leo/binlog/bak .log
BinFile= /var/lib/mysql/mysql-bin .index
 
mysqladmin -uroot -p123456 flush-logs
 
Counter=` wc  -l $BinFile| awk  '{print $1}' `
NextNum=0
 
for  file  in  ` cat  $BinFile`
do 
     base=` basename  $ file `
     NextNum=` expr  $NextNum + 1`
     if  [ $NextNum - eq  $Counter ]
     then
         echo  $base skip! >> $LogFile
     else
         dest=$BakDir/$base
         if ( test  -e $dest)
         then
             echo  $base exist! >> $LogFile
         else
             cp  $BinDir/$base $BakDir/
             echo  $base copying >> $LogFile
         fi
     fi
done
 
echo  ` date  + "%Y年%m月%d日 %H:%M:%S" ` $Next Bakup succ~ >> $LogFile

来源:http://lansgg.blog.51cto.com/5675165/1536870

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于MySQL数据库增量备份,可以使用以下脚本: ```bash #!/bin/bash # 定义变量 MYSQL_USER="root" # MySQL用户名 MYSQL_PASS="password" # MySQL密码 MYSQL_DB="database_name" # 要备份的数据库名称 BACKUP_DIR="/var/backups/mysql" # 备份文件存放目录 CURRENT_DATE=$(date +"%Y-%m-%d") # 当前日期 LAST_BACKUP=$(ls -1 $BACKUP_DIR | tail -1) # 获取最近一次备份的文件名 INCREMENTAL_BACKUP="$BACKUP_DIR/$CURRENT_DATE-$MYSQL_DB-incremental.sql" FULL_BACKUP="$BACKUP_DIR/$LAST_BACKUP" # 创建备份目录 if [ ! -d $BACKUP_DIR ]; then mkdir -p $BACKUP_DIR fi # 检查最近一次备份是否存在 if [ -z $LAST_BACKUP ]; then # 如果没有最近备份,则进行全量备份 mysqldump -u $MYSQL_USER -p$MYSQL_PASS $MYSQL_DB > $FULL_BACKUP else # 如果有最近备份,则进行增量备份 innobackupex --user=$MYSQL_USER --password=$MYSQL_PASS --incremental $INCREMENTAL_BACKUP --incremental-basedir=$FULL_BACKUP fi ``` 脚本的思路是先检查最近一次备份的文件名,如果不存在则进行全量备份,否则进行增量备份全量备份使用`mysqldump`命令,增量备份使用`innobackupex`命令。备份文件以日期和数据库名称为文件名,保存在指定的备份目录中。 需要注意的是,增量备份需要在全量备份的基础上进行,因此需要先进行一次全量备份,才能进行增量备份。同时,增量备份的文件名中包含了基于哪个全量备份进行的增量备份,因此需要保留全量备份的文件名。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值