生產環境Mysql資料庫備份指令碼

2021-09-05 03:53:04 字數 3185 閱讀 8775

在資料庫的日常維護工作中,除了保證業務的正常執行以外,就是要對資料庫進行備份,以免造成資料庫的丟失,從而給企業帶來重大經濟損失。通常備份可以按照備份時資料庫狀態分為熱備和冷備,按照備份資料庫檔案的大小分為增量備份、差異備份和全量備份。其中熱備可以通過mysql replication主從複製進行實時備份,percona的xtrabackup以及mysql自帶的mysqldump等,可以根據不同需求使用不同的備份方案。雖然在生產環境已經使用mysql replication主從複製,但是還需要在計畫任務中新增執行shell指令碼在夜間業務不繁忙時進行資料庫的全量備份,以便在發生主從複製失敗時,主從資料庫大量資料不一致後的主從複製的重做,同時進行完全備份可以更加保證資料庫的安全性。以下是我在生產環境中使用的乙個全備指令碼,它的基本功能:1.自動壓縮備份mysql資料庫.2.自動刪除近10天前的備份檔案

3.刪除時顯示刪除進度(可選).

#!/bin/bash

#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

第1天備份資料庫功能測試如下

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 第二個是沒有壓縮的備份速度快,但是...