1. 程式人生 > >Mariadb半同步復制,主從復制與雙主復制

Mariadb半同步復制,主從復制與雙主復制

mysql mariadb 主從 主主 半同步復制

知識背景

??

一.mariadb復制相關知識

??
1.mariadb的來源
??
??mysql數據庫目前在數據庫市場中所占份額僅僅次於oracle數據庫,同時也是開源數據庫的龍頭老大。由於mysql數據庫的開源性和高性能,同時還是免費的(不過被oracle收購後不容樂觀),因此,mysql之父又開啟了一個mysql的新分支mariadb,mariadb相對mysql而言版更新快,新特性實裝速度迅速,mysql官方版本的優點mariadb也會很快的加以吸收。
??
2.mariadb復制的流程
??
??mariadb數據庫支持同步復制,半同步復制和異步復制,在復制的過程中一個服務器充當主服務器,而一個或者多個服務器做為從服務器。主服務器在進行修改時,會將更新寫入二進制日誌文件,並且維護文件的一個索引來跟蹤日誌循環。日誌的記錄會發送到從服務器進行數據修改。當從服務器到主服務器上獲取二進制日誌時,它會通知主服務器從日誌中讀取最後一次成功的更新的位置,從服務器則會接收從該位置之後發生的全部操作。

??
3.同步復制,異步復制,半同步復制
??
??同步復制:Master提交事務,直到事務在所有的Slave都已提交,此時才會返回客戶端,事務執行完畢。缺點:完成一個事務可能會有很大的延遲。
??異步復制:當Slave準備好才會向Master請求binlog。缺點:不能保證一些事件都能夠被所有的Slave所接收。
??半同步復制:半同步復制工作的機制處於同步和異步之間,Master的事務提交阻塞,只要一個Slave已收到該事務的事件且已記錄。它不會等待所有的Slave都告知已收到,且它只是接收,並不用等其完全執行且提交。若到達超時時長仍未收到則轉為異步復制。
??
4.復制的常用架構
??
??復制技術在實際應用中有多種實現架構,常見的有以下幾種:
??1.一主一從,即一臺主數據庫,一臺從數據庫;
??2.一主多從,即一臺主數據庫,多臺從數據庫,主要用在寫操作不頻繁,但是有著大量讀操作的環境中;
??3.主主互備,即兩臺mariadb數據庫服務器互相將對方作為自己的主服務器,自己又同時作為對方的從服務器進行復制。主要用於對數據庫寫操作較多的環境中,防止出現數據庫的單點故障。
??4.雙主多從,在主主互備的基礎上,在加上多個從服務器,主要用戶對數據庫寫操作比較多,同時查操作也比較多的環境中。
??
??

復制的實現

??

主從復制(基於異步)

??

節點 系統 mariadb ip
主節點 CentOS7.4 10.3.7 192.168.99.130
從節點 CentOS7.4 10.3.7 192.168.99.131

??
圖示
技術分享圖片

2.1.安裝mariadb,這裏為了省事直接yum安裝了,其他安裝方式不會影響後續操作;清理iptalbes和selinux,防止幹擾實驗

    iptables -F
    iptables -X
    setenforce 0
    yum install mariadb-server -y

2.修改主數據庫的配置文件

    # mariadb 10.2以前的版本
    vim /etc/my.cnf
    #10.3之後的版本已經放到/etc/my.cnf.d/下
    vim /etc/my.cnf.d/server.cnf 

在[mysqld]下添入一下字段

#唯一標示的id段,不可重復
server-id=1 
#開啟二進制日誌,可以自定義路徑和文件名
log-bin=mysql-bin
#開啟二進制中繼日誌並定義命名格式
relay-log=mysq-relay-bin
#復制的過濾項,負責過濾掉不需要復制的庫和表
replicate-wild-ignore-table=mysql.%
replicate-wild-ignore-table=test.%
replicate-wild-ignore-table=information_schema.%

技術分享圖片
3.修改從數據的配置文件

# mariadb 10.2以前的版本
    vim /etc/my.cnf
    #10.3之後的版本已經放到/etc/my.cnf.d/下
    vim /etc/my.cnf.d/server.cnf 
    #唯一標示的id段,不可重復
    server-id=2
    #開啟二進制日誌,可以自定義路徑和文件名
    log-bin=mysql-bin
    #開啟二進制中繼日誌並定義命名格式
    relay-log=mysq-relay-bin
    #復制的過濾項,負責過濾掉不需要復制的庫和表
    replicate-wild-ignore-table=mysql.%
    replicate-wild-ignore-table=test.%
    replicate-wild-ignore-table=information_schema.%

技術分享圖片
4.啟動mariadb

#主從都執行
    systemctl start mariadb

5.同步數據庫(如果都是新數據庫不必做這步操作)
如果主數據庫上已經有了數據,那麽在執行復制之前要先行將兩個數據庫的數據同步。

#創建讀鎖,禁止寫入數據
flush tables with read lock;
#同步完成後記得釋放

6.創建復制用戶,一般建議創建一個專門用來復制數據的賬號,以免影響的數據的安全性。

#grant replication slave on *.* to ‘用戶名‘@‘允許登陸的ip‘ identified by ‘密碼‘;

grant replication slave on *.* to ‘slave‘@‘192.168.99.131‘ identified by ‘slave‘;

#使得授權生效
flush privileges;

#查看當前主庫的二進制日誌信息
show master status;

技術分享圖片
7.配置從數據庫,將192.168.99.130作為主庫

                #mariadb> change master to                                 #-> master_host=‘192.168.99.130‘, 指定主庫ip
                                #-> master_user=‘slave‘, 指定備份賬號名
                                #-> master_password=‘slave‘, 指定備份賬號的密碼
                            #-> master_log_file=‘mysql-bin.000001‘, 主服務器的二進制日誌名
                                #-> master_log_pos=851; 二進制文件的位置
mariadb> change master to                                 -> master_host=‘192.168.99.130‘,
                                -> master_user=‘slave‘,
                                -> master_password=‘slave‘,
                                -> master_log_file=‘mysql-bin.000001‘,
                                -> master_log_pos=851;

8.從數據庫開啟slave

start slave;

9.檢查運行狀態

show slave status\G;

技術分享圖片

slave_IO_running和slave_SQl_running 是運行在從服務器節點上的主從復制線程,正常情況下均為yes
replicate_wild_ignore_table 顯示的是不復制的庫和表

??

雙主復制(基於異步)

??
雙主復制是在主從復制的基礎上,對主從雙方做一次身份反轉。
架構圖
技術分享圖片
1.在主從基礎上繼續做以下

#上一次的從作為本次的主
#grant replication slave on *.* to ‘用戶名‘@‘允許登陸的ip‘ identified by ‘密碼‘;

grant replication slave on *.* to ‘slave‘@‘192.168.99.130‘ identified by ‘slave‘;

#使得授權生效
flush privileges;

#查看當前主庫的二進制日誌信息
show master status;

技術分享圖片
2.在從數據庫(上次的主)執行以下操作

mariadb> change master to                                 -> master_host=‘192.168.99.131‘,
                                -> master_user=‘slave‘,
                                -> master_password=‘slave‘,
                                -> master_log_file=‘mysql-bin.000001‘,
                                -> master_log_pos=650;

3.啟動備份

    start slave;
#查看運行狀態
show status slave;

技術分享圖片
??

配置半同步復制

??
半同步復制需要啟動對應的插件

#查看半同步復制協議是否開啟
show global variables like ‘%semi%‘;

技術分享圖片
開啟半同步協議(舊版本需要手動安裝,新版本已經內置,直接開啟修好)

#舊版本安裝
#主節點
INSTALL PLUGIN rpl_semi_sync_master SONAME ‘semisync_master.so‘;
#開啟主節點半同步
SET GLOBAL rpl_semi_sync_master_enabled=1;
#設置超時時間
SET GLOBAL rpl_semi_sync_master_timeout=2000;
#從節點
INSTALL PLUGIN rpl_semi_sync_slave SONAME ‘semisync_slave.so‘;
開啟從節點半同步復制
SET GLOBAL rpl_semi_sync_slave_enabled=1;
#新版本
#開啟主節點半同步
SET GLOBAL rpl_semi_sync_master_enabled=1;
#設置超時時間
SET GLOBAL rpl_semi_sync_master_timeout=2000;
#從節點
SET GLOBAL rpl_semi_sync_slave_enabled=1;

半同步復制的主從和主主,都是基本異步復制的基礎上的,因此配置過程和上面的配置流程相同。

Mariadb半同步復制,主從復制與雙主復制