MySQL Multi-Source Replication實測

一、測試環境
  OS: Oracle Linux-6.5
  RAM: 4G
  mysql-5.7.7-rc-linux-glibc2.5-x86_64
二、架構
圖2-1 架構圖
三、建置設定
  1. 設定my.cnf
    ### Master-3306 ###
    server-id=3306
    relay-log-info-repository=table
    master-info-repository=table
    gtid-mode=on
    log-slave-updates = 1
    enforce-gtid-consistency = true
    log-bin=ol65-bin
    binlog_format  = mixed
    binlog_row_image = minimal

    ### Master-3322 ###
    server-id=3322
    relay-log-info-repository=table
    master-info-repository=table
    gtid-mode=on
    log-slave-updates = 1
    enforce-gtid-consistency = true
    log-bin=ol65-bin
    binlog_format  = mixed
    binlog_row_image = minimal

    ### Slave-3377 ###
    server-id=3377
    master-info-repository         = TABLE
    relay-log-info-repository      = TABLE
    gtid-mode                             = ON
    enforce-gtid-consistency      = true
    log-slave-updates                 = ON
    log-bin                                  = /opt/mysql57/data/mysql-bin
    binlog_format                       = mixed
    binlog-row-image                 = minimal
    slave-parallel-workers          = 4

    設定好後記得將MySQL服務重啟新動
  2. 因為我的2台Master先前已有測試資料,本次測試中僅拿一個資料庫來做測試,先將資料庫dump後回復至Slave中
    $ mysql -uroot -p -h127.0.0.1 -P3306 --set-gtid-purged=OFF wang > wang.sql
    $ mysql -uroot -p -h127.0.0.1 -P3377 -e"create database wang;"
    $ mysql -uroot -p -h127.0.0.1 -P3377 wang < wang.sql
  3. 設定Replication
    $ mysql -uroot -p -h127.0.0.1 -P3377
    mysql> change master to
    master_host='127.0.0.1',
    master_port=3306,
    master_user='repl',
    master_password='repl',
    master_auto_position=1
    for channel "master-3306";

    mysql> change master to
    master_host='127.0.0.1',
    master_port=3322,
    master_user='repl',
    master_password='repl',
    master_auto_position=1
    for channel "master-3322";

    start slave;
    show slave status\G

    針對特定channel開關:
    start slave for channel 'master-3306';
    stop slave for channel 'master-3306';

圖3-1 設定過程

四、測試

圖4-1 於Master-3306對wang.abc新增資料
圖4-2 於Master-3322對wang.abc新增資料


圖4-3 於Slave中檢視結果

圖4-4 Multi Applier Thread in slave

五、結論

  1. Multi-Source Replication還是為非同步複製模式,雖無實際測效但總覺得速度上似乎有較慢
  2. Multi-Source Replication可以透過Channel的方式從不同的Master接收資料,但目的端資料庫或資料表也須不同,否則有可能發生Duplicate entry的錯誤導致某一個Channel複製失敗。
  3. 過去在5.6版本中slave-parallel-workers參數僅針對"不同資料庫"才能發揮多線程功用,在此版本中已能實現Multi SQL Thread(如圖4-4顯示),只要在my.cnf中設定slave-parallel-workers數量,就可以看見processlist中會出現等同設定數量的線程


留言

這個網誌中的熱門文章

【工作筆記】SQL Timeout追蹤

MySQL監控軟體MEM及PMM介紹

MySQL Router 設定檔說明