内网后台同步到线上(灵机一动篇)

内网后台同步到线上(灵机一动篇) 

  写这篇文档其实我是有点不好意思的,此刻应该是附一张狗图 

  今天,我发现一个惊天大秘密,感谢开发的醍醐灌顶。话说我去复检之前做的:公司内网后台同步到线上的运行情况,登陆到同步到线上的后台,进去之后,发现内容页上的文章发布没有今天的,但公司内网的后台(这个才是正式版,线上做的是应对停电备用版),如下图

 

   我就问开发,这个菜单的数据是存到哪里的,他说是内网数据库。我想想这个数据库同步到线上是每天两次(凌晨和中午各一次),因为导出太慢了,如下

 他说为啥慢,问我不是从内网数据库的机器执行的么,导完再传到线上。我说是内网那机器用ngrok反向代理数据库端口到公网,再用定时脚本在线上服务器上运行,同步到线上的:

 (1)导出mysql数据(ngrok公网代理内网数据库端口,用域名的形式连接)

 (2)导入线上数据库(线上天翼云内网ip+端口)

突然我也发现他说的有道理,在内网做定时同步会快很多。

原因如下:

(1)反向代理ngrok,用的是5M固定带宽阿里云的机器;这个反向代理开发演示也用到,还有别的项目,例如爬虫抓取数据也用到,是ngrok的泛域名,但是带宽应该都会影响到。所以慢就是因为导出数据的时候,带宽不太够。而线上数据库虽然是借助一台公网服务器做的端口转发,公网服务器出口带宽用的是共享100M,而且只有另一台机器一起用这条线路,怎么说,100M的共享带宽 >> 5M固定带宽

数据库有2G大小,内网导出来很快,因为我们公司宽带买的是200M,服务器出口测过也有100M 

(2)线上天翼的数据库早就开了公网连接,因为开发经常要连查数据;所以不存在说要额外开端口,增加被攻击的风险。

改成去内网数据库服务器跑的定时任务脚本,确实快了很多,从半个小时缩减到10分钟不到,同步速度提升70%

#!/bin/bash
## 内网数据库同步到线上天翼数据库
## 线上脚本改到内网运行,提升速度
## update on 20210525 by ljy

Dump='/usr/local/mysql/bin/mysqldump'

local_ip='127.0.0.1'
local_port=3306
local_bak='/root/data_bakup/mysql_131'
[ ! -d ${local_bak} ] && mkdir -p ${local_bak}

LogFile='/root/data_bakup/mysql_131/bak.log'
Begin=`date +"%Y年%m月%d日_%H:%M:%S"`

echo "$Begin xxx正式数据库开始备份。。。" >> ${LogFile}

local_user=
local_pwd='xxx'
db='数据库名'

## 换成公网天翼云 ip
remote_ip=公网天翼云数据库ip
remote_port=公网天翼云数据库端口
remote_user=
remote_pwd='xxx'

export LANG=en_US.UTF-8
Date=`date +%Y%m%d_%H%M`
DumpFile=$Date.sql


### 1、备份内网数据库
${Dump} -u${local_user} -p${local_pwd} -h${local_ip} -P${local_port} ${db} > ${local_bak}/${db}_${DumpFile}

### 2、导入到线上mysql
mysql -u${remote_user} -p${remote_pwd} -h${remote_ip} -P${remote_port} ${db} < ${local_bak}/${db}_${DumpFile}


### 3、写入到日志
End=`date +"%Y年%m月%d日_%H:%M:%S"`
echo "$End xx正式数据库同步完成。。。" >> ${LogFile}
echo "############" >> ${LogFile}


### 4、定时删除备份的数据库
find ${local_bak} -type f -mtime +1 -exec rm -f {} \;

 

 

 另外因为这个速度也快了,所以改成1天同步3次都不成问题。同步完之后,后台内容页当天发布的文章果然出来了。

posted @ 2021-05-25 22:48  windysai  阅读(259)  评论(0编辑  收藏  举报