欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MySQL定时自动备份与自动恢复 mysql脚本备份恢复scp 

程序员文章站 2022-04-10 11:53:07
...
需求:主机A每日凌晨三点自动备份dump,然后发送的主机B上。主机B每日凌晨四点自动恢复该dump。

主机A IP:10.180.50.24
主机B IP:10.180.50.23

主机A使用scp命令远程复制到主机B。需要先做密钥互信,具体参见:http://elvis4139.iteye.com/blog/2406401

1、主机A shell脚本:backup.sh
#!/bin/sh 
cd /bak/bakmysql
echo "============MySQL自动备份开始============"

BackFolder=/usr/bak/mysqldump
Now=$(date +"%Y%m%d") 
file=_dump_$Now.sql.gz

echo "[1/5]移动前一日备份文件开始..."
mv *_dump_* $BackFolder
echo "移动前一日备份文件完成"

echo "---------------------------------"

echo "[2/5]数据库scpnf备份开始..."
mysqldump -udump -p'dump' scpnf | gzip > scpnf$file
echo "数据库scpnf备份完成"
echo "---------------------------------"
echo "[3/5]数据库fecs备份开始..."
mysqldump -udump -p'dump' fecs | gzip > fecs$file 
echo "数据库fecs备份完成"
echo "---------------------------------"
echo "[4/5]远程复制数据库备份文件开始..."
scp *$file root@10.180.50.23:/usr/dbbackup
echo "远程复制数据库备份文件完成"
echo "---------------------------------"
echo "[5/5]三天前备份文件清理开始..."
RetainDay=$(date -d -3day  +"%Y%m%d") 
RetainDayFile=_dump_$RetainDay.sql.gz

if [ -f $BackFolder/scpnf$RetainDayFile ] 
then
rm -rf $BackFolder/scpnf$RetainDayFile 
echo "成功删除备份文件scpnf$RetainDayFile"
else
echo "无法找到备份文件scpnf$RetainDayFile"
fi

if [ -f $BackFolder/fecs$RetainDayFile ] 
then
rm -rf $BackFolder/fecs$RetainDayFile 
echo "成功删除备份文件fecs$RetainDayFile"
else
echo "无法找到备份文件fecs$RetainDayFile"
fi

echo "============MySQL自动备份完成============"




2、将主机A shell脚本:backup.sh加入计划任务

vim /etc/crontab

0 3 * * * root /bak/bakmysql/backup.sh


3、主机B自动恢复shell脚本:mysql_restore.sh
####################################################################
#
#说明:每天凌晨4点自动从备份脚本恢复数据库scpnf和fecs库,并删除三天前的备份文件。
#
####################################################################
#!/bin/sh 
cd /usr/dbbackup
echo "======================================"

#备份文件名称
File=_dump_$(date +"%Y%m%d").sql.gz
echo "1/3:数据库[fecs]开始恢复..."
gunzip < fecs$File | mysql -uroot -p'password' fecs
echo "数据库[fecs]恢复成功!"
echo "------------------------------------"

echo "2/3:数据库[scpnf]开始恢复..."
gunzip < scpnf$File | mysql -uroot -p'password' scpnf
echo "数据库[scpnf]恢复成功!"
echo "------------------------------------"

echo "3/3:准备删除三天前的数据备份文件..."
RetainDays=$(date -d -3day  +"%Y%m%d") 

#删除fecs备份文件
if [ -f ./fecs_dump_$RetainDays.sql.gz ] 
then
rm -rf ./fecs_dump_$RetainDays.sql.gz
echo "成功删除文件:fecs_dump_$RetainDays.sql.gz"
else
echo "没有找到备份文件:fecs_dump_$RetainDays.sql.gz"
fi

#删除scpnf备份文件
if [ -f ./scpnf_dump_$RetainDays.sql.gz ] 
then
rm -rf ./scpnf_dump_$RetainDays.sql.gz
echo "成功删除文件:scpnf_dump_$RetainDays.sql.gz"
else
echo "没有找到备份文件:scpnf_dump_$RetainDays.sql.gz"
fi
echo "======================================"


4、将主机B shell脚本:backup.sh加入计划任务

vim /etc/crontab

0 4 * * * root /usr/dbbackup/mysql_restore.sh