在資料庫的日常維護工作中,除了保證業務的正常執行以外,就是要對資料庫進行備份,以免造成資料庫的丟失,從而給企業帶來重大經濟損失。通常備份可以按照備份時資料庫狀態分為熱備和冷備,按照備份資料庫檔案的大小分為增量備份、差異備份和全量備份。其中熱備可以通過mysql replication主從複製進行實時備份,percona的xtrabackup以及mysql自帶的mysqldump等,可以根據不同需求使用不同的備份方案。雖然在生產環境已經使用mysql replication主從複製,但是還需要在計畫任務中新增執行shell指令碼在夜間業務不繁忙時進行資料庫的全量備份,以便在發生主從複製失敗時,主從資料庫大量資料不一致後的主從複製的重做,同時進行完全備份可以更加保證資料庫的安全性。以下是我在生產環境中使用的乙個全備指令碼,它的基本功能:1.自動壓縮備份mysql資料庫.2.自動刪除近10天前的備份檔案
3.刪除時顯示刪除進度(可選).
#!/bin/bash第1天備份資料庫功能測試如下#author [email protected]
maximum_backup_files=10 #最大備份檔案數
backup_foldername="database_backup" #資料庫備份檔案的主目錄
db_hostname="localhost" #mysql所在主機的主機名
db_username="root" #mysql登入使用者名稱
db_password="123456" #mysql登入密碼
databases=(
"openfire"
"csp" #備份的資料庫名
)#*****====
echo "bash database backup tool"
#current_date=$(date +%f)
current_date=$(date +%f) #定義當前日期為變數
backup_folder="$_$" #存放資料庫備份檔案的目錄
mkdir $backup_folder #建立資料庫備份檔案目錄
#統計需要被備份的資料庫
count=0
while [ "x$" != "x" ];do
count=$(( count + 1 ))
done
echo "[+] $ databases will be backuped..."
#迴圈這個資料庫名稱列表然後逐個備份這些資料庫
for database in $;do
echo "[+] mysql-dumping: $"
echo -n " began: ";echo $(date)
if $(mysqldump -h $ -u$ -p$ $ > "$/$.sql");then
echo " dumped successfully!"
else
echo " failed dumping this database!"
fiecho -n " finished: ";echo $(date)
done
echo
echo "[+] packaging and compressing the backup folder..."
tar -cv $ | bzip2 > $.tar.bz2 && rm -rf $backup_folder
backup_files_made=$(ls -l $*.tar.bz2 | wc -l)
backup_files_made=$(( $backup_files_made - 0 ))
#把已經完成的備份檔案數的結果轉換成整數數字
echo
echo "[+] there are $ backup files actually."
#判斷如果已經完成的備份檔案數比最大備份檔案數要大,那麼用已經備份的檔案數減去最大備份檔案數,列印要刪除舊的備份檔案
if [ $backup_files_made -gt $maximum_backup_files ];then
remove_files=$(( $backup_files_made - $maximum_backup_files ))
echo "[+] remove $ old backup files."
#統計所有備份檔案,把最新備份的檔案存放在乙個臨時檔案裡,然後刪除舊的檔案,迴圈出臨時檔案的備份檔案從臨時目錄裡移到當前目錄
all_backup_files=($(ls -t $*.tar.bz2))
safe_backup_files=("$}")
echo "[+] safeting the newest backup files and removing old files..."
folder_safety="_safety"
if [ ! -d $folder_safety ]
then mkdir $folder_safety
fifor file in $;do
mv -i $ $
done
rm -rf $*.tar.bz2
mv -i $/* ./
rm -rf $
#以下顯示備份的資料檔案刪除進度,一般指令碼都是放在crontab裡,所以我這裡只是為了顯示效果,可以不選擇這個效果。
char=''
for ((i=0;$i<=100;i+=2))
do printf "removing:[%-50s]%d%%\r" $char $i
sleep 0.1
char=#$char
done
echo
fi
10天以後,會自動保留最近10天的備份,10天以上會自動刪除
模擬測試指令碼功能,建立31天的備份檔案如下
每天計畫任務定時執行指令碼保留最近10天的備份
Mysql資料庫 每天自動備份mysql指令碼
1 執行 crontab e 00 00 bin bash yourpath mysqlbak.sh 2 開啟自動執行檔案 vi etc crontab 在etc中加入如下內容,讓其自動執行任務。00 00 root mysqlbak.sh 以上兩個 00 00 為每天的凌晨自動執行腳 本分 時 日...
Mysql資料庫 每天自動備份mysql指令碼
1 執行 crontab e 00 00 bin bash yourpath mysqlbak.sh 2 開啟自動執行檔案 vi etc crontab 在etc中加入如下內容,讓其自動執行任務。00 00 root mysqlbak.sh 以上兩個 00 00 為每天的凌晨自動執行指令碼 分 時 ...
EBS oracle生產環境資料庫備份指令碼
整個下面分別儲存成sh指令碼就可以了 第乙個是壓縮備份的備份速度超慢,1000g基本要10個小時,但是備份完會只用原來的1 8空間 rman target nocatalog log u1 data bak date m d h m log eof runexit 第二個是沒有壓縮的備份速度快,但是...