mariadb的主從同步和讀寫分離
阿新 • • 發佈:2018-12-25
資料庫的優化設計對以後web專案能否承擔高併發所帶來的巨大負擔是個非常好的解決方案。主從同步和讀寫分離就是個常用的方法,主資料庫用來寫入資料,從資料庫用來查詢,分擔了主資料庫的一大部分工作,這樣做的好處是當主伺服器崩了之後,還是在從伺服器上獲取到資料,起到的備份的作用。
接下來說說如何實現資料庫的主從同步和讀寫分離
看個人情況,可有三四臺主機都沒問題。本人現在是用2臺伺服器,實現2臺伺服器資料庫的主從同步。
我把阿里雲主機的資料庫作為主資料庫,騰訊雲主機的資料庫作為從資料庫,兩臺主機的系統都是centos7,mariadb的版本為5.5.52
配置主資料庫:
1.用vim開啟my.cnf:
vim /etc/my.cnf
2.在[mysqld]標籤下面增加以下程式碼:
server-id=1 #主資料庫的id
log-bin=master-bin #日誌路徑,作用是從資料庫是根據這個日誌來複制主資料庫的資料的
3.停止mariadb服務
systemctl stop mariadb.service
4.登入mariadb,授權遠端使用者(slaveuser為使用者名稱和密碼 “127.0.0.1”為遠端伺服器的地址,這裡需要改成自己伺服器的地址)
grant replication slave on *.* to 'slaveuser'@'127.0.0.1' identified by 'slaveuser';
flush privileges;
5.重啟mariadb服務
systemctl restart mariadb.service
配置從資料庫
1.用vim開啟my.cnf:
vim /etc/my.cnf
2.在[mysqld]標籤下面增加以下程式碼:
server-id=2 #這個id必須不能和主資料庫相同
read-only=on #設定該資料庫是隻讀狀態
relay-log=relay-bin #日誌
3.重啟mariadb服務
systemctl restart mariadb.service
4.在主伺服器的資料庫上查詢主服務狀態
SHOW MASTER STATUS
5.進入從伺服器的資料庫:master_host需改為自己的主伺服器地址
change master to master_host='127.0.0.1',master_user='slaveuser',master_password='slaveuser', master_log_file='master-bin.000005',master_log_pos=882;
6.啟動slave同步(在資料庫中)
START SLAVE;
7.在slave伺服器上檢視slave同步的狀態
show slave status\G
8.檢視Slave_IO_Running和Slave_SQL_Running是否都為yes(一定要全部為yes。否則就是你配置錯了,再重新配置一遍從資料庫)
就這樣,你可以在主資料庫裡創一個數據。然後再在從資料庫裡檢視是否也有這個資料庫。經本人測試是成功的。而且從資料庫是不能夠建立和插入資料的,因為設定成只讀狀態了。這樣就實現了讀寫分離。在實際專案中,可以利用主資料庫插入,更新資料,從資料用來查詢資料。這樣極大的減輕了資料庫的負擔。保障web專案的高可用性