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 "备份结束."

 

转自 时光博客

posted @ 2018-06-04 14:55  三百里江山  阅读(979)  评论(0编辑  收藏  举报