内网后台同步到线上(灵机一动篇)
内网后台同步到线上(灵机一动篇)
写这篇文档其实我是有点不好意思的,此刻应该是附一张狗图 。
今天,我发现一个惊天大秘密,感谢开发的醍醐灌顶。话说我去复检之前做的:公司内网后台同步到线上的运行情况,登陆到同步到线上的后台,进去之后,发现内容页上的文章发布没有今天的,但公司内网的后台(这个才是正式版,线上做的是应对停电备用版),如下图
我就问开发,这个菜单的数据是存到哪里的,他说是内网数据库。我想想这个数据库同步到线上是每天两次(凌晨和中午各一次),因为导出太慢了,如下
他说为啥慢,问我不是从内网数据库的机器执行的么,导完再传到线上。我说是内网那机器用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次都不成问题。同步完之后,后台内容页当天发布的文章果然出来了。