分享一個MySQL分庫備份腳本(原) 開發思路: 1.路徑:規定備份到什麼位置,把路徑(先判斷是否存在,不存在創建一個目錄)先定義好,我的路徑:/mysql/backup,每個備份用壓縮提升效率,帶上時間方便整理 2.取資料庫:抓取資料庫名稱,我用的awk和grep配合取資料庫的名稱(如果想按照表備 ...
分享一個MySQL分庫備份腳本(原)
開發思路:
1.路徑:規定備份到什麼位置,把路徑(先判斷是否存在,不存在創建一個目錄)先定義好,我的路徑:/mysql/backup,每個備份用壓縮提升效率,帶上時間方便整理
2.取資料庫:抓取資料庫名稱,我用的awk和grep配合取資料庫的名稱(如果想按照表備份可以再細化一下)註意要用mysql -e選項 這樣才能做成腳本
3.系統環境變數:因為用到了函數,所以非系統內置的命令 最好在腳本裡面用 . /etc/profile 把系統當前的環境變數傳過來
4.實現方法:用mysqldump 命令+for 迴圈實現分庫備份
5.備份檢查:如果備份出來的文件存在大小不為0 則認定為成功,返回success ,否則failed,如果放在定時任務執行 建議輸出到日誌文件裡面,方便日後查看
6.註意定義變數的時候 單引號‘’和雙引號“”的區別,否則會有錯誤
1 #!/bin/bash 2 #define var 3 user="root" 4 pass="1314520" 5 path="/mysql/backup" 6 cmd="mysql -u${user} -p${pass}" 7 dump="mysqldump -u${user} -p${pass} -B --events -x --master-data=2" 8 #system function 9 . /etc/init.d/functions 10 . /etc/profile 11 #judge dir 12 function jdir(){ 13 if [ ! -e $path ];then 14 mkdir $path -p 15 fi 16 } 17 #dump database 18 function bk(){ 19 for dbname in `$cmd -e 'show databases;'|awk 'NR>1{print $0}'|grep -v "performance_schema"` 20 do 21 $dump $dbname|gzip >${path}/${dbname}_$(date +%F).sql.gz 22 sleep 1 23 if [ -s ${path}/${dbname}_$(date +%F).sql.gz ];then 24 action "dump $dbname success!" /bin/true 25 else 26 action "dump $dbname failed" /bin/false 27 fi 28 done
29 } 30 function main(){ 31 jdir 32 bk 33 } 34 main
想和大家重點分享的是開發的思路,技術很基礎。
經過測試可以完成,如果有錯誤,歡迎指正。
ps 附上分表備份的腳本供參考
1 #!/bin/bash 2 #define var 3 user="root" 4 pass="1314520" 5 path="/mysql/backup" 6 cmd="mysql -u${user} -p${pass}" 7 dump="mysqldump -u${user} -p${pass} --events -x --master-data=2" 8 #system function 9 . /etc/init.d/functions 10 . /etc/profile 11 #judge dir 12 function jdir(){ 13 if [ ! -e $path ];then 14 mkdir $path -p 15 fi 16 } 17 #dump database 18 function bk(){ 19 for dbname in `$cmd -e 'show databases;'|awk 'NR>1{print $0}'|grep -v "performance_schema"` 20 do 21 for tname in `$cmd -e "show tables from ${dbname}"|sed "1d"` 22 do 23 $dump $dbname $tname|gzip >${path}/${dbname}_${tname}_$(date +%F).sql.gz 24 25 if [ -e ${path}/${dbname}_${tname}_$(date +%F).sql.gz ];then 26 echo "${dbname}_${tname}" >>$path/mysql_table.log 27 28 fi 29 done 30 done 31 } 32 function main(){ 33 jdir 34 bk 35 } 36 main