利用Google Drive和Onedrive多重备份你的数据
![](https://blog.e9china.net/wp-content/uploads/2020/03/下载.png)
最近Sandy在折腾PVE,折腾了10来天。其中的苦只有一路陪着Sandy的大哥和芳姐才懂!反复的等待反复的折腾...后来明白一个道理,欧洲人福利太好了基本机器出了问题他们是非的要等要最后规定的时间才给你处理。
所以说.......备份很重要......备份很重要......备份很重要
如果你是OpenVZ或者其他的LXC,那么请点击广告,然后关闭这个页面。谢谢!
必须:KVM框架下的虚拟机或者是实体机
不瞎BB了~开始进入下面的课程,下面是准备工作
web服务器:10.10.10.10
备份服务器:11.11.11.11
申请Server酱的key和绑定微信推送,申请地址:http://sc.ftqq.com/ 下面教程大量使用到这个接口推送
1、设置无密码登陆web服务器
我们在备份服务器(11.11.11.11)执行下面命令
ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub '-p 2222' root@10.10.10.10
测试命令有效性
rsync -avzP -e 'ssh -p 2222' root@10.10.10.10:/root/webbak /root
2、制作web服务器备份脚本
登陆web服务器(10.10.10.10)编辑备份脚本
2.1、web备份脚本
创建备份脚本
vim web-bak.sh
内容如下:
#!/bin/bash
#你要修改的地方从这里开始
WEB_DATA=/home/wwwroot #要备份的网站数据,如果是使用lnmp安装包,则默认这个为网站目录
#你要修改的地方从这里结束
service_name=web服务器-2222 #支持中文
service_ip=10.10.10.10:2222 #请不要使用&¥等特殊符号
server_key=123456789 #server酱申请key http://sc.ftqq.com/
#记录开始时间
start=`date +%Y-%m-%d_%H:%M:%S`
echo -e "开始执行备份:$start" >> $WEB_DATA/auto_backup.log
#定义web数据的名字和web数据的名字
WebBakName=Web_$(date +%Y%m%d).tar.gz
OldWeb=Web_$(date -d -1day +"%Y%m%d").tar.gz
echo "删除1天前的数据"
#rm -rf /root/webbak/Web_$(date -d -1day +"%Y%m%d").tar.gz
find /root/webbak -mtime +1 -type f -name 'Web_*.gz' |xargs rm -rf
echo "进入本地目录"
cd /root/webbak
#压缩网站数据
tar zcf /root/webbak/$WebBakName $WEB_DATA
echo “web备份结束”
#记录结束时间
end=`date +%Y-%m-%d_%H:%M:%S`
echo -e "结束执行备份:$end\n" >> $WEB_DATA/auto_backup.log
#发送方糖通知
curl -d "text=
web数据库备份完成
&desp=
web($service_ip)数据备份完成!
$service_name
开始时间:$start 结束时间:$end" https://sc.ftqq.com/$server_key.send
赋予可执行权限
chmod -R 0777 web-bak.sh
2.2、mysql备份脚本
Sandy这里选择使用dump方式备份,dump备份出的文件大于1G,建议使用xtrabackup备份,还原方便!
创建备份脚本
vim sql-bak.sh
内容如下:
#!/bin/bash
# 以下配置信息请自己修改
mysql_user="root" #MySQL备份用户
mysql_password="123456789" #MySQL备份用户的密码
mysql_host="localhost"
mysql_port="3306"
mysql_charset="utf8" #MySQL编码
backup_db_arr=("sandyblog" "db1") #要备份的数据库名称,多个用空格分开隔开 如("db1" "db2" "db3")
backup_location=/root/webbak/mysql #备份数据存放位置,末尾请不要带"/",此项可以保持默认,程序会自动创建文件夹
expire_backup_delete="ON" #是否开启过期备份删除 ON为开启 OFF为关闭
expire_days=1 #过期时间天数 默认为三天,此项只有在expire_backup_delete开启时有效
service_name=web服务器-2222 #支持中文
service_ip=10.10.10.10:2222 #请不要使用&¥等特殊符号
server_key=123456789 #server酱申请key http://sc.ftqq.com/
# 本行开始以下不需要修改
backup_time=`date +%Y%m%d%H%M` #定义备份详细时间
backup_Ymd=`date +%Y-%m-%d` #定义备份目录中的年月日时间
backup_3ago=`date -d '3 days ago' +%Y-%m-%d` #3天之前的日期
backup_dir=$backup_location/$service_name #备份文件夹全路径
welcome_msg="Welcome to use MySQL backup tools!" #欢迎语
#记录开始时间
start=`date +%Y-%m-%d_%H:%M:%S`
#开始时间
echo -e "开始执行备份:$start" >> $backup_location/auto_backup.log
# 判断MYSQL是否启动,mysql没有启动则备份退出
mysql_ps=`ps -ef |grep mysql |wc -l`
mysql_listen=`netstat -an |grep LISTEN |grep $mysql_port|wc -l`
if [ [$mysql_ps == 0] -o [$mysql_listen == 0] ]; then
echo "ERROR:MySQL is not running! backup stop!"
exit
else
echo $welcome_msg
fi
# 连接到mysql数据库,无法连接则备份退出
mysql -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_password < <end
use mysql;
select host,user from user where user='root' and host='localhost';
exit
end
flag=`echo $?`
if [ $flag != "0" ]; then
echo "ERROR:Can't connect mysql server! backup stop!"
exit
else
echo "MySQL connect ok! Please wait......"
# 判断有没有定义备份的数据库,如果定义则开始备份,否则退出备份
if [ "$backup_db_arr" != "" ];then
#dbnames=$(cut -d ',' -f1-5 $backup_database)
#echo "arr is (${backup_db_arr[@]})"
for dbname in ${backup_db_arr[@]}
do
echo "database $dbname backup start..."
`mkdir -p $backup_dir`
`mysqldump -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_password $dbname --default-character-set=$mysql_charset | gzip > $backup_dir/$dbname-$backup_time.sql.gz`
flag=`echo $?`
if [ $flag == "0" ];then
echo "database $dbname success backup to $backup_dir/$dbname-$backup_time.sql.gz"
else
echo "database $dbname backup fail!"
fi
done
else
echo "ERROR:No database to backup! backup stop"
exit
fi
# 如果开启了删除过期备份,则进行删除操作
if [ "$expire_backup_delete" == "ON" -a "$backup_location" != "" ];then
#`find $backup_location/ -type d -o -type f -ctime +$expire_days -exec rm -rf {} \;`
`find $backup_location/ -type d -mtime +$expire_days | xargs rm -rf`
echo "Expired backup data delete complete!"
fi
#记录结束时间
end=`date +%Y-%m-%d_%H:%M:%S`
echo -e "结束执行备份:$end\n" >> $backup_location/auto_backup.log
#发送方糖通知
echo "weixin 推送"
curl -d "text=
Mysql数据库备份完成
&desp=
Mysql数据库($service_ip)备份完成!
$service_name
开始时间:$start ---> 结束时间:$end" https://sc.ftqq.com/$server_key.send
echo "All database backup success! Thank you!"
exit
fi
赋予可执行权限
chmod -R 0777 mysql-bak.sh
3、备份服务器设置
登陆备份服务器(11.11.11.11)
3.1、安装rclone
创建挂载google dirve的目录
#挂载google dirve的目录
mkdir ggbak
chmod -R 0777 ggbak
剩下的看文章太长了,懒得重复写了!
具体怎么做请看以前Sand写的
3.2、设置和Web服务器同步和上传gg的脚本
创建目录
#和Web服务器同步的目录
mkdir webbak
chmod -R 0777 webbak
vim gd.sh
脚本内容如下:
#!/bin/bash
#server酱申请key http://sc.ftqq.com/
server_key=123456789 #server酱申请key http://sc.ftqq.com/
#备份服务器设置
service_1=10.10.10.10
service_1_prot=2222
#服务器设置开始,多台自己增加
echo "开始拉备份了,注意别停电"
rsync -avzP -e 'ssh -p 2222' root@$service_1:/root/webbak /root
#服务器设置结束
echo "移动到google Drive"
#需要双备份请用cp,不需要双备份用mv
cp /root/webbak/* /root/ggbak/
echo "删除N天前的数据"
find /root/webbak -mtime +1 -type f -name 'Web_*.gz' |xargs rm -rf
echo "转移结束"
curl -d "text=
你的备份数据已经上到Google Drive
&desp=
你的备份数据已经上到Google Drive
$service_1:$service_1_prot 备份完成
开始时间:$start ---> 完成时间:$end" https://sc.ftqq.com/$server_key.send
4、设置备份时间
我们这里利用到cron这个功能
cron具体怎么用请看这个文章:https://blog.e9china.net/share/linuxjihuarenwucrontabshilixiangjiejiaochengzhuanzai.html
编辑crontab
crontab -e
最后一行加入脚本
0 3 * * * bash /root/gd.sh >> /root/gd.log
web服务器和备份服务器加入相对于的脚本。这里就懒得一一说明了!这样你都理解不了,那就改行吧!
5、题外话
由于Sandy是多台服务器分开,而且很多服务器都是伪静态的。
所以web的数据备份不是那么重要,那么和mysql备份的时间就不一样。
那么脚本执行时间也不一样,所以Sandy把脚本分开来写。
如果你的mysql和web需要每天备份可以把mysql和web的备份脚本合二为一!