Linux中的Mariadb資料庫的主備
阿新 • • 發佈:2018-11-13
對於一個mysql伺服器, 一般有兩個執行緒來負責複製和被複制。當開啟複製之後。
MySQL 複製的基本過程如下:
1. Slave 上面的IO執行緒連線上 Master,並請求從指定日誌檔案的指定位置(或者從最開始的日誌)之後的日誌內容;
2. Master 接收到來自 Slave 的 IO 執行緒的請求後,通過負責複製的 IO 執行緒根據請求資訊讀取指定日誌指定位置之後的日誌資訊,返回給 Slave 端的 IO 執行緒。返回資訊中除了日誌所包含的資訊之外,還包括本次返回的資訊在 Master 端的 Binary Log 檔案的名稱以及在 Binary Log 中的位置;
3. Slave 的 IO 執行緒接收到資訊後,將接收到的日誌內容依次寫入到 Slave 端的Relay Log檔案(mysql-relay-bin.xxxxxx)的最末端,並將讀取到的Master端的bin-log的檔名和位置記錄到master- info檔案中,以便在下一次讀取的時候能夠清楚的告訴Master“我需要從某個bin-log的哪個位置開始往後的日誌內容,請發給我”
4. Slave 的 SQL 執行緒檢測到 Relay Log 中新增加了內容後,會馬上解析該 Log 檔案中的內容成為在 Master 端真實執行時候的那些可執行的 Query 語句,並在自身執行這些 Query。這樣,實際上就是在 Master 端和 Slave 端執行了同樣的 Query,所以兩端的資料是完全一樣的。
配置
主庫:
vi /etc/my.conf
1、配置檔案裡面加入以下兩行
server-id=1
log-bin=MySQL-bin ##開啟二進位制日誌檔案
2、建立賬戶
grant replication client,replication slave on *.* to [email protected]'從庫ip' identified by 'root';
3、檢視主庫狀態
show master status\G
從庫:
1、配置檔案加上以下幾行
server-id=2
relay-log=relay-bin ##中繼日誌
read-only =1 ##只讀模式
##replicate-do-db = 123 指定那些庫需要複製
replicate-ignore-db = mysql 不復制的庫
replicate-ignore-db = performance_schema 不復制的庫
replicate-ignore-db = information_schema 不復制的庫
replicate-wild-do-table = 資料庫名字.表名字 // 所要同步的資料庫的單個表,可以加多行就是多個
2、從庫關聯主庫
change master to master_host='主庫ip',master_user='rep',master_password='root';
3、檢查
show slave status\G;
做完以後,重啟所有節點的資料庫
systemctl restart mariadb.service
在備節點上檢視資料庫的執行狀態
show slave status\G
在備伺服器上
啟動同步
start slave;
關閉同步
stop slave;
重啟同步
reset slave;