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

自動實現備份整個數據庫

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

核心代碼

 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 "備份結束."

 

轉自 時光博客mysql

相關文章
相關標籤/搜索