自动备份mysql并打包上传至ftp服务器


#!/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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值