Mysql數據庫增量備份的實現思路方法介紹

mysql數據庫增量備份,在這之前修改我們的數據庫配置文件/etc/my.cnf開啟bin-log日志功能即可,下面小編給大家分享mysql數據庫增量備份的思路詳解,一起看看吧

MySQL數據庫增量備份,在這之前修改我們的數據庫配置文件/etc/my.cnf開啟bin-log日志功能即可。接下來是我參考了下網上的一些方法,自己寫的,主要還是要能學到他的一些思路和方法。

#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日志打印出來的效果:

Mysql數據庫增量備份的實現思路方法介紹

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

總結

? 版權聲明
THE END
喜歡就支持一下吧
點贊10 分享