当前位置: 首页 > 编程笔记 >

Mysql数据库增量备份的思路和方法

汲品
2023-03-14
本文向大家介绍Mysql数据库增量备份的思路和方法,包括了Mysql数据库增量备份的思路和方法的使用技巧和注意事项,需要的朋友参考一下

MySQL数据库增量备份,在这之前修改我们的数据库配置文件/etc/my.cnf开启bin-log日志html" target="_blank">功能即可。接下来是我参考了下网上的一些方法,自己写的,主要还是要能学到他的一些思路和方法。

#function:MYSQL增量备份
#version:1.0.0
#author:wangyanlin
#date:2017/08/02
#-----------------------------------------------------------------------------------------------
#!/bin/sh
export LANG=en_US.UTF-8
#设置时间
DATE=`date +%Y%m%d`
#设置信息
USER=root
PASSWORD=withub
#设置路径
cd /
/usr/bin/mkdir -p mysql_bak/daily 
/usr/bin/mkdir -p mysql_bak/logs
BakDir=/mysql_bak/daily
BinDir=/var/lib/mysql
LogFile=/mysql_bak/logs/Daily_$DATE.log
BinlogFile=/var/lib/mysql/mysql-bin.index
/usr/bin/mysqladmin -u$USER -p$PASSWORD flush-logs #刷新日志
Counter=`wc -l $BinlogFile | awk '{print $1}'`
NextNum=0
start_time=`date +'%Y-%m-%d %H:%M:%S'`
echo `date +"%Y年%m月%d日 %H:%M:%S"` $Next1 Bakup start! >> $LogFile
#这个for循环用于比对$Counter,$NextNum这两个值来确定文件是不是存在或最新的。
for file in `cat $BinlogFile`
do
  base=`basename $file`
  #basename用于截取mysql-bin.00000*文件名,去掉./mysql-bin.000005前面的./
  NextNum=`expr $NextNum + 1`
  if [ $NextNum -eq $Counter ]
  then
    echo $base skip! >> $LogFile
  else
    dest=$BakDir/$base
    if(test -e $dest)
    #test -e用于检测目标文件是否存在,存在就写exist!到$LogFile去。
    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"` $Next2 Bakup succ! >> $LogFile
end_time=`date +'%Y-%m-%d %H:%M:%S'`
start_seconds=$(date --date="$start_time" +%s);
end_seconds=$(date --date="$end_time" +%s);
echo "本次备份运行时间: "$((end_seconds-start_seconds))"s" >> $LogFile

添加计划任务:

                       crontab -e

                       00 03 * * * /root/MySQL_incrementbak.sh    #每天的凌晨3点开始增量备份日

logs日志打印出来的效果:

PS:下面看下mysql全量和增量备份脚本

全量:

[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

参数注释:

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

结果如下:

[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]#

增量备份:

[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

总结

以上所述是小编给大家介绍的Mysql数据库增量备份的思路和方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对小牛知识库网站的支持!

 类似资料:
  • 主要内容:备份一个数据库,备份多个数据库,备份所有数据库数据库的主要作用就是对数据进行保存和维护,所以备份数据是数据库管理中最常用的操作。为了防止数据库意外崩溃或硬件损伤而导致的数据丢失,数据库系统提供了备份和恢复策略。 保证数据安全的最重要的一个措施就是定期的对数据库进行备份。这样即使发生了意外,也会把损失降到最低。 数据库备份是指通过导出数据或者复制表文件的方式来制作数据库的副本。当数据库出现故障或遭到破坏时,将备份的数据库加载到系统,从而使数据库

  • 本文向大家介绍MySql数据库备份的几种方式,包括了MySql数据库备份的几种方式的使用技巧和注意事项,需要的朋友参考一下 mysqldump工具备份 备份整个数据库 备份数据库中的某个表 备份多个数据库 备份系统中所有数据库 直接复制整个数据库目录(对于InnoDB存储引擎不适用)备份 windowns: installpath/mysql/data linux: /var/lib/mysql

  • 本文向大家介绍MySQL数据库定时备份的实现方法,包括了MySQL数据库定时备份的实现方法的使用技巧和注意事项,需要的朋友参考一下 1. 创建shell脚本 2. 给shell脚本添加执行权限 3. 给脚本添加定时任务 crontab文件的说明:  用户创建的crontab文件中,每一行都代表一项定时任务,每行的每个字段代表一项设置,它的格式每行共分为六个字段,前五段是时间设定字段,第六段是要执行

  • 问题内容: 我在MySql中有一个很大的数据库,我需要每天左右对其进行备份。 我需要能够从任何计算机上进行备份,因此我考虑制作一个php脚本来做到这一点,并将此php脚本置于联机状态(具有密码保护和授权等功能,因此只有我可以访问它)。 但是,我不知道如何正确完成? 我应该使用哪些命令,并且可以更改备份的设置(例如)? 我将不胜感激… 另外,如果这是一个错误的方法(不安全,或者使用错误的sql文件提

  • 本文向大家介绍8种手动和自动备份MySQL数据库的方法,包括了8种手动和自动备份MySQL数据库的方法的使用技巧和注意事项,需要的朋友参考一下 作为流行的开源数据库管理系统,MySQL的使用者众多,为了维护数据安全性,数据备份是必不可少的。本文就为大家介绍几种适用于企业的数据备份方法。 使用MySQLDump进行MySQL备份 mysqldump是MySQL内置的工具,允许用户将数据库指定不同的选

  • 本文向大家介绍MySQL备份时排除指定数据库的方法,包括了MySQL备份时排除指定数据库的方法的使用技巧和注意事项,需要的朋友参考一下 使用mysqldump命令备份时候,--all-databases 可以备份所有的数据库。 使用ignore-table 还可以排除制定的表。但是,mysqldump没有参数可以排除数据库的。 要备份的数据库少的时候,可以通过mysqldump -uroot -p