1. 程式人生 > >mysql的兩種復制模式

mysql的兩種復制模式

shadow skip 內存 incr 二進制 啟動 hang 模式 set

mysql的復制術語

擴展的方式:
    Scale up
    Scale Out 

復制:
    向外擴展
    二進制日誌 
    單向

復制功用:
    數據分布
    負載均衡:讀操作,適用於讀密集型的應用
    備份
    高可用和故障切換
    MySQL升級測試

主從復制:
    從服務器:
        I/O線程:從master請求二進制日誌信息,並保存至中繼日誌;
        SQL線程:從relay log中讀取日誌信息,在本地完成重放;

    異步模式:async
        1、從服務器落後於主服務器;
        2、主從數據不一致;

    二進制日誌的格式:SET datetime = now()
        1、基於行
        2、基於語句
        3、混合

    雙主:
        讀:負載均衡
        寫:無法均衡

    Perlcona-Galera Cluster

配置過程:

    1、master
        (1) 啟用二進制日誌;
        (2) 設置一個在當前集群中惟一的server-id;
        (3) 創建一個有復制權限(REPLICATION SLAVE, REPLICATION CLIENT)賬號;

    2、slave
        (1) 啟用中繼日誌;
        (2) 設置一個在當前集群中惟一的server-id;
        (3) 使用有復制權限用戶賬號連接至主服務器,並啟動復制線程;

    傳統上:一主多從,但一從一主;
        而今:一從多主;

    服務器程序版本:最好相同;從高;

一、mysql的復制,主從模式

1.主服務器啟動二進制日誌,編輯/etc/my.cnf在其中增加如下兩行內容
            server-id=1                                   mysqld的id號
            log-bin=/var/lib/mysql/mysql-bin   指明二進制日誌的文件名,和路徑
                            innodb-file-per-table=1

技術分享圖片

 2.主服務器創建一個有復制權限(REPLICATION SLAVE, REPLICATION CLIENT)賬號
 GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO
                                         ‘repluser‘@‘192.168.%.%‘ IDENTIFIED BY ‘replpass‘;

技術分享圖片

 3.從服務器啟動中繼日誌,編輯/etc/my.cnf在其中增加如下四行內容
                         server-id=2
                         relay-log=/var/lib/mysql/relay-log
                         relay-log-index=relay-log.index
                         innodb-file-per-table=1

技術分享圖片

4.從服務器配置從服務功能,首先查看主服務器的二進制pos位置
CHANGE MASTER TO MASTER_HOST=‘192.168.130.128‘,MASTER_USER=‘repluser‘,
MASTER_PMASTER_PASSWORD=‘replpass‘,
MASTER_LOG_FILE=‘mysql-bin.000004‘,MASTER_LOG_POS=187;

技術分享圖片

5.查看從服務器狀態,開啟IO與mysql進程,開啟後就可以在線復制了
    SHOW SLAVE STATUS\G    查看狀態
    START SLAVE                       開啟進展

技術分享圖片技術分享圖片

 6.效果展示,在主服務器中創建一個庫CREATE DATABASE mydb2;
         在從服務器中查看SLAVE 狀態,可以看到從服務器已經讀取
         到pos=272的位置,證明從服務器可以復制

技術分享圖片

7.作為從服務器,應該不允許被寫入數據,即限制從服務器只讀
        a.在從服務器啟動read_only;但僅對非具有SUPER權限的用戶有效;
        b.阻止所有用戶 :MariaDB> FLUSH TABLES WITH READ LOCK;
8.保證復制事務安全
        在master節點啟用參數:
            sync_binlog = on                   將內存中的二進制同步到硬盤
            如果用到的為InnoDB存儲引擎:
                innodb_flush_logs_at_trx_commit
                innodb_support_xa=on            
        在slave節點:
            skip_slave_start  不讓slave線程自動啟動,需手動啟動

二、mysql的復制,雙主模式

 雙主:
        讀:負載均衡
        寫:無法均衡

    互為主從:
        1.數據不一致; 
        2.自動增長id
            定義一個節點使用奇數id
                auto_increment_offset=1
                auto_increment_increment=2
            定義另一個節點使用偶數id
                auto_increment_offset=2
                auto_increment_increment=2

        (1) 各自使用不同的server id
        (2) 都啟用binlog和relay log 
        (3) 定義自動增長的id字段的增長方式
        (4) 都授權有復制權限的用戶賬號
        (5) 各自把對方指定為主服務器 

    GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 
    ‘repluser‘@‘172.16.%.%‘ IDENTIFIED BY ‘replpass‘;

    3.在上面的基礎上,兩臺主機的配置文件/etc/my.cnf
     192.168.130.128
     配置:server-id=1
                            log-bin=/var/lib/mysql/mysql-bin
                            relay-log=/var/lib/mysql/relay-log
                            relay-log-index=relay-log.index
                            innodb-file-per-table=1
                            auto_increment_offset=1
                            auto_increment_increment=2
    192.168.130.129
    配置:server-id=5
                            log-bin=/var/lib/mysql/mysql-bin
                            relay-log=/var/lib/mysql/relay-log
                            relay-log-index=relay-log.index
                            innodb-file-per-table=1
                            auto_increment_offset=2
                            auto_increment_increment=2

技術分享圖片技術分享圖片

4.在每個主機的mysqld上都創建一個有復制權限的用戶
    192.168.130.128
    配置:
    GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO
                                         ‘repluser‘@‘192.168.%.%‘ IDENTIFIED BY ‘replpass‘;

    192.168.130.128
    配置:
    GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO
                                         ‘repluser‘@‘192.168.%.%‘ IDENTIFIED BY ‘replpass‘;

    5.查看每個主機的二進制日誌pos位置,然後按照該位置,啟動每個主機的slave服務
    192.168.130.128 
    配置:
      CHANGE MASTER TO   MASTER_HOST=‘192.168.130.129‘,
        MASTER_USER=‘repluser‘,MASTER_PASSWORD=‘replpass‘,
        MASTER_LOG_FILE=‘mysql-bin.000002‘,MASTER_LOG_POS=288;

    192.168.130.12
    配置:
      CHANGE MASTER TO   MASTER_HOST=‘192.168.130.128‘,
        MASTER_USER=‘repluser‘,MASTER_PASSWORD=‘replpass‘,
        MASTER_LOG_FILE=‘mysql-bin.000005‘,MASTER_LOG_POS=106;

技術分享圖片
技術分享圖片

6.用START SLAVE;開啟兩臺機的slave功能便可完成雙主模型
7.效果展示
        當128主機創建一個庫時129的讀取進度見圖,
        當129主機創建一個庫時128的讀取進度見圖,

技術分享圖片
技術分享圖片

mysql的兩種復制模式