线上私有化部署,服务器被黑,数据库和备份库都被清理,顿时心塞!吃一堑长一智,记一次异地备份过程:

注:服务器为Linux CentOS 7.5

首先做mysql自动备份:

mysql备份数据库脚本(不做详述):

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天的备份):

mysql异地分布式集群方案 mysql异地容灾方案_mysql异地分布式集群方案_02

#!/bin/bash
find /data/facedb_bak/ -mtime +10 -name "*" -exec rm -rf {} \; #删除/data/facedb_bak/该路径下所有超过10天的文件,可根据实际情况修改
备份和删除写入定时任务:

mysql异地分布式集群方案 mysql异地容灾方案_定时任务_03

搭建nginx服务,作服务器备份文件路径映射,配置文件如下:

mysql异地分布式集群方案 mysql异地容灾方案_数据库_04

  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配置的用户验证账号密码:

mysql异地分布式集群方案 mysql异地容灾方案_定时任务_05

 登陆后如图所示:

mysql异地分布式集群方案 mysql异地容灾方案_服务器_06

 此时,可点击下载相应文件。

可在备份服务器(能联网即可),写脚本和定时任务自动下载备份文件到本地!

脚本如下:

mysql异地分布式集群方案 mysql异地容灾方案_mysql异地分布式集群方案_07

#!/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配置修改)即可,适合本地虚拟机或小型服务器做线上服务异地备份!

本人菜鸟,分享一下,不喜勿喷!