MySQL全量和增量备份脚本

备份前先检查MySQL主配置文件是否有如下两个参数:
vim /etc/my.cnf
log-bin=mysql-bin    
binlog_format=mixed        //binlog日志格式,mysql默认采用statement,建议使用mixed
#MIXED说明:对于执行的SQL语句中包含now()这样的时间函数,会在日志中产生对应的unix_timestamp()*1000的时间字符串,slave在完成同步时,取用的是sqlEvent发生的时间来保证数据的准确性。另外对于一些功能性函数slave能完成相应的数据同步,而对于上面指定的一些类似于UDF函数,导致Slave无法知晓的情况,则会采用ROW格式存储这些Binlog,以保证产生的Binlog可以供Slave完成数据同步

如果新添加要记得重启MySQL: /etc/init.d/mysqld restart

增量备份脚本:

#!/bin/bash
#脚本中文件路径需要自行创建 
BakDir=/data/backup/binlog/        #备份binlog目录
BinDir=/data/mysql        #实际MySQL数据目录
 
LogFile=/data/backup/binlog/bak.log
BinFile=/data/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

增量备份完成之后可以去备份目录检查:
[root@master ~]# ll /data/backup/binlog/
total 24
-rw-r--r-- 1 root root  345 Jul 22 16:25 bak.log
-rw-r----- 1 root root  143 Jul 22 16:22 mysql-bin.000001
-rw-r----- 1 root root  211 Jul 22 16:22 mysql-bin.000002
-rw-r----- 1 root root 1522 Jul 22 16:22 mysql-bin.000003
-rw-r----- 1 root root  309 Jul 22 16:22 mysql-bin.000004
-rw-r----- 1 root root  512 Jul 22 16:25 mysql-bin.000005

全量备份脚本:

#!/bin/bash
#use mysqldump to fully backup mysql data
#脚本中文件路径需要自行创建 
BakDir=/data/backup        #备份目录
LogFile=/data/backup/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

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

结果如下:
[root@master ~]# ./mysql-fullbak.sh 
Warning: Using a password on the command line interface can be insecure.
20200722.sql
[root@master ~]# ll /data/backup/
total 160
-rw-r--r-- 1 root root 156118 Jul 22 16:39 20200722.sql.tgz
-rw-r--r-- 1 root root     94 Jul 22 16:39 bak.log
drwxr-xr-x 2 root root    141 Jul 22 16:25 binlog

[root@master backup]# ls
20200728.sql.tgz  bak.log
[root@master backup]# cat bak.log 
开始:2020年07月28日 19:02:59 结束:2020年07月28日 19:02:59 20200728.sql.tgz succ

定时任务:

crontab -e

0 2 * * *       /bin/bash /root/mysql-zlbak.sh >/dev/null 2>&1
0 4 * * 1       /bin/bash /root/mysql-fullbak.sh >/dev/null 2>&1

#每天的凌晨2点增量备份一次
#每周一的凌晨4点全量备份一次
#>/dev/null 2>&1:丢弃所有输出
#2>&1 的意思就是将标准错误重定向到标准输出。这里标准输出已经重定向到了 /dev/null。那么标准错误也会输出到/dev/null

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 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
发出的红包

打赏作者

小数苗小数苗

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值