1. 程式人生 > >mysql 全備+binlog 自動恢復shell指令碼

mysql 全備+binlog 自動恢復shell指令碼

mysql 全備+binlog自動恢復shell指令碼

注意:

1、資料庫全備的命名規則 bak_dbname_xxx_sql

2BAKUPDIR存放所有的資料全備的檔案的目錄

3BINLOGBAKDIR用與存放所有用到的binlog的目錄

該指令碼主要用於資料庫故障時,進行及時的整庫加日誌的增量恢復,以求資料損失降低的最小值。

 該指令碼的主要思想:

1. 首先進行全庫匯入;

2. 通過查詢二進位制日誌的pos來進行日誌的恢復;

1. #!/bin/bash

2. BASEDIR=/data1/xxx/xxx/backuptest

3. BAKUPDIR=$BASEDIR/tmpbak

4. #BAKUPDIR=$

BASEDIR/2012-03-27

5. BINLOGBAKDIR=$BASEDIR/binlog

6. LOGDIR=$BASEDIR/log

7. RECOVERY_LOG=$LOGDIR/recovery.log

8. MYSQL=/usr/local/mysql/bin/mysql

9. MYSQLBINLOG=/usr/local/mysql/bin/mysqlbinlog

10.USER=root

11.PASS=123

12.MYSQLIP=localhost

13. 

14.mkdir -p $LOGDIR

15.BAKUPSQL=`find$BAKUPDIR -type f -name"*sql"|xargs-

i basename{}`

16. 

17.for i in $BAKUPSQL

18.do

19.cd $BAKUPDIR

20. 

21.#########CHECK BINLOG POSITION############

22.BINLOG=`head -n 50 $i |grep "CHANGE MASTER TO MASTER_LOG_FILE"|awk -F "'" '{print$2}'`

23.BINLOGPOS=`head -n 50 $i |grep "CHANGE MASTER TO MASTER_LOG_FILE"|awk -F "=" '{print$3}'|

sed's/;//'`

24.DATABASE=`echo $i|awk-F"_"'{print$2}'`

25.# echo $i $DATABASE $BINLOG $BINLOGPOS

26. 

27.####BEGINE FULLBAKUP RECOVERY#############

28.echo "#`date +'%Y-%m-%d%H:%M:%S'`: start recover $DATABASE ">>${RECOVERY_LOG}

29.if $MYSQL -h$MYSQLIP -u$USER-p$PASS< $i>>${RECOVERY_LOG}2>&1;then

30.echo "recovery $DATABASEsucessfully">> ${RECOVERY_LOG}

31.else

32.echo "recovery $DATABASEfail">> ${RECOVERY_LOG}

33.exit;

34.fi

35.echo "#`date +'%Y-%m-%d%H:%M:%S'`: end recover $DATABASE">>${RECOVERY_LOG}

36. 

37. 

38.#####BEGINE BINLOGBAKUP RECOVERY##########

39. 

40.cd $BINLOGBAKDIR

41.find . -type f -name "*bin*" |xargs-i basename{}>/tmp/binlog.tmp

42.sort -n /tmp/binlog.tmp>$LOGDIR/binlog.tmp2

43.sed '/md5/d' $LOGDIR/binlog.tmp2> $LOGDIR/binlog.tmp3

44.sed -n "/$BINLOG/,\$p" $LOGDIR/binlog.tmp3> $LOGDIR/binlog${DATABASE}.log

45.RECBINLOGS=`awk '{printf "%s"," "$1}' $LOGDIR/binlog${DATABASE}.log `

46.#echo $DATABASE $BINLOGPOS $RECBINLOGS

47. 

48.echo "#`date +'%Y-%m-%d%H:%M:%S'`: start recover $DATABASE binlog ">> ${RECOVERY_LOG}

49.echo " $MYSQLBINLOG--no-defaults --disable-log-bin --start-position=$BINLOGPOS $RECBINLOGS -d$DATABASE |$MYSQL -h$MYSQLIP -u$USER -p$PASS -f ">> ${RECOVERY_LOG}

50.if$MYSQLBINLOG --no-defaults--disable-log-bin--start-position=$BINLOGPOS$RECBINLOGS-d $DATABASE |$MYSQL-h$MYSQLIP-u$USER-p$PASS-f >> ${RECOVERY_LOG} 2>&1;then

51.echo "recover $DATABASEbinlog sucessfully">> ${RECOVERY_LOG}

52.else

53.echo "recover $DATABASEbinlog fail">> ${RECOVERY_LOG}

54.exit;

55.fi

56.echo "#`date +'%Y-%m-%d%H:%M:%S'`:end recover $DATABASE binlog">>${RECOVERY_LOG}

57. 

58. 

59.done

附指令碼原始碼:

full_db_log_imp.sh

#   !/bin/bash

BASEDIR=/data/bak/test

BAKUPDIR=$BASEDIR/20121024

BINLOGBAKDIR=$BASEDIR/bin-log-bk

LOGDIR=$BASEDIR/log

RECOVERY_LOG=$LOGDIR/recovery.log

MYSQL=/usr/local/mysql/bin/mysql

MYSQLBINLOG=/usr/local/mysql/bin/mysqlbinlog

USER=root

[email protected]

MYSQLIP=localhost

cd $BAKUPDIR

find $BAKUPDIR -name '*.gz'

gunzip $BAKUPDIR *.gz

BAKUPSQL=`find $BAKUPDIR -type f -name"*.sql" |xargs -i basename {}`

for i in $BAKUPSQL

do

cd $BAKUPDIR

#########CHECK BINLOG POSITION############

BINLOG=`head -n 50 $i |grep "CHANGEMASTER TO MASTER_LOG_FILE"|awk -F "'" '{print $2}'`

BINLOGPOS=`head -n 50 $i |grep "CHANGEMASTER TO MASTER_LOG_FILE"|awk -F "=" '{print $3}'|sed 's/;//'`

DATABASE=`echo $i|awk -F"_"'{print $2}'`

echo $i $DATABASE $BINLOG $BINLOGPOS

####BEGINE FULLBAKUP RECOVERY#############

echo "#`date +'%Y-%m-%d %H:%M:%S'`:start recover $DATABASE " >> ${RECOVERY_LOG}

if $MYSQL -h$MYSQLIP -u$USER -p$PASS <$i >> ${RECOVERY_LOG} 2>&1;then

echo "recovery $DATABASE sucessfully">> ${RECOVERY_LOG}

else

echo "recovery $DATABASE fail">> ${RECOVERY_LOG}

exit;

fi

echo "#`date +'%Y-%m-%d %H:%M:%S'`:end recover $DATABASE" >> ${RECOVERY_LOG}

#####BEGINE BINLOGBAKUP RECOVERY##########

cd $BASEDIR

#find ./ -type f -name "*bin*"|xargs -i basename {} > /tmp/binlog.tmp

find ./ -type f -name"*mysql-bin*"  >/tmp/binlog.tmp

sort -n /tmp/binlog.tmp >$LOGDIR/binlog.tmp2

sed '/md5/d' $LOGDIR/binlog.tmp2 >$LOGDIR/binlog.tmp3

sed -n "/$BINLOG/,\$p"$LOGDIR/binlog.tmp3 > $LOGDIR/binlog${DATABASE}.log

RECBINLOGS=`awk '{printf"%s"," "$1}' $LOGDIR/binlog${DATABASE}.log `

echo $DATABASE $BINLOGPOS $RECBINLOGS

#exit 0

echo "#`date +'%Y-%m-%d %H:%M:%S'`:start recover $DATABASE binlog " >> ${RECOVERY_LOG}

echo " $MYSQLBINLOG --no-defaults --disable-log-bin--start-position=$BINLOGPOS $RECBINLOGS -d $DATABASE |$MYSQL -h$MYSQLIP -u$USER-p$PASS -f " >> ${RECOVERY_LOG}

if $MYSQLBINLOG --no-defaults--disable-log-bin --start-position=$BINLOGPOS $RECBINLOGS  $DATABASE |$MYSQL -h$MYSQLIP -u$USER -p$PASS-f >> ${RECOVERY_LOG} 2>&1;then

echo $BINLOGPOS $RECBINLOGS

echo "recover $DATABASE binlogsucessfully" >> ${RECOVERY_LOG}

else

echo "recover $DATABASE binlogfail" >> ${RECOVERY_LOG}

exit;

fi

echo "#`date +'%Y-%m-%d %H:%M:%S'`:endrecover $DATABASE binlog" >> ${RECOVERY_LOG}

done

 

指令碼執行後,恢復到的資料為:

相關推薦

mysql 全備+binlog 自動恢復shell指令碼

mysql 全備+binlog自動恢復shell指令碼 注意: 1、資料庫全備的命名規則 bak_dbname_xxx_sql 2、BAKUPDIR存放所有的資料全備的檔案的目錄 3、BINLOGBAKDIR用與存放所有用到的binlog的目錄 該指令碼主要用於資料庫故障時

centos7 mysql自動備份 MySQL自動備份shell指令碼

MySQL自動備份shell指令碼   在資料庫的日常維護工作中,除了保證業務的正常執行以外,就是要對資料庫進行備份,以免造成資料庫的丟失,從而給企業帶來重大經濟損失。通常備份可以按照備份時資料庫狀態分為熱備和冷備,按照備份資料庫檔案的大小分為增量備份、差異備份和全量備份.一

Linux下Oracle資料庫自動備份Shell指令碼

1.在伺服器建立備份目錄,並賦予許可權 mkdir -p /backup/P_DATA  #新建shell指令碼存放路徑 mkdir -p /backup/P_DB_BACK  #新建Oracle資料庫備份目錄 chown -R oracle:oinstall /backup/P

mysqlbinlog災難恢復

binlog 基本認識 MySQL的二進位制日誌可以說是MySQL最重要的日誌了,它記錄了所有的DDL和DML(除了資料查詢語句)語句,以事件形式記錄,還包含語句所執行的消耗的時間,MySQL的二進位制日誌是事務安全型的。 一般來說開啟二進位制日誌大概會有1

實用指令碼----Linux下Jdk和Tomcat自動安裝shell指令碼總結

一、JDK 自動安裝指令碼 jdk自動安裝bash shell指令碼,截止今天(2014/10/15)親測可用: sudo su #切換到root許可權 mkdir /usr/local/java cd /usr/local/java #download jdk 1.7.67 wget --no-ch

K8S測試自動安裝shell指令碼

#!/bin/bash function f_tls(){ #直接使用二進位制原始碼包安裝 ls -l /usr/local/bin/cfssl* > /dev/null 2>&1 if [ $? != 0 ];then wget http://172.23.210.

自動獲取shell指令碼的絕對路徑,執行路徑

檔名 test.sh #!/bin/sh echo "指令碼所在的資料夾名:" dirname $0 DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" echo "指令碼的執行路徑

使用mysqlbinlog功能恢復資料

環境:linux(centos6.8),mysql(5.6)1:開啟binlog功能編輯 vim /etc/my.cnf,加上 log-bin =/app/mysql_binlog/mysql-bin,順便加上 expire_logs_days=7,後面的配置代表保留7天日誌

hadoop叢集一鍵自動啟動和自動關閉shell指令碼

          #!/bin/bash         echo "-------------------正在啟動叢集-------- "         echo "-------------------正在啟動NameNode-------- "         ssh [email pro

ios xcodebuild命令列自動打包 shell指令碼

#################################### 使用規則:     1.cd到工程目錄,再執行該sh指令碼檔案     2.該工程如果存在xcworkspace檔案,那麼WORKSPACE_NAME必須要指定名稱,PROJECT_NAME也

Zabbix自動執行Shell指令碼報警

Zabbix 3.4.4預設自帶3種報警方式,SMTP郵件服務報警,Jabber報警,GSM調變解調器(簡訊)報警。這裡面除了SMTP郵件服務報警比較實用以外,其他的報警方式用的並不多。Jabber在國內用的就不多,也很少有人會為Zabbix搞一個Jabber服務,而且給Za

關於crontab自動執行shell指令碼出現的不能執行命令問題

上一篇部落格寫了一個shell指令碼,用來測試計算機硬體資訊、cpu、記憶體等資訊。今天把它扔進crontab裡面想定期執行,並儲存資料。結果出現了問題。。。先看shell指令碼:#!/bin/bash ​ #定義變數NOW,值為當前日期。格式:yyyymmdd NOW=`d

利用Shell指令碼實現遠端MySQL自動查詢

下面這個指令碼是一個簡單用來執行遠端資料庫查詢的命令,相信大家都能看得懂,這對於有些需要每天自動檢查資料庫或是執行某些語句的兄弟,是很有幫助的,只要稍加修改就可以 #!/bin/shHOST=192.168.5.40USER=abcPASS=123456QUERY=`mysql -h$HOST -u$USE

mysql xtrabackup自動增量備份shell指令碼

#!/bin/sh #victory chen   INNOBACKUPEX=innobackupex INNOBACKUPEXFULL=/usr/bin/$INNOBACKUPEX TODAY=`date +%Y%m%d%H%M%S` USEROPTIONS="--user

shell指令碼 ----mysql備份使用mysqldump實現自動備份

指令碼如下: [[email protected] shell]# cat mysqldump.sh #!/bin/bash #定義變數user(資料庫使用者名稱),passwd(資料庫密碼),date(備份的時間標籤) #dbname(需要備份的資料庫名稱,根

shell指令碼實現mysql自動還原(linux)

#!/bin/bash #主機地址 host="localhost"   #mysql使用者名稱 id="root"       #mysql祕密        pwd="sanyue"dbs=$(echo "show databases;" | mysql -u$id -

mysql-binlog日誌恢復數據庫

rop mysql- master share int 查看 start row 分享圖片 mysqlbinlog常見的選項有以下幾個:--start-datetime:從二進制日誌中讀取指定等於時間戳或者晚於本地計算機的時間--stop-datetime:從二進制日誌中

Mysql使用binlog恢復數據解決誤操作問題的兩種方法

tle osi net 回滾 href bsp databases affect 恢復 為保證沒有其他參數配置影響,重新安裝配置了一臺最小化安裝的CentOS7虛擬機 1. 基礎知識? 安裝mysql5.6數據庫Mysql binlog初步理解 2. 配置mysql 開啟

Windows下MySQLbinlog恢復

nta 更多 scp 第一步 ahk psc vra 3rd sna 前言   在最近的工作中,由於自己粗(zuo)心(si)誤update操作導致幾百行的數據出現錯誤,在心急如焚的同時(那時候我竟然不知道除了備份之後還有binlog日誌恢復)立馬查資料學習binlog的

Mysqlbinlog日誌說明及利用binlog日誌恢復數據操作記錄

Language 命令 ani art ase 回來 log日誌 slaves update 眾所周知,binlog日誌對於mysql數據庫來說是十分重要的。在數據丟失的緊急情況下,我們往往會想到用binlog日誌功能進行數據恢復(定時全備份+binlog日誌恢復增量數據部