mysql完全備份,增量備份及恢復指令碼

2021-09-27 13:28:35 字數 3941 閱讀 3907

剛進入公司時,領導分配的實驗任務,這是我寫的第乙個比較完整和滿意的mysql全備,増備及恢復指令碼,歡迎指點!

**如下!

#!/bin/bash

# full &&increment backup and recover

# 說明:事先要確保存在/data/bak目錄,且要保證在執行增量備份時已做過至少一次全量備份,否則找不到position檔案。

port='

3306

'back_src_dir="

/data/mysql/$/logs/binlog

"back_dir='

/data/bak

'date=`date +%y%m%d`

user='

root

'pass='

cy2009

'bak_db='

test1

'mysql_bin='

/usr/local/mysql-5.1.48/bin

'socket="

/data/mysql/$/mysql.sock

"full_bak()

dumpfile=full_back$date.sql

$/mysqldump --lock-all-tables --flush-logs --master-data=2 -u$ -p$ $ >$

$/mysql -u$ -p$ --socket=$ -e "

unlock tables

"#把當前的binlog和position資訊存入position檔案

cat $ |grep

'master_log_file

'|awk -f"'"

'' > $/position

cat $ |grep

'master_log_file

'|awk -f"="

'' |awk -f";"

'' >> $/position

}incre_bak()

/mysql -u$ -p$ --socket=$ -e "

flush tables with read lock

"$/mysqladmin -u$ -p$ --socket=$ flush-logs

#獲取上次備份完成時的binlog和position

cd $

start_binlog=`sed -n '1p'

position`

start_pos=`sed -n '2p'

position`

#獲取目前的binlog和position

mysql -u$ -p$ --socket=$ -e "

show master status\g

" | awk

''| sed -n '

2,3p

' >now_position

stop_binlog=`sed -n '1p'

now_position`

stop_pos=`sed -n '2p'

now_position`

#如果在同乙個binlog中

if [ "

$" == "

$" ]; then

$/mysqlbinlog --start-position=$ --stop-position=$ $/$ >>incr_back$date.sql

#跨binlog備份

else

startline=`awk

"/$/

" $/mysql-bin.index`

stopline=`wc -l $/mysql-bin.index |awk''

`for i in `seq

$ $`

dobinlog=`sed -n "

$i"p $/mysql-bin.index |sed

's/.*\///g'`

case"$

"in"$

")$/mysqlbinlog --start-position=$ $/$ >>incr_back$date.sql;;"

$")$/mysqlbinlog --stop-position=$ $/$ >>incr_back$date.sql

;;*)

$/mysqlbinlog $/$ >>incr_back$date.sql

;; esac

done

fi#解除表鎖定,並儲存目前的binlog和position資訊到position檔案。

$/mysql -u$ -p$ --socket=$ -e "

unlock tables"cp

now_position position

}full_recov()

recov_file1=`ls | grep

'full_back'`

$/mysql -u$ -p$ --socket=$ -e "

use $; source $/$;"}

incre_recov()

recov_file2=`ls |grep

'incr_back'`

$/mysql -u$ -p$ --socket=$ -e "

use $; source $/$;"}

while

true

doecho -e "

\t\t**************************************

"echo

echo -e "

\t\t\twelcome to backup program!

"echo

echo -e "

\t\t\t(1) full backup for mysql

"echo -e "

\t\t\t(2) increment backup for mysql

"echo -e "

\t\t\t(3) recover from the full backup file

"echo -e "

\t\t\t(4) recover from the increment backup file

"echo -e "

\t\t\t(5) exit the program!

"echo

echo -e "

\t\t**************************************

"read -p "

enter your choice:

"choice

case $choice in1)

echo

"now! let's backup the data by full method.......

"full_bak

echo

"succeed!

"sleep2;;

2)echo

"now! let's backup the data by increment method......

"incre_bak

echo

"succeed

"sleep2;;

3)echo

"now! let's recover from the full back file

"full_recov

echo

"successful

"sleep2;;

4)echo

"now! let's recover from the increment backup file

"incre_recov

echo

"successful

"sleep2;;

5)break

;;*)

echo

"wrong option! try again!

"sleep

2continue

;;esac

done

Mysql 之 完全備份 增量備份 備份恢復

一 資料備份的重要性 在生產環境中,資料的安全性是至關重要的,任何資料的丟失都可能產生嚴重的後果造成資料丟失的原因 程式錯誤人為錯誤計算機失敗磁碟失敗災難 如火災 和偷竊 二 資料庫備份的分類 2.1 從物理與邏輯的角度 備份可分為 物理備份 對資料庫作業系統的物理檔案 如資料檔案 日誌檔案等 的備...

MySQL 全備份與增量備份 全恢復與增量恢復

一,全備份 與 全恢復 1 vim root db backup mysqldump mraz.php,內容如下 date default timezone set prc d date ymd his exec usr local mysql bin mysqldump uroot p111111...

系統完全備份 增量備份

最近專案遇到需要對資料庫和檔案進行備份操作,主要涉及 完全備份 增量備份 條件備份等,一直思考也沒什麼好的思路。網上最多的是針對與資料庫進行shell命令呼叫的備份,屬於資料庫級的備份,沒有提下業務級的備份。目前做法是為了避免web服務壓力,單獨做了備份小組件,放到一台伺服器中。外掛程式負責啟動服務...