Mysql讀寫分離與主從資料庫設定方案
何謂讀寫分離
?
Mysql無非四個功能:增,刪,改,讀
.而將增刪改
和讀
分離操作.這樣有利於提高系統性能.
試著想想,進搬退改貨又賣貨
改成了前門只賣貨,其它去後門
.這樣是不是就很清晰了?
往往看起來高大上的東西,做起來也是挺簡單的.
下面是寫給小白的,都是非常直觀的操作.
1.配置:
兩臺伺服器同配置的mysql如mysql5.7
PS:如果條件有限,一臺也可以,只需要安裝兩個mysql服務(不同埠如3306,3307),只是這就有點違背效率初衷了
2.程式碼:
1.一般直接在程式碼層將mysql操作類的讀寫如update,insert
與select * from
進行路由分離.使之對應不同的伺服器.
2.中介軟體代理,即不改動程式碼的前提下,由中介軟體將讀寫請求傳送至主從伺服器.
現在講講主從如何配置:
1.開放埠:大部分主機都預設Mysql埠3306
,那麼先將兩臺機子的安全組
或防火牆
裡把3306埠開啟並重啟
.
2.埠打開了,現在配置兩個伺服器(一臺主機兩個Mysql伺服器的同理):
下文以主ip:192.168.0.1
,從ip:192.168.0.2
,建立同步賬號spec
,密碼spec_password
為例:
主伺服器(增刪改):
#1.Mysql配置改以下並重啟服務(命令列裡直接重啟:service mysql restart) [mysqld] server-id=1 log-bin=master-bin log-bin-index=master-bin.index #2.命令列mysql執行或phpmyadmin裡執行: GRANT REPLICATION SLAVE ON *.* TO 'spec'@'192.168.0.2' IDENTIFIED BY 'spec_password'; flush privileges;
這樣,主伺服器就完工了.
從伺服器配置:
#1.Mysql配置改以下並重啟服務(命令列裡直接重啟:service mysql restart) [mysqld] server-id=2 relay-log-index=slave-bin.index relay-log=slave-bin #2.命令列mysql執行或phpmyadmin裡執行: change master to master_host='192.168.0.1',master_port=3306,master_user='spec',master_password='spec_password',master_log_file='master-bin.000001',master_log_pos=0; start slave
一般來說,配置到此就完成了.
3.測試:
從伺服器中查詢語句:show slave status
如果Slave_IO_State=Waiting for master to send event
就成功了.
其餘狀態通常都是以下原因:
1.主從的安全組或防火牆未開啟3306埠
2.主從之間ping不通.
3.上面的spec
賬密錯誤
現在起,在主伺服器
隨便增刪改,都會同步到從伺服器
了.
4.建議:
1.切記從伺服器
只操作讀,不操作增刪改.保持資料的同步性,這樣當一臺伺服器故障的時候,另一臺就可以頂上去(其實主伺服器宕機的時候肯定會丟失一部分最新資料).
2.從伺服器
的頻寬一定>=主伺服器
,儘量減少同步延遲.要是小水管,同步自然慢一步嘛.