剛進入公司時,領導分配的實驗任務,這是我寫的第乙個比較完整和滿意的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服務壓力,單獨做了備份小組件,放到一台伺服器中。外掛程式負責啟動服務...