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.復制的常用架構
??
??復制技術在實際應用中有多種實現架構,常見的有以下幾種:
??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半同步復制,主從復制與雙主復制