一mysql
mariadb主從多用於網站架構,由於該主從的同步機制是異步的,數據的同步有必定延遲,也就是說有可能會形成數據的丟失,可是性能比較好,所以網站大多數用的是主從架構的數據庫,讀寫分離必須基於主從架構來搭建sql
主:能夠寫,能夠讀,從同步數據庫
從:可讀,可是寫的話主不會同步vim
工做原理: 當有數據進入到master 時,binarylog (二進制日誌)會作出相應的記錄,從節點要想讀取到主節點的Binarylog日誌,須要在master 上建立一個同步帳號,用來從節點(master)登陸來讀取Binarylog(二進制日誌),當從節點(slave)用同步帳號登陸主節點(master)來讀取Binarylog日誌時,從節點(slave)會生成兩個線程,分別爲 i/o thread 與 SQL thread ,i/o 線程主要是讀 主節點(master) 中的 Binarylog 日誌,而master會生成一個線程(dumpthread)用來接收從節點(slave)端所發出的請求,並返回數據到從節點(salve),經過 i/o thread 寫入到 Relaylog (中繼日誌),這時 從節點(salve)的另外一個線程 SQLthread 進行讀取 Relaylog(中繼日誌)並回放;從而實現了主從同步,一個主從架構最少會有三個線程centos
這只是有一個從節點,然而多個從節點呢,由於每有一個從節點(salve) 來讀取主節點(master)的Binarylog (二進制日誌),主節點(master)就會生成一個dump thread 進程,當從節點(salve) 達到幾百臺甚至上千臺,可想而知會對主節點(master)形成多大的壓力,這時咱們能夠設置一個master的代理主節點,使它的mariadb引擎改爲backhole,使他不寫不讀,只記錄Binarylog 文件,它就沒有了讀寫壓力。這樣就減小了了主節點的壓力(master)安全
Binarylog 日誌: 串行記錄(一條一條的記錄)服務器
mariadb 的主從架構屬於 異步同步, 會有延遲, 在數據量大的狀況下,可能會同步幾個小時,這樣有利也有弊;架構
利:運維人員意外操做致使數據庫出錯,能夠切斷 主節點與從節點的鏈接,從節點不會被同步(在必定的時間內)運維
弊:數據第一時間不能同步異步
異步同步與實時同步的區別
實時同步:安全性比較高,效率低
異步同步:安全性較低,效率高
2、
經過上圖能夠發現,mariadb 主從架構 存在着單點故障,這時咱們能夠用MHA 來監控主從架構
MHA節點: 經過配置文件去監控主從架構,能夠監控多個主從架構, 在監控到的master節點故障時,會提高其中用於最新數據的slave節點成爲新的master節點,在此期間,MHA會經過其餘從節點獲取額外信息來避免一致性方面的問題。MHA還提供了master節點的在線切換功能,即按需切換master/slave節點。
第二種方案:
互爲主備 (主主)
mariadb 主從架構屬於異步同步,存在在着延遲, 例如在master端加入了一條數據 100修改成200,master 進行同步,由於存在着延遲,在這延遲時間內,master2又有一條數據100修改成100插入 ,由於延遲,可能會致使數據的不一致
缺點:可能會形成數據的不一致
通常這種狀況會用在 該數據庫通常只用來讀,沒有太多的更刪改查能夠考慮這種方法可是可能會形成數據的不一致
第三種方案:
galera 集羣 (實時同步)(多主)
特性
基於行復制的徹底並行同步複製
實時多主架構,任意節點可讀寫
無延遲複製,事務零丟失,可靠健壯的讀寫體驗。
自動化節點關係控制:節點故障自動摘除,節點加入自動協調
工做原理:一條事務同時提交
3、部署mariadb 主從架構
環境準備: 1.兩臺服務器
2.數據庫版本以及裏面信息必須同樣
主節點(master端) :192.168.206.3
從節點 (salve端):192.168.206.5
操做系統:CentOS7.5
數據庫版本:MariaDB-10.3.7
1>yum配置,兩端同樣
[mariadb]
name=MariaDB
baseurl=http://mirrors.ustc.edu.cn/mariadb/yum/10.3/centos7-amd64/
gpgkey=http://mirrors.ustc.edu.cn/mariadb/yum/RPM-GPG-KEY-MariaDB
gpgcheck=1
注:master端數據庫與slave 端據庫 須要版本一致,裏邊信息一致,那麼如何實現數據信息一致呢,這裏就用到了數據庫的備份功能,將master端的數據庫備份,而後將備份文件發送給slave端,salve端 進行數據恢復。再反過來備份一次發送回去,
&這裏我備份salve端傳到 master端
#1salve端
#master端
在數據庫裏使用 seq 語句: source lichao.sql 恢復
#master端 再備份一次
#salve端 恢復 source lijie.sql
#查看兩個數據庫是否一致
master:
slave端:
2>master 配置
&修改配置文件
vim /etc/my.cnf.d/server.cnf
在[mysqld]下添加 (也能夠在 [server] 下編輯 )
server-id=1log-bin=mysql-bin
3>重啓數據庫
4>建立主從鏈接帳號
把從角色 賦予給這個 slave 這個用戶
#刷新
#查看
5>查看下 主節點狀態
show master status;
6>配置從節點 (slave 端)
編輯配置文件 vim /etc/my.cnf.d/server.cnf
7>重啓mariadb
8>登陸
CHANGE MASTER TO MASTER_HOST='192.168.206.3', MASTER_USER='slave', MASTER_PASSWORD='slave', MASTER_LOG_FILE=' mysql-bin.000002', MASTER_LOG_POS=467;
9>起線程並查看從節點狀態
&1>
start slave;
&2>
show slave status\G; ( \G 豎列查看)
配置完成成功
10>測試
#master 端 建立數據庫
#查看slave端是否同步
同步成功!