线上私有化部署,服务器被黑,数据库和备份库都被清理,顿时心塞!吃一堑长一智,记一次异地备份过程:
注:服务器为Linux CentOS 7.5
首先做mysql自动备份:
mysql备份数据库脚本(不做详述):
#!/bin/bash
HOSTNAME="127.0.0.1"
PORT="3306"
USERNAME="root"
PASSWORD="passwd"
DBNAME="deka"
/data/mysql/bin/mysqldump -u${USERNAME} -p${PASSWORD} ${DBNAME} | gzip > /data/db_bak/${DBNAME}_$(date +%Y%m%d_%H%M%S).sql.gz
为了避免每天备份时间一久占用磁盘空间过多,自动删除脚本如下(保留最近10天的备份):
#!/bin/bash
find /data/facedb_bak/ -mtime +10 -name "*" -exec rm -rf {} \; #删除/data/facedb_bak/该路径下所有超过10天的文件,可根据实际情况修改
备份和删除写入定时任务:
搭建nginx服务,作服务器备份文件路径映射,配置文件如下:
server {
listen 9010; #端口
server_name 127.0.0.1; #服务名
charset utf-8; # 避免中文乱码
root /data/facedb_bak/; #显示的根索引目录,注意这里要改成你自己的备份路径,做路径映射
location / {
auth_basic "please sign in"; #用户验证
auth_basic_user_file /home/nginx-1.18.0/conf/.htpasswd; #用户验证的账号密码所在路径和文件(需要创建),且加密方式为htpasswd(百度搜索即可),加密算法为:Ctypt
autoindex on; #开启索引功能
autoindex_exact_size off; # 关闭计算文件确切大小(单位bytes),只显示大概大小(单位kb、mb、gb)
autoindex_localtime on; # 显示本机时间而非 GMT 时间
}
}
服务器开通外网端口,可直接IP+端口访问,如图所示:
账号密码为nginx配置的用户验证账号密码:
登陆后如图所示:
此时,可点击下载相应文件。
可在备份服务器(能联网即可),写脚本和定时任务自动下载备份文件到本地!
脚本如下:
#!/bin/bash
USER="user" #用户验证账号
PASSWD="passwd" #密码
#DBNAME="deka" #备份的文件名(备份时用的库名则为库名,下载链接未使用可注掉)
URL="192.168.1.20:9010" #服务器IP地址和端口
echo "下载页面"
wget --http-user=${USER} --http-passwd=${PASSWD} http://${URL}/
mkdir dbbak
cat index.html | sed -r 's/.*"(.+)".*/\1/' > ./dbbak/a.txt #此处为截取字符串,初学者写的比较LOW,希望大神协助优化
tail -n 3 ./dbbak/a.txt > ./dbbak/b.txt
head -n 1 ./dbbak/b.txt > ./dbbak/c.txt
MATCH=$(cat ./dbbak/c.txt)
echo $MATCH
echo "开始下载"
wget --http-user=${USER} --http-passwd=${PASSWD} http://${URL}/${MATCH}
rm -rf index.html dbbak
注:此脚本为下载最新的备份文件,写的比较潦草,望大神优化
接下来,跑定时任务,执行脚本即可!
crontab -e
50 23 * * * /data/script/db_bak.sh #每天晚上23.50执行该脚本
定时任务跑的脚本,下载的备份文件会自动到定时任务的用户目录里,可修改定向下载即可。
注:此处也可做定时删除备份
为了安全起见外网数据库端口(默认3306)都需要关闭,可根据以上方法进行异地备份,异地备份的服务器只需要能访问数据库备份服务器9010端口(nginx配置修改)即可,适合本地虚拟机或小型服务器做线上服务异地备份!
本人菜鸟,分享一下,不喜勿喷!