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

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页
实付 79.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值