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.雙主多從,在主主互備的基礎上,在加上多個從服務器,主要用戶對數據庫寫操做比較多,同時查操做也比較多的環境中。
mysql
節點 | 系統 | mariadb | ip |
---|---|---|---|
主節點 | CentOS7.4 | 10.3.7 | 192.168.99.130 |
從節點 | CentOS7.4 | 10.3.7 | 192.168.99.131 |
圖示
linux
2.1.安裝mariadb,這裏爲了省事直接yum安裝了,其餘安裝方式不會影響後續操做;清理iptalbes和selinux,防止干擾實驗sql
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]下添入一下字段vim
#惟一標示的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.建立複製用戶,通常建議建立一個專門用來複制數據的帳號,以避免影響的數據的安全性。oracle
#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;
ps:
若是兩臺服務器都作數據更新時候回出現自增加字段發生衝突。
在配置文件加入
auto_increment_offset=1 開始點 auto_increment_increment=2 增加幅度 另一臺加入 auto_increment_offset=2 開始點 auto_increment_increment=2 增加幅度
新配置文件
server-id=#(id數字) log-bin=mysql-bin relay-log=mysq-relay-bin # 「#」內填寫對應數字來避免衝突 auto_increment_offset=#(開始點) auto_increment_increment=# (增加幅度) replicate-wild-ignore-table=mysql.% replicate-wild-ignore-table=test.% replicate-wild-ignore-table=information_schema.%
總的來講不推薦使用主主複製,mysql主主模型很難保證數據的一致性,因此僅僅做爲演示。
半同步複製須要啓動對應的插件
#查看半同步複製協議是否開啓 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;
半同步複製的主從和主主,都是基本異步複製的基礎上的,所以配置過程和上面的配置流程相同。