何謂讀寫分離
?
Mysql無非四個功能:增,刪,改,讀
.而將增刪改
和讀
分離操做.這樣有利於提升系統性能.
試着想一想,進搬退改貨又賣貨
改爲了前門只賣貨,其它去後門
.這樣是否是就很清晰了?
每每看起來高大上的東西,作起來也是挺簡單的.
下面是寫給小白的,都是很是直觀的操做.php
1.配置:
兩臺服務器同配置的mysql如mysql5.7
PS:若是條件有限,一臺也能夠,只須要安裝兩個mysql服務(不一樣端口如3306,3307),只是這就有點違背效率初衷了
2.代碼:
1.通常直接在代碼層將mysql操做類的讀寫如update,insert
與select * from
進行路由分離.使之對應不一樣的服務器.
2.中間件代理,即不改動代碼的前提下,由中間件將讀寫請求發送至主從服務器.mysql
如今講講主從如何配置:
1.開放端口:大部分主機都默認Mysql端口3306
,那麼先將兩臺機子的安全組
或防火牆
裏把3306端口打開並重啓
.
2.端口打開了,如今配置兩個服務器(一臺主機兩個Mysql服務器的同理):
下文以主ip:192.168.0.1
,從ip:192.168.0.2
,建立同步帳號spec
,密碼spec_password
爲例:sql
主服務器(增刪改):安全
#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.從服務器
的帶寬必定>=主服務器
,儘可能減小同步延遲.要是小水管,同步天然慢一步嘛.rest