回覆列表
  • 1 # 此生唯一

    描述中的這種需求可以說是非常常見的了!

    場景:隨著資料的爆炸產生,分散式儲存系統,分散式服務,分散式快取等成為技術主流,單資料庫來看,分庫分表也成為一種防止單庫效能瓶頸和宕機導致資料丟失最常用的手段!但是分庫分表之後,資料往往分佈在不同的伺服器上,對於sql關聯查詢,資料統計,核心資料存檔等都會有一定的影響,而最好的方法是將所有的資料冗餘到一張表中,方便查詢和儲存!

    怎麼定期同步不同庫表(A,B,C)中的資料到一張表中()呢?

    方法一:程式碼實現

    1,將A,B,C三個庫的連線資訊分別配置在配置在配置檔案中作為不同的資料來源!

    2,將資料來源注入到同步類中!

    3,使用多執行緒非同步從A,B,C中查詢資料並寫入到D中,失敗狀態不改,並且重試或者報警!

    **注意**:1,分庫分表的ID應該是唯一的保證同步的是時候資料不同;2,使用多執行緒或者批處理框架加快效率;3,應該在A,B,C中加入欄位isSyn(是否同步成功),在D成功返回插入ID時,置為true,不成功的可以重試,保證資料一致性!4,複製的資料應該為前一天的(增量複製)!

    方法二:中介軟體實現:

    使用資料庫中介軟體來實現增量資料同步,例如canal,可以實現在資料binlog日誌產生時,透過複製log日誌,將資料快速可靠的同步到需要的資料庫中!

    很多技術分享,持續更新,敬請關注。。。

  • 2 # 啟迪雲Tuscloud

    一、MySQL 雙機同步複製

    MySQL 支援單向、非同步複製,複製過程中一個伺服器充當Master,而一個或多個其它伺服器充當Slave。Master 將更新寫入二進位制日誌檔案,並維護日誌檔案的一個索引以跟蹤日誌迴圈。當一個Slave 連到Master 時,它通知Master,Slave 在日誌中讀取的最後一次成功更新的位置。Slave 接收從那時起發生的任何更新,然後封鎖並等待Master 通知下一次更新。

    兩臺分佈於異地的主機上安裝有MySQL 資料庫,兩臺伺服器互為主備,當其中某個節點出現故障時,另一節點能接管伺服器上的應用,這就需要兩節點的資料實時保持一致,使用MySQL 的同步功能實現雙機同步複製。

    二、配置規範

    根據需要在兩個節點上配置雙機互備,相關資訊如下:

    三、環境確認

    作業系統選擇CentOS 6.4 x86_64 版本,MySQL 版本為5.6.23。依以下步驟確認兩個節點的環境:

    3.1. 核心及釋出版

    備註:若使用過yum 升級,系統將自動升級最新源的版本。

    3.2. /etc/hosts

    3.3. 防火牆及 enforce配置

    備註:可修改/etc/selinux/config 中的 SELINUX=disabled,但不推薦停止防火牆

    3.4. 確認MySQL

    四、MySQL雙節點同步設定

    4.1. 建立日誌檔案並授權

    --分別在兩個節點執行

    touch /var/lib/mysql/mysql-bin.log

    chmod 755 /var/lib/mysql/mysql-bin.log

    chown -R mysql:mysql /var/lib/mysql/mysql-bin.log

    4.2. 編輯/usr/my.cnf

    --分別在兩個節點執行 vi /usr/my.cnf

    [client]

    default-character-set=utf8

    [mysqld]

    lower_case_table_names=1

    default-storage-engine=INNODB

    character-set-server=utf8

    collation-server=utf8_general_ci

    log-bin=/var/lib/mysql/mysql-bin.log

    server-id=1 --此處 usdb6 設定為 1, 但usdb7必須將它改為2

    binlog-ignore-db=information_schema,mysql,performance_schema

    auto-increment-increment=2

    auto-increment-offset=1--此處 usdb6 設定為 1, 但usdb7 必須將它改為 2

    4.3. 重啟MySQL

    4.4. 同步帳號的授權

    master節點

    grant replication slave on *.* to "slave"@"172.168.56.7" identified by "oracle";

    slave 節點

    grant replication slave on *.* to "slave"@"172.168.56.6" identified by "oracle";

    4.5. 啟動 slave程序

    master 節點

    stop slave;

    change master to master_host="172.168.56.7",master_user="slave",master_password="oracle"; start slave;

    slave 節點

    stop slave;

    change master to master_host="172.168.56.6",master_user="slave",master_password="oracle"; start slave;

    4.6. 驗證連線狀態

    usdb06節點 show slave status\G;

    usdb07節點 show slave status\G;

    五、測試

    5.1. usdb06節點建表

    在eps 庫下,建立測試表my-test:

    usdb07 節點驗證

    多出my-test 表,結構與master 節點上定義一致。如下:

    5.2. usdb07 節點DML

    在usdb07節點DML並提交。

    usdb06 節點驗證, 查詢發現此兩條記錄存在。如下:

    透過上述驗證,表明usdb06、usdb07 兩個節點的雙向複製已成功。

  • 中秋節和大豐收的關聯?
  • 《魔卡少女櫻》裡有什麼細思恐極的細節?