1. 程式人生 > >使用Shell實現mysql分庫備份

使用Shell實現mysql分庫備份

大家好,今天給大家帶來的是一個分庫備份指令碼

下面是準備好的4個數據庫 aa bb cc dd

執行效果如下

恢復一下看看

shell指令碼如下:

#!/bin/bash
myuser=root
mypasswd=123456
mycmd="mysqldump -u$myuser -p$mypasswd"
for dname in `mysql -uroot -p123456 -e "show databases;"| sed 1d | egrep -v "schema|test|mysql"`
do
$mycmd --databases $dname >/opt/${dname}_`date +%F`.sql
done

解析如下:

#!/bin/bash
myuser=root  #定義資料庫使用者
mypasswd=123456  #定義資料庫密碼
mycmd="mysqldump -u$myuser -p$mypasswd"  #備份資料庫的命令,這裡呼叫了上面的使用者密碼。

#然後使用正則取出每個資料庫的名字然後使用for迴圈分別備份,不知道怎麼取的可以繼續往下看
for dname in `mysql -uroot -p123456 -e "show databases;"| sed 1d | egrep -v "schema|test|mysql"` 

do
$mycmd --databases $dname >/opt/${dname}_`date +%F`.sql
#這裡呼叫上面取出的資料庫名字和備份命令,備份到指定位置並以時間命名
done

這個指令碼的重點是在於取資料庫的名字

`mysql -uroot -p123456 -e "show databases;"| sed 1d | egrep -v "schema|test|mysql"`

`mysql -uroot -p123456 -e "show databases;" 可以直接在終端檢視資料庫

加管道符 sed 1d 可以刪除第一行,效果如下

|egrep -v "schema|mysql|test"

再加管道符使用egrep過濾並取反排除不需要備份的資料庫

注:egrep是擴充套件grep可以同時過濾多個 -v是取反

取出資料庫名字然後就可以用for迴圈來備份資料庫了,希望對你有所幫助,拜拜。