请问一下,多个分公司的MYSQL数据库,怎么同步呢?不同城市。

go522000 发布于 2012/04/04 10:21
阅读 7K+
收藏 3

是一个数据管理系统,在附近几个城市开了多个分公司,每一分公司有一台主服务器,放APACHE + PHP + MYSQL。

现在遇到的情况是,MYSQL使用一主多从同步的话,除了总公司有固定IP外,其它分公司都没有固定IP,这没办法设置啊。设置MYSQL集群也一样,没有固定IP。

请问,有什么办法,让MYSQL连接总公司的数据库,如果本地有添加更新数据,总公司也跟着更新,并通知其它分公司更新?

或者有什么办法,设置动态IP的MYSQL集群?

还是有什么更好的办法可以解决 多个分公司的数据同步吗?

求大侠们指点一下,谢谢了。

以下是问题补充:

@go522000: 这几天谢谢大家的热情帮忙。我之前对问题没有进行详细的描述,所以才造成一些误会,真对不起大家。 为什么要制作这个功能,原因是这样的。总公司有一台WEB服务器,存放这个数据管理系统,还有公司的门户网站。之前分公司的用户就是通过仿问网站一样,直接仿问总公司的域名进入管理系统,这样很容易。 但这使用过程中出现一些问题。域名是从新网互联注册的,去年春节底新网互联的DNS被攻击,导致分公司打不开网站,只能打电话问总公司,取得IP地址去仿问。(这事后来改用DNSPOD.CN的DNS功能后,这段时间使用,暂时没有DNS解析问题。)还有就是去年也有分公司一些人反应说,有时会打不开管理系统,很卡很慢。这事远程查了他们电脑后,发现是他们那边开了PPS,虽然关了PPS主窗口不看电影,但后台ppsap.exe进程还在占用流量,导致系统打开很慢。(这事让分公司用户,打开360流量监控或QQ管家流量监控,发现跟工作无关占大流量的进程就结束掉,暂时解决问题。)这服务器最先是放在揭阳市本地一家服务器托管公司,这家公司有另一台服务器被攻击,导致同机房的的其它服务器都宽带速度很慢。(这事了解到这家托管公司机房没有硬防,技术力量也不够,就把服务器搬到汕头市另家大企业机房,解决问题。) 经过上面那些意外情况后,今年领导就要技术部解决这个问题。要求,当总公司的数据库不小心停了,或者分公司的宽带断了,用户依旧可以添加信息,查看之前同步的数据。等宽带重新连接后,再同步到其它分公司。。。 这个,就是为什么要跟各分公司同步MYSQL的起因!!! (2012/04/06 14:58)
@go522000:关于很多朋友谈到的花生壳,动态域名。。。之所以不想使用,是跟公司的业务有关。因为总公司只负责生产与发货,分公司就是那些不同城市加盟的公司。他们有多少店面,每个店面销售情况如何,总公司不必知道。所以,最理想的情况就是用户下载安装包,填写属于是某个公司的用户就成了。而不需要分公司新开一家分店面就告诉我们一声,然后我们这边到配置文件添加新动态域名,然后重启MYSQL生效。。。 (2012/04/06 15:23)
加载中
1
中山野鬼
中山野鬼

引用来自“木人mr”的答案

我觉得你在偷换概念。
按照我的逻辑,如果可以用一个系统。就应该用一套系统。
WEB服务能应付你的业务需求吗?如果可以,就是着手处理负载以及安全问题。

看到你说如果总公司出问题,分公司停业这个问题。我觉得是逻辑错误。
如果你的程序总公司被破坏你又如何保证分公司不被破坏?

还有,WEB 服务会牵扯到带宽负载,解析,均衡这些问题,用你的想法。你认为用分散服务然后同步的方式来避免大范围影响。当然是可取的。你需要单独同步。

商店,超市,连锁销售。这类管理系统用到很多脱机管理,定点同步的方式。
这些是在设计之初就考虑到得。如果你的数据库设计之初没应付这样的问题。看来这种脱机管理的方式面临的压力会很大。

我大胆的设想,你每个分公司内网带宽足够高,外网带宽有限不足以应付远程系统。
所以你需要扩展。我觉得可以理解。 这样你完全可以采用分公司独立 Web 服务器调用远程 Mysql 数据库方式。
数据库的主从热备份是在局域网高带宽情况下采用的方案。把数据库服务分散开就不要用主从热备份了。远程的只能考虑定点同步的方案。
不妄加评判别人的逻辑。 知道你目前采用的方案能应付你的需求,你只是想获取更好的方案。
我也只是给你我的建议。 希望对你有帮助。

你的观点中有几个我认为值得商榷的。之所以说商榷是因为在一定范围下,你的观点是对的。但是在复杂系统下,你的观点无法展开。

1、一个系统,不代表一套完全一样的软件在系统每个结点存在。典型的例如你说的WEB服务。SERVER和client就是两套不一样的东西。服务集群也是一样的。比较典型的是大型网络游戏的服务器。不是每台服务器承接的服务内容都是一样的。

2、总公司出问题,分公司是否也算出问题,这回到了管理机制方面。如果中央集中式,你的逻辑是对的,也就是说,总公司瘫了,分公司如果还能保存完好是逻辑错误。但是诸如联邦制,就不一样了。这种情况往往是在集团企业里存在。集团下各个子公司是独立运营的,集团总部并不承担下属企业的运营服务义务。只是需要灵活获取各个企业的运营数据。这种情况下,总部和分部的系统甚至是完全不一样的。其实是角色不一样,一个是监督管理者,一个是执行者。如同今天生产线经理生病,不代表生产线就不转了。

3、WEB服务不是万能的。和面向对象一样,这年头确实有万能胶,但没有真正的万金油。特定的任务目标到了一定规模,万能胶就不行了,只能是原型时可以做个摆设。

4、国内企业和国外企业有很大不同。国内是人管制度,国外是制度管人,因此,国内的系统,更要求灵活。而灵活需要将改动落地在最小范围。架构的当初规划,就应当具备很好的伸缩性,但这种伸缩性肯定无法简单的用WEB服务,或某套系统来框定。更应该用模块堆叠的思想,使得改动范围能被描述在有限空间内发生,从而对整体系统影响最小。

0
弦歌
弦歌
应该必须要有固定IP,不行的话采用花生壳之内的DDNS动态域名解析也行。
0
c
compamd

如果采用 vpn组网 ,就不会有这个烦恼了

0
go522000
go522000

唉,好杯具。。。现在考虑到的办法就是,当分公司用户插入数据的时候,向hms_operation_records记录表写入一条操作记录,使用软件,第一分钟判断是否更新到总公司服务器。软件还每一分钟查询总服务器哪些是其它分公司更新的,本地还没有的,就下载来插入到数据库。

----------------------------------

不过,表设计这样。。。有一个is_update列,如果更新到总公司数据库就为1,没有更新到总公司就为0。

现在就在考虑,怎么判断哪一些是其它公司更新的,本地还没有的???

求指点。

0
一号男嘉宾
一号男嘉宾

我跟你有一样的需求,有些朋友给了答案,可是我还是不知道怎么做好

http://www.oschina.net/question/101460_45669

0
欣儿
欣儿
分公司拿个固定IP来作为更新的IP就行啦啊
0
itsusony
itsusony

用vpn,然后master slave同步啊。

或者公网IP直接同步。

固定IP么就直接用固定IP,动态IP么,自动做个IP更新脚本,变了后自动运行下change master to就好了

0
go522000
go522000

这几天一直在考虑怎么解决这个问题。

当本地添加一条记录的时候,向总公司数据库也进行相应操作,这个是向主服务器更新的情况,很容易实现。

接下来就要处理如何从主服务器向本地服务器更新,我想判断本地/MYSQL/data/ *.myd  中所有MYD文件的修改时间,与总公司数据库对应文件的时间进行比较。如果本地小于远程文件时间,就是远程有更新文件了。然后将整个info表的ID转为JSON,发送到服务器与服务器的info表的ID循环比较一下,把不存的ID下载到本地插入。这样的话,假设以后数据变多的时候,那每一次发送的JSON数据太大了,服务器进行循环比较也太占资源了,而且这样只能判断添加与删除,不能判断哪个修改过了。。。头痛啊。。。

下班了,回家再实验一下,看看怎么优化。

0
中山野鬼
中山野鬼

你这个事情和MYSQL没有太多关系。实际上是个集群的问题。有点肯定,你肯定需要个固定IP,或者类似花生壳的东西。

有不同的需求,存在不同的解决方案。你的需求是,指定分公司的服务器存储指定的内容,还是无所谓。也就是说。假设你上海的MYSQL服务器,只接收上海分公司,或华东区的数据上传,而该服务器是动态IP,还是无论存哪都行,哪怕是存在北京的服务器上。

这个需求不同,后面谈方案都是胡扯。

0
程明东
程明东
你这种场景应该用mysql cluster方案解决,因为你这已经不仅是master/slave的问题了,而是每个库都互为master,用集群方案比较好
返回顶部
顶部