#!/bin/sh
# -- coding: utf-8 --
# --------------------------------------------------
# @Time : 2019/4/30 9:59
# @Author : skywin886
# @File : auto_backup_mysql_send_ftp.sh
# @Version : 1.0.0
# --------------------------------------------------
# --------------------------------------------------
#可手动修改部分
#时间变量定义(用于文件名后缀)
current=`date "+%Y%m%d%H%M%S"`
current_log=`date "+%Y-%m-%d %H:%M:%S"`
#生成备份文件名中包含的版本号 默认为bak
ver2=bak
#备份保留天数
days=15
#拼接字符串变量定义
ver3=$ver2"_"$current
#数据库地址和端口(默认为本机和3306)
hostname=127.0.0.1
sqlport=3306
#数据库账号和密码
user=root
pass=coho@2019
#需要备份的数据库
db=xxx_base
#备份路径的目标地址 dst_path请按照格式修改
dst_path="/root/backup_mysql/coho_base_$ver3"
bak_path="/root/backup_mysql"
#京东云定制变量名(京东云不留本地文件上传后删除)
bak_file="coho_base_$ver3.tar.gz"
#备份上传FTP配置(IP 端口 用户名 密码 上传路径)
HOST=192.168.20.20
PORT=21
FTP_USERNAME=ftpadmin
FTP_PASSWORD=ftpadmin
UPLOAD_PATH=/local/192.168.20.100/backup_mysql/
#---------------------------------
#检查/root/backup_mysql目录是否存在 如不存在则创建备份目录
echo "检测备份文件夹..."
mkdir -p $bak_path
sleep 2
#检查该数据库是否存在
showsql=`mysql -h$hostname -P$sqlport -u$user -p$pass -e "show databases like '$db';"`
#开始备份
if [ ! -n "$showsql" ];then
echo "需备份数据库$db不存在,请检查需备份文件目录及脚本配置"
echo "$current_log 需备份数据库$db不存在,请检查需备份文件目录及脚本配置" >> auto_backup_mysql_send_ftp.log
exit 0
else
echo "已检测到需备份数据库..."
echo "开始备份..."
sleep 3
echo "$current_log 开始执行备份程序" >> auto_backup_mysql_send_ftp.log
mysqldump -h$hostname -P$sqlport -u$user -p$pass $db > $dst_path.sql 2>> auto_backup_mysql_send_ftp.log
echo "$current_log 源文件夹已复制至备份目录" >> auto_backup_mysql_send_ftp.log
echo --------------------------------------------------
echo "备份文件已生成:::"
ls -l -h $bak_path | grep "$ver3"
ls -l -h $bak_path | grep "$ver3" >> auto_backup_mysql_send_ftp.log
echo "$current_log 备份文件已生成" >> auto_backup_mysql_send_ftp.log
echo --------------------------------------------------
sleep 4
#压缩备份文件夹
tar -zcvf $dst_path.tar.gz $dst_path.sql 2>> auto_backup_mysql_send_ftp.log
echo "如报错 /非绝对路径 mysql文件正在使用 无影响忽略即可" >> auto_backup_mysql_send_ftp.log
echo --------------------------------------------------
echo "备份文件已生成并打包压缩:::"
ls -l -h $dst_path.tar.gz
ls -l -h $dst_path.tar.gz >> auto_backup_mysql_send_ftp.log
echo "$current_log 备份文件已打包压缩" >> auto_backup_mysql_send_ftp.log
echo --------------------------------------------------
sleep 3
#删除备份文件只留压缩包
if [ -e "$dst_path.sql" ];then
rm -rf $dst_path.sql 2>> auto_backup_mysql_send_ftp.log
echo "$current_log 备份文件夹已删除 只保留压缩包" >> auto_backup_mysql_send_ftp.log
fi
#传输备份至FTP
echo "$current_log 开始传输备份至FTP 默认使用被动模式传输 如不成功可注释passive mode"
echo "$current_log 开始传输备份至FTP " >> auto_backup_mysql_send_ftp.log
echo "--------------------------------------------------"
# --------------------------------------------------
#默认保留原文件
cp $dst_path.tar.gz /root/
#京东云定制上传不保留原文件
#mv $dst_path.tar.gz /root/
# --------------------------------------------------
/usr/bin/ftp -in <<EOF
open $HOST $PORT
user $FTP_USERNAME $FTP_PASSWORD
passive mode
cd $UPLOAD_PATH
binary
put $bak_file
ls $bak_file
bye
EOF
rm -rf /root/$bak_file
# --------------------------------------------------
echo --------------------------------------------------
current_log=`date "+%Y-%m-%d %H:%M:%S"`
echo "$current_log 文件已传输至FTP"
echo "$current_log 文件已传输至FTP" >> auto_backup_mysql_send_ftp.log
echo --------------------------------------------------
#清理旧备份文件(选择一种启用 去掉首位注释符号即可)
#模式1:当前备份传输完成后清除
: '
rm -rf $dst_path.tar.gz
echo "$current_log 当前备份已传输完成 备份文件已清除"
echo "$current_log 当前备份已传输完成 备份文件已清除" >> auto_backup_mysql_send_ftp.log
'
#模式2:清除备份文件夹中所有备份
: '
rm -rf $bak_path/*
echo "$current_log 当前备份已传输完成 备份文件夹已清空"
echo "$current_log 当前备份已传输完成 备份文件夹已清空" >> auto_backup_mysql_send_ftp.log
'
#模式3:保存$days天过期自动删除
#: '
echo "开始清除$bak_path目录下$days天之前备份文件(不显示文件名则无$days天之前备份文件)"
echo "可自行修改该脚本-mtime +$days参数来修改天数"
sleep 2
find $bak_path -type f -mtime +$days -exec ls -l {} \;
find $bak_path -type f -mtime +$days -exec ls -l {} \; >> auto_backup_mysql_send_ftp.log
#find /root/backup_chandao/ -type f -mtime +30 -exec ls -l {} \;
echo "准备清除以上文件(ctrl+c可终止)......"
echo "倒计时5"
sleep 2
echo "倒计时4"
sleep 2
echo "倒计时3"
sleep 2
echo "倒计时2"
sleep 2
echo "倒计时1"
sleep 2
find $bak_path -type f -mtime +$days -exec rm {} \; >> auto_backup_mysql_send_ftp.log
echo "已清除$days天之前备份文件"
echo "$current_log 已完成自动清除以上旧文件(如上方无文件名则无旧文件)" >> auto_backup_mysql_send_ftp.log
echo --------------------------------------------------
echo "\033[32mFinish[已完成备份]\033[0m"
echo "$current_log 已完成自动备份程序 如无报错则正常备份成功" >> auto_backup_mysql_send_ftp.log
echo "--------------------------------------------------" >> auto_backup_mysql_send_ftp.log
#'
echo --------------------------------------------------
exit 0
fi
#定期自动备份配置
#输入以下命令修改系统crontab
#crontab -e
#例子如下
#每天早上6点执行该脚本则添加如下一行保存
#0 6 * * * /root/auto_backup_mysql.sh
#每个月的第一天 13:10分运行则添加如下一行保存
#10 13 1 * * /root/auto_backup_mysql.sh
#每次开机就执行一次
#@reboot /root/auto_backup_mysql.sh
#显示所有crontab
#crontab -l
自动备份mysql并打包上传至ftp服务器
最新推荐文章于 2021-02-11 16:09:36 发布