shell实现自动备份整个数据库,一个库备份一个文件
Posted 百里
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 "备份结束."
转自 时光博客
以上是关于shell实现自动备份整个数据库,一个库备份一个文件的主要内容,如果未能解决你的问题,请参考以下文章