1. 程式人生 > >shell實現自動備份整個數據庫,一個庫備份一個文件

shell實現自動備份整個數據庫,一個庫備份一個文件

登陸 {} col pat 輸出 mysql 數據庫 時間 ack

自動實現備份整個數據庫

  • 實現一個庫備份一個文件
  • 實現排除不需要備份的庫
  • 實現備份成壓縮文件
  • 實現定義保留多少天的備份文件

核心代碼

 1 #!/bin/bash
 2 #set -x
 3 #########################
 4 # 功能:自動備份整個mysql數據庫
 5 # 作者:時光博客
 6 # 發布時間:2018/06/04
 7 # 最後修改時間:
 8 # 版本:v1.0
 9 ########################
10 ############################參數定義########################
11 #用戶名
12 user="
root" 13 #密碼 14 pass="root" 15 # 設置備份目錄,必須以/結尾 16 back_dir=/data/backup/ 17 #設置保存多少天 18 day=15 19 #定義文件名 20 file_name=`date +%Y%m%d%H%M` 21 #定義排除的數據庫名稱 22 exclude=("Database" "performance_schema" "information_schema" "mysql") 23 #############################代碼邏輯######################## 24 #定義命令 25 MYSQL=`which
mysql` 26 MYSQLDUMP=`which mysqldump` 27 #創建一個臨時文件,裝載數據庫 28 tmp_file=/tmp/databases_$RANDOM 29 touch $tmp_file 30 #登陸mysql,獲取所有的數據庫名稱 31 $MYSQL -u$user -p$pass <<EOF >$tmp_file 32 show databases; 33 EOF 34 #定義數據庫名稱數組 35 database_list=() 36 #定義自增變量 37 len=0 38 #獲取真實有用的數據庫名稱 39 while read line 40
do 41 if [[ "${exclude[@]}" != *$line* ]] 42 then 43 let "len++" 44 database_list[$len]=$line 45 fi 46 done < $tmp_file 47 #輸出結果,導出數據庫 48 echo "數據庫總共:${#database_list[*]}" 49 #開始備份 50 echo "開始備份..." 51 rd=$RANDOM 52 for name in ${database_list[@]} 53 do 54 file_path="${back_dir}`date +%Y%m%d`"/ 55 if [ ! -e $file_path ] 56 then 57 mkdir -p $file_path 58 fi 59 file="${file_path}${name}-$file_name-$rd.gz" 60 $MYSQLDUMP --opt $name -u $user -p${pass} | gzip > $file 61 done 62 #保留多少天的數據 63 find $basedir -mtime +$day -name "*.gz" -exec rm -rf {} \; 64 #刪除臨時文件 65 if [ -e $tmp_file ] 66 then 67 rm -rf $tmp_file 68 fi 69 echo "備份結束."

轉自 時光博客

shell實現自動備份整個數據庫,一個庫備份一個文件