安裝Centos7 、 Mysql8 叢集,實現讀寫分離 高可用(三)-- 主從設定
零、寫在前面
為了嘗試新技術和業務需要,因此打算搞一套這樣的環境玩兒一下
作業系統及資料庫的安裝請見前兩篇
一、理論依據
不再贅述我的硬體規劃等細節
這次僅用到兩臺虛擬機器,一主一從,後續會增加關於多主多從的內容
現在開始
1、說說思路
主從複製的核心思想,就是讓Slave庫獲取Master庫的二進位制日誌,然後根據二進位制日誌在Slave庫中redo主庫的操作
操作流程如上圖所示,主庫操作--> binary log--> 從庫的I/O Thread獲取主庫日誌 -->
將主庫二進位制日誌寫入從庫relay log
思路清晰,流程明確了,後續就是操作了
二、開始搭建
1、賬號與防火牆
在Master庫建立一個賬號,具備Replication Slave許可權,提供給Slave庫訪問二進位制日誌使用。
CREATE USER 'dark'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE ON *.* TO 'dark'@'%';
注意,你當可以使用其他的更高許可權的賬號來做此操作,
但是由於這個賬號和密碼會以明文的形式存放在master.info檔案中,所以何去何從你決定就好。
如果你的伺服器上開啟了firewall,那麼需要配置對應的埠
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload
如果你用的是iptables,那麼做另外的操作
-A INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT
然後重啟iptables即可 systemctl restart iptables.service 2、Master上的操作
上面說了,作為Master,一定要啟用二進位制日誌,所以我們先開啟主機的二進位制日誌
同時,作為主從架構來說,在這個架構的整體中,Master一定要有個自己的唯一id,所以這個也需要新增
最後,如果不想像我一樣找麻煩,最好不要配那些亂七八糟的忽略項,這個後面會說
開啟Master伺服器上my.cnf(一般在/etc/下面),新增或解掉下面這些的註釋
[mysqld]
log-bin=mysql-bin
server-id=1 #這裡不寫或者值為0,master都會拒絕slave的連線請求
binlog-format=mixed #日誌型別
#binlog-do-db=test #強烈建議這些-do-db結尾的不要新增,後續會說我遇到的問題
#innodb_flush_log_at_trx_commit=1 #這一項和下面一項,是如果你使用了innodb的情況下為保持
#sync_binlog=1 #資料一致和資料的永續性,建議新增的內容
#skip_networking=xx.xx.xx.xx #確保master此項未被啟用,否則會造成主從複製失敗
修改完這些之後,可以重啟master庫,然後檢視master的狀態了
3、Slave上的操作
slave的職責在此就不再贅述了,直接說配置方式
[mysqld]
server-id=2
#replicate-do-db=192.168.122.21 #這種亂七八糟的東西不要亂配
#replicate-ignore-db=test #不要加
replay-log=mysql-bin #slav本地記錄主庫二進位制日誌的日誌
一般來說,slave配置上面那兩條就夠用了
同時,slave上一般不需要開啟二進位制日誌,除非你打算讓它當做其他slave的master
然後,在資料庫中配置一下slave連線master的引數
stop slave; #先停止slave
CHANGE MASTER TO
MASTER_HOST='192.168.122.21', #master的ip或虛ip或域名
MASTER_USER='dark', #master上之前建立的登入賬戶名
MASTER_PASSWORD='123456', #dark的登入密碼
MASTER_LOG_FILE='mysql-bin.000004',MASTER_LOG_POS=155;
#這就是上面圖中master的file和position
start slave; #配置完畢,啟動slave
執行完上面的操作後,可以檢視slave的狀態了,如下面兩張圖所示
一般來說,到這裡應該就一切沒問題了,我們可以測試個建表、插記錄,刪記錄、刪表的操作
我在這裡就不做具體的演示了。
三、遇到的問題
回顧一下,我在配置主從的過程中,還是踩了好幾個坑的。。。
1、*-do-db和 *-ignore-db結尾的坑貨
如果大家剛才逐步看了我上面的內容,那麼大家一定對這些東西有印象,
這些結尾的引數,在/etc/my.cnf的裡面,能不新增就不新增。
之前我在slave中添加了replicate-do-db=192.168.122.21,開始以為是從這個ip的庫中獲取複製資訊
結果,我的主從一直沒有同步
檢查了包括網路、防火牆、甚至重做了主從同步,仍然不行。
最後註釋掉了slave中這一引數,問題解決
這種引數的含義未做深入研究,大家可以參考下面的連結自行考察