<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
    版權所有,轉載請注明出處:http://www.tkk7.com/amigoxie/archive/2010/12/24/341482.html

    1.    問題提出

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

    2.    解決方案

    2.1 采用數據庫的同步功能

    2.1.1 方案描述 
       該方案利用了各種數據庫的數據同步功能,例如
    MySqlSql Server等數據庫都具有數據庫或表同步的功能,這種情況需要在需要同步的機器上創建需要同步的表的結構。該功能也用在當我們的系統有主從數據庫的情況下的數據同步問題。使用該方案的優點是:

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

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

    使用該方案的缺點是:

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

    2)需要改變主數據庫的服務器的配置;

    3)要同步的表的結構必須完全一致。

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

    2.1.2 方案舉例
           MySql數據庫支持數據同步,可同步其中的某些表,不過需要在第三方的數據庫和需要進行同步的數據庫中進行配置。

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

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

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

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

    mysql.server restart

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

    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/ 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

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

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

    create table test_mysql 

        id   
    integer not null auto_increment,
        name 
    varchar(32not 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兩個數據庫之間的同步以及指定表之間的同步》:

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

    2)《教你怎樣在兩臺MySql數據庫之間實現同步》

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

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

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

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

    留言簿(263)

    隨筆分類

    隨筆檔案

    文章分類

    相冊

    關注blog

    積分與排名

    • 積分 - 2294312
    • 排名 - 3

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲视频在线视频| 国产精品偷伦视频观看免费| 老汉色老汉首页a亚洲| 波多野结衣一区二区免费视频| 特级无码毛片免费视频尤物 | 精品亚洲永久免费精品| 亚洲AV性色在线观看| 99re6在线精品免费观看| 亚洲伊人久久大香线蕉AV| 亚洲精选在线观看| 国产亚洲无线码一区二区| 四虎免费永久在线播放| 免费被黄网站在观看| 114一级毛片免费| 在线看无码的免费网站| 免费a级毛片无码a∨免费软件| 添bbb免费观看高清视频| 国产亚洲人成无码网在线观看| 国产免费观看黄AV片| 午夜免费不卡毛片完整版| 免费观看成人毛片a片2008| 亚洲免费在线视频播放| 最近免费字幕中文大全视频| 可以免费观看的毛片| 久久国产乱子伦精品免费强| EEUSS影院WWW在线观看免费| 成人a毛片免费视频观看| 噜噜噜亚洲色成人网站| 亚洲aⅴ无码专区在线观看 | 国产三级在线免费| 两个人看的www免费| 国产免费网站看v片在线| 中文字幕久精品免费视频| 嫩草在线视频www免费看| 青柠影视在线观看免费高清| 日本免费在线中文字幕| 日本卡1卡2卡三卡免费| 亚洲精品国产免费| 中文字幕影片免费在线观看| 免费无码精品黄AV电影| 日韩免费视频在线观看|