数据同步给第三方系统的方案探索
数据同步给第三⽅系统的⽅案探索
本⽂来⾃:
1.问题提出
在需给第三⽅提供某些表的数据同步更新时,例如做平台的系统,需要给上层的CRM系统提供某些表的数据时,⼤家⼀般如何采取如何⽅案呢?另外,如果上层的系统有多家,分别⽤于多种⽤途时,应该提供何种⽅式让别⼈的数据得到同步?
2.解决⽅案
2.1 采⽤数据库的同步功能触摸屏笔记本
2.1.1 ⽅案描述
该⽅案利⽤了各种数据库的数据同步功能,例如MySql和Sql Server等数据库都具有数据库或表同步的功能,这种情况需要在需要同步的机器上创建需要同步的表的结构。该功能也⽤在当我们的系统有主从数据库的情况下的数据同步问题。使⽤该⽅案的优点是:
1)不需要⾃⼰编写程序;
2)可以多个从机过来同步某些表。
使⽤该⽅案的缺点是:
1)⽐较依赖于数据库的功能,若两者的数据库不⼀样时,可能不能成功配置;
2)需要改变主数据库的服务器的配置;
3)要同步的表的结构必须完全⼀致。
该种⽅案的⽰意图参考如下:
2.1.2 ⽅案举例
MySql数据库⽀持数据同步,可同步其中的某些表,不过需要在第三⽅的数据库和需要进⾏同步的数据库中进⾏配置。
假设有两台MySQL服务器192.168.2.89和192.168.2.170,两台服务器都是Linux环境下的,两台服务器的配置⼀样,将
192.168.2.89作为Master(主)数据库,将192.168.2.170作为slave(从)数据库,此时采⽤单步同步的⽅式即可,即是Slave数据库服务器主动去Master同步数据。
⾸先在Master数据库(192.168.2.89)中到myf配置⽂件的⽬录(笔者这⾥为/etc/myf),修改该⽂件的内容,在其后添加如下两⾏(第⼀⾏表⽰同步⽅式,第⼆⾏表⽰要同步的数据库为smp):
sql-bin-update-same
水杯什么牌子好binlog-do-db=smp
为了使得配置⽣效,需要将Master数据库服务器重启⼀下,参考命令如下:
mysql.server restart
Master数据库配置完毕以后,接着开始配置Slave数据库服务器(192.168.2.170),⾸先也是需要编辑/etc/myf⽂件,到如下⾏:
server-id      = 1
修改该⾏,并添加如下⼀些⾏,添加内容如下:
server-id                  = 2          //本MySQL是slave服务器
master-host            = 192.168.2.89    //master服务器的IP
master-user            = mysql          //连接master服务器的⽤户
淘宝网怎么购物master-password  = mysql123            //连接master服务器的密码
master-port              = 3306            //连接端⼝
master-connect-retry    = 10              //重试次数
replicate-do-db        = smp:test_mysql //同步数据库表为smp库的test_mysql表
log-slave-updates                          //同步的形式
修改完毕后,使⽤同样的⽅法重启⼀下从机的数据库。但是笔者发现重启以后,从机的MySql的/home/mysql/var/
报出了如下的错误,并没有重启成功:
101223 20:37:01 [ERROR] Error reading packet from server: log event entry exceeded max_allowed_packet; Increase max_allowed_packet o身份证贷款
n master ( server_errno=1236)
101223 20:37:01 [ERROR] Slave I/O: Got fatal error 1236 from master when reading data from binary log: 'log event entry exceeded max
_allowed_packet; Increase max_allowed_packet on master', Error_code: 1236
查⽹上资料才知,原来是两个机器的myf的max_allowed_packet 配置都是1M,太⼩,可将其都改成16M,接着按如下顺序执⾏重启主从服务器:注意:我实践时发现还有点问题,请⼤家先不⽤使⽤该⽅案尝试。
日军死在中国的将军注意:因为同步的是smp库的test_mysql表,所以⾸先需要在两个主机smp数据库中都有名为test_mysql的表,笔者⽤了创建了个简单的test_mysql表,参考语句如下:
create table test_mysql
(
id  integer not null auto_increment,
name varchar(32) not null,
primary key (id)
);
若要测试是否成功配置,最简单的办法是在Master数据库(192.168.2.89)的该表中插⼊⼀条数据,看看是否从机的该表
(192.168.2.170)也插⼊了对应的数据。
2.2 同步写⼊FTP⽬录⽂件
2.2.1 ⽅案描述
在笔者的开发过程中,也遇到过这种情况:第三⽅接了多家平台,有些信息(例如话单信息)的写⼊格式都已经由这个第三⽅统⼀定义好了,需要在实时写⼊到指定的FTP⽬录下,由他们那边的程序每隔⼀⼩时或半⼩时等⾃⾏抓取和删除。参考⽰意图如下所⽰:
2.2.2 ⽅案实现建议
可以让平台在本地写⼊同步信息(例如话单信息)时,实时触发⼀个或多个程序,按照第三⽅定义的格式写⼊到指定的FTP⽬录下。或者每隔⼀段时间(⽐对⽅取⽂件的间隔时间⼀样或者更短)触发程序,将话单信息写⼊到FTP⽬录下。
对于数据量很⼤的情况,⼀般采⽤分⼩时写⼊⽂件,并有对应的⼩时汇总⽂件,告知该⼩时需要读取的是哪⼏个⽂件。删除⽂件操作⼀般让第三⽅平台取完后⾃⾏删除。
为了以后核对数据的⽅便或应对异常的情况,在写⼊FTP⽬录下的⽂件时,最好在本地⽬录写⼊与同步给第三⽅的⽂件同样的⽂件内容。
2.3 ⾃编程接收更新语句更新数据表
2.3.1 ⽅案描述    该⽅案需要⾃⼰编写程序来来对⼀个或多个第三⽅系统的数据进⾏更新或插⼊操作。
2.3.2 ⽅案实现建议
程序设计之初,需要考虑多个问题,例如:
1)同步表采⽤配置⽂件配置
配置哪些表触发第三⽅系统进⾏同步,需要能够灵活配置在配置⽂件中。
2)触发动作可配置
为了备份⽅便,应该能进⾏多种操作。例如只写第三⽅库、写⼊第三⽅库时还要写⼊本地的备份⽂件中。
明星蜡像
3)触发程序需要灵活配置
为了应对本平台的表结构与第三⽅平台不⼀致,或需要查询⼀些信息后再插⼊或更新的情况,还需要
⽀持在某个表的触发事件发⽣时,触发哪个程序能够配置指定,默认时可采⽤默认的程序(⼀般是运⾏语句直接插⼊或更新第三⽅系统)。
4)第三⽅系统的数据库配置可配性
需要同步数据的第三⽅系统可以为多个,这些数据库配置信息应该可以在配置⽂件中灵活配置的。 5)触发时机可配
是每半⼩时、⼀⼩时还是实时触发,应该是可配置的。
3.参考⽂章
1)《Mysql两个数据库之间的同步以及指定表之间的同步》:
2)《教你怎样在两台MySql数据库之间实现同步》

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。