#!/bin/bash
#mysql用户名
mysql_user="root"
#mysql密码
mysql_pwd="123456"
#mysql服务器地址
mysql_host="localhost"
#目标服务器ip
target_host="root@100.200.100.100"
#目标服务器端口
target_port="22"
#目标服务器备份目录
target_path="/opt/backup_mysql"
#生成日志的文件路径
logpath="/opt/backup_logs"
if [ ! -d "$logpath" ]; then
mkdir -p "$logpath"
fi
#当天的日志文件
logs="$logpath/mysql_log_$dates.log"
#如果日志文件路径不存在,则创建
if [ ! -d "$logs" ]; then
touch "$logs"
fi
#本机标识
local_name="test"
#本机备份的路径
dump_path="/opt/$local_name"
#如果备份的路径不存在,则创建
if [ ! -d "$dump_path" ]; then
mkdir -p "$dump_path"
fi
#输出开始执行时间
echo "START ==>"`date +'%Y%m%d %H%M%S'` >> $logs
#将所有的database放入arr_database变量中 去除不需要的database 如:sys performance_schema 还有*号
arr_database=`mysql -h$mysql_host -u$mysql_user -p$mysql_pwd -e'show databases\G' | sed '/\*\*\*/d' | sed 's/Database: //g'| sed '/mysql/d'|sed '/information_schema/d' | sed '/performance_schema/d' | sed '/sys/d'`
#输出一下需要备份的数据库
echo $arr_database >>$logs
#循环备份所有的database
for cur_database in ${arr_database[*]}; do
echo "备份$cur_database" >>$logs
mysqldump -h$mysql_host -u$mysql_user -p$mysql_pwd --opt $cur_database | gzip > $dump_path/$cur_database.sql.gz
done
dates=`date +%Y%m%d`
#备份到服务器的目录地址(目标服务器地址目录)
target_backup_file="$target_path/$dates/$local_name"
logs="$logpath/rsync_log_$dates.log"
#判断今天的是否已经进行过备份
ssh -p$target_port $target_host "[ -e $target_backup_file ]";
if [ $? == 0 ]; then
echo "已经备份过了";
exit 0;
else
echo "没有备份过";
fi
echo "START ==>"`date +'%Y%m%d %H%M%S'` >> $logs
#是否存在目录,不存在则创建
ssh -p$target_port $target_host " [[ -d $target_backup_file ]] || mkdir -p $target_backup_file"
#-e可以自定义端口号 --delete可以保持源服务器删除后目标服务器也删除
rsync -e'ssh -p60000' -avz --progress $dump_path $target_host:$target_path/$dates >> $logs
#删除三天前的备份
#ssh -p$target_port $target_host " find $target_path/ -name '*' -mtime +3 | xargs rm -rf {}\;"
# 显示完成
echo "END ==>"`date +'%Y%m%d %H%M%S'` >> $logs
find $logpath -name "*.log" -mtime +3 -exec rm -rf {} \;
rm -rf $dump_path
#mysql用户名
mysql_user="root"
#mysql密码
mysql_pwd="123456"
#mysql服务器地址
mysql_host="localhost"
#目标服务器ip
target_host="root@100.200.100.100"
#目标服务器端口
target_port="22"
#目标服务器备份目录
target_path="/opt/backup_mysql"
#生成日志的文件路径
logpath="/opt/backup_logs"
if [ ! -d "$logpath" ]; then
mkdir -p "$logpath"
fi
#当天的日志文件
logs="$logpath/mysql_log_$dates.log"
#如果日志文件路径不存在,则创建
if [ ! -d "$logs" ]; then
touch "$logs"
fi
#本机标识
local_name="test"
#本机备份的路径
dump_path="/opt/$local_name"
#如果备份的路径不存在,则创建
if [ ! -d "$dump_path" ]; then
mkdir -p "$dump_path"
fi
#输出开始执行时间
echo "START ==>"`date +'%Y%m%d %H%M%S'` >> $logs
#将所有的database放入arr_database变量中 去除不需要的database 如:sys performance_schema 还有*号
arr_database=`mysql -h$mysql_host -u$mysql_user -p$mysql_pwd -e'show databases\G' | sed '/\*\*\*/d' | sed 's/Database: //g'| sed '/mysql/d'|sed '/information_schema/d' | sed '/performance_schema/d' | sed '/sys/d'`
#输出一下需要备份的数据库
echo $arr_database >>$logs
#循环备份所有的database
for cur_database in ${arr_database[*]}; do
echo "备份$cur_database" >>$logs
mysqldump -h$mysql_host -u$mysql_user -p$mysql_pwd --opt $cur_database | gzip > $dump_path/$cur_database.sql.gz
done
dates=`date +%Y%m%d`
#备份到服务器的目录地址(目标服务器地址目录)
target_backup_file="$target_path/$dates/$local_name"
logs="$logpath/rsync_log_$dates.log"
#判断今天的是否已经进行过备份
ssh -p$target_port $target_host "[ -e $target_backup_file ]";
if [ $? == 0 ]; then
echo "已经备份过了";
exit 0;
else
echo "没有备份过";
fi
echo "START ==>"`date +'%Y%m%d %H%M%S'` >> $logs
#是否存在目录,不存在则创建
ssh -p$target_port $target_host " [[ -d $target_backup_file ]] || mkdir -p $target_backup_file"
#-e可以自定义端口号 --delete可以保持源服务器删除后目标服务器也删除
rsync -e'ssh -p60000' -avz --progress $dump_path $target_host:$target_path/$dates >> $logs
#删除三天前的备份
#ssh -p$target_port $target_host " find $target_path/ -name '*' -mtime +3 | xargs rm -rf {}\;"
# 显示完成
echo "END ==>"`date +'%Y%m%d %H%M%S'` >> $logs
find $logpath -name "*.log" -mtime +3 -exec rm -rf {} \;
rm -rf $dump_path