<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 297,  comments - 1618,  trackbacks - 0
     

    文:阿蜜果

    日期:2010-12-23
    版權(quán)所有,轉(zhuǎn)載請注明出處:http://m.tkk7.com/amigoxie/archive/2010/12/24/341482.html

    1.    問題提出

    在需給第三方提供某些表的數(shù)據(jù)同步更新時,例如做平臺的系統(tǒng),需要給上層的CRM系統(tǒng)提供某些表的數(shù)據(jù)時,大家一般如何采取如何方案呢?另外,如果上層的系統(tǒng)有多家,分別用于多種用途時,應(yīng)該提供何種方式讓別人的數(shù)據(jù)得到同步? 

    2.    解決方案

    2.1 采用數(shù)據(jù)庫的同步功能

    2.1.1 方案描述 
       該方案利用了各種數(shù)據(jù)庫的數(shù)據(jù)同步功能,例如
    MySqlSql Server等數(shù)據(jù)庫都具有數(shù)據(jù)庫或表同步的功能,這種情況需要在需要同步的機(jī)器上創(chuàng)建需要同步的表的結(jié)構(gòu)。該功能也用在當(dāng)我們的系統(tǒng)有主從數(shù)據(jù)庫的情況下的數(shù)據(jù)同步問題。使用該方案的優(yōu)點(diǎn)是:

    1)不需要自己編寫程序;

    2)可以多個從機(jī)過來同步某些表。

    使用該方案的缺點(diǎn)是:

    1)比較依賴于數(shù)據(jù)庫的功能,若兩者的數(shù)據(jù)庫不一樣時,可能不能成功配置;

    2)需要改變主數(shù)據(jù)庫的服務(wù)器的配置;

    3)要同步的表的結(jié)構(gòu)必須完全一致。

    該種方案的示意圖參考如下:
      

    2.1.2 方案舉例
           MySql數(shù)據(jù)庫支持?jǐn)?shù)據(jù)同步,可同步其中的某些表,不過需要在第三方的數(shù)據(jù)庫和需要進(jìn)行同步的數(shù)據(jù)庫中進(jìn)行配置。

    假設(shè)有兩臺MySQL服務(wù)器192.168.2.89192.168.2.170,兩臺服務(wù)器都是Linux環(huán)境下的,兩臺服務(wù)器的配置一樣,將192.168.2.89作為Master(主)數(shù)據(jù)庫,將192.168.2.170作為slave(從)數(shù)據(jù)庫,此時采用單步同步的方式即可,即是Slave數(shù)據(jù)庫服務(wù)器主動去Master同步數(shù)據(jù)。

    首先在Master數(shù)據(jù)庫(192.168.2.89)中找到my.cnf配置文件的目錄(筆者這里為/etc/my.cnf),修改該文件的內(nèi)容,在其后添加如下兩行(第一行表示同步方式,第二行表示要同步的數(shù)據(jù)庫為smp):

    sql-bin-update-same
    binlog-do-db=smp

    為了使得配置生效,需要將Master數(shù)據(jù)庫服務(wù)器重啟一下,參考命令如下:

    mysql.server restart

    Master數(shù)據(jù)庫配置完畢以后,接著開始配置Slave數(shù)據(jù)庫服務(wù)器(192.168.2.170),首先也是需要編輯/etc/my.cnf文件,找到如下行:

    server-id       = 1

     修改該行,并添加如下一些行,添加內(nèi)容如下:

    server-id                   = 2          //本MySQL是slave服務(wù)器
    master-host             = 192.168.2.89    //master服務(wù)器的IP
    master-user             = mysql           //連接master服務(wù)器的用戶
    master-password   = mysql123             //連接master服務(wù)器的密碼
    master-port              = 3306            //連接端口
    master-connect-retry    = 10              //重試次數(shù)
    replicate-do-db        = smp:test_mysql //同步數(shù)據(jù)庫表為smp庫的test_mysql表
    log-slave-updates                          //同步的形式

    修改完畢后,使用同樣的方法重啟一下從機(jī)的數(shù)據(jù)庫。但是筆者發(fā)現(xiàn)重啟以后,從機(jī)的MySql/home/mysql/var/ localhost.localdomain.err報出了如下的錯誤,并沒有重啟成功:

    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

    查網(wǎng)上資料才知,原來是兩個機(jī)器的my.cnfmax_allowed_packet 配置都是1M,太小,可將其都改成16M,接著按如下順序執(zhí)行重啟主從服務(wù)器:注意:我實踐時發(fā)現(xiàn)還有點(diǎn)問題,請大家先不用使用該方案嘗試。

    注意:因為同步的是smp庫的test_mysql表,所以首先需要在兩個主機(jī)smp數(shù)據(jù)庫中都有名為test_mysql的表,筆者用了創(chuàng)建了個簡單的test_mysql表,參考語句如下:

    create table test_mysql 

        id   
    integer not null auto_increment,
        name 
    varchar(32not null,
        
    primary key (id)
    );

    若要測試是否成功配置,最簡單的辦法是在Master數(shù)據(jù)庫(192.168.2.89)的該表中插入一條數(shù)據(jù),看看是否從機(jī)的該表(192.168.2.170)也插入了對應(yīng)的數(shù)據(jù)。

    2.2 同步寫入FTP目錄文件

     2.2.1 方案描述
        在筆者的開發(fā)過程中,也遇到過這種情況:第三方接了多家平臺,有些信息(例如話單信息)的寫入格式都已經(jīng)由這個第三方統(tǒng)一定義好了,需要在實時寫入到指定的
    FTP目錄下,由他們那邊的程序每隔一小時或半小時等自行抓取和刪除。參考示意圖如下所示:

            2.2.2 方案實現(xiàn)建議 
        可以讓平臺在本地寫入同步信息(例如話單信息)時,實時觸發(fā)一個或多個程序,按照第三方定義的格式寫入到指定的FTP目錄下。或者每隔一段時間(比對方取文件的間隔時間一樣或者更短)觸發(fā)程序,將話單信息寫入到FTP目錄下。

             對于數(shù)據(jù)量很大的情況,一般采用分小時寫入文件,并有對應(yīng)的小時匯總文件,告知該小時需要讀取的是哪幾個文件。刪除文件操作一般讓第三方平臺取完后自行刪除。

             為了以后核對數(shù)據(jù)的方便或應(yīng)對異常的情況,在寫入FTP目錄下的文件時,最好在本地目錄寫入與同步給第三方的文件同樣的文件內(nèi)容。

    2.3 自編程接收更新語句更新數(shù)據(jù)表

        2.3.1 方案描述
         該方案需要自己編寫程序來來對一個或多個第三方系統(tǒng)的數(shù)據(jù)進(jìn)行更新或插入操作。

        2.3.2 方案實現(xiàn)建議   

        程序設(shè)計之初,需要考慮多個問題,例如:

     1)同步表采用配置文件配置

    配置哪些表觸發(fā)第三方系統(tǒng)進(jìn)行同步,需要能夠靈活配置在配置文件中。

     2)觸發(fā)動作可配置

    為了備份方便,應(yīng)該能進(jìn)行多種操作。例如只寫第三方庫、寫入第三方庫時還要寫入本地的備份文件中。

     3)觸發(fā)程序需要靈活配置

    為了應(yīng)對本平臺的表結(jié)構(gòu)與第三方平臺不一致,或需要查詢一些信息后再插入或更新的情況,還需要支持在某個表的觸發(fā)事件發(fā)生時,觸發(fā)哪個程序能夠配置指定,默認(rèn)時可采用默認(rèn)的程序(一般是運(yùn)行語句直接插入或更新第三方系統(tǒng))。

     4)第三方系統(tǒng)的數(shù)據(jù)庫配置可配性

    需要同步數(shù)據(jù)的第三方系統(tǒng)可以為多個,這些數(shù)據(jù)庫配置信息應(yīng)該可以在配置文件中靈活配置的。

     5)觸發(fā)時機(jī)可配

           是每半小時、一小時還是實時觸發(fā),應(yīng)該是可配置的。

    3.    參考文章

    1)《Mysql兩個數(shù)據(jù)庫之間的同步以及指定表之間的同步》:

     http://www.360doc.com/content/06/1215/18/3500_295248.shtml

    2)《教你怎樣在兩臺MySql數(shù)據(jù)庫之間實現(xiàn)同步》

    http://www.ltesting.net/html/51/n-131551.html

    posted on 2010-12-24 17:11 阿蜜果 閱讀(3087) 評論(0)  編輯  收藏 所屬分類: Java解決方案
    <2010年12月>
    2829301234
    567891011
    12131415161718
    19202122232425
    2627282930311
    2345678

          生活將我們磨圓,是為了讓我們滾得更遠(yuǎn)——“圓”來如此。
          我的作品:
          玩轉(zhuǎn)Axure RP  (2015年12月出版)
          

          Power Designer系統(tǒng)分析與建模實戰(zhàn)  (2015年7月出版)
          
         Struts2+Hibernate3+Spring2   (2010年5月出版)
         

    留言簿(263)

    隨筆分類

    隨筆檔案

    文章分類

    相冊

    關(guān)注blog

    積分與排名

    • 積分 - 2295092
    • 排名 - 3

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲三级在线免费观看| 69xx免费观看视频| 亚洲国产精品日韩av不卡在线| 亚洲伊人久久精品影院| 性做久久久久免费观看| **aaaaa毛片免费| 在线观看黄片免费入口不卡| 亚洲av永久无码精品秋霞电影秋 | 久久精品国产亚洲香蕉| 亚洲乱码中文字幕手机在线 | 亚洲国产精品日韩在线观看 | 三年片在线观看免费大全电影 | 免费人成网站在线播放| 在线观看特色大片免费视频| 99视频有精品视频免费观看| 国产高潮久久免费观看| 色屁屁在线观看视频免费| 亚洲一区二区三区成人网站 | 久久久久久曰本AV免费免费| 免费视频成人手机在线观看网址| 亚洲精品视频免费 | 亚洲国产精品毛片av不卡在线 | 大桥未久亚洲无av码在线| 亚洲中文无码永久免| 亚洲AV成人噜噜无码网站| 亚洲福利电影一区二区?| 亚洲免费视频在线观看| 亚洲成AV人片一区二区密柚| 国产亚洲精品a在线观看app| 在线亚洲人成电影网站色www| 亚洲人成人无码网www国产| 亚洲高清偷拍一区二区三区| 亚洲A∨精品一区二区三区| 亚洲成A人片在线观看无码3D| 免费乱理伦在线播放| 亚洲国产综合人成综合网站| 四虎永久免费影院| 亚洲乱码日产精品a级毛片久久| 成人午夜亚洲精品无码网站| 亚洲国产精品特色大片观看完整版| 国产亚洲成AV人片在线观黄桃|