成都創(chuàng)新互聯(lián)是專業(yè)的莊河網(wǎng)站建設(shè)公司,莊河接單;提供成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì),網(wǎng)頁設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行莊河網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來合作!
先編輯master配置:
vim /etc/my.cnf
(加上紅框部分。#server id部分:每個(gè)都有獨(dú)一無二的id作為區(qū)分,這id可以用服務(wù)器ip后三位。#binary log:日志。#statement row mixed:三種監(jiān)聽方式)
其中三種情況:監(jiān)聽語句變化,還是磁盤變化,還是混合模式?
然后編輯slave的/etc/my.cnf:
(設(shè)置id,建立中繼日志)
然后分別啟動(dòng)主和從:service MySQLd start
接下來,主和從要建立聯(lián)系:
登錄mysql:?
mysql -uroot -p
master建立授權(quán)帳號(hào)(這個(gè)帳號(hào)允許你復(fù)制master的二進(jìn)制日志。一個(gè)replication client帳號(hào),一個(gè)replication slave帳號(hào)):
(授權(quán)一個(gè)客戶端帳號(hào)、一個(gè)從帳號(hào)。*.*:作用于所有庫和表上,不像MongoDB能單選某庫某表。to 帳號(hào)repl,指定它發(fā)揮作用的ip:@192.168.%.%,即前綴是192.168都可以用。identitied by 'repl':指定密碼為repl)
到目前為止,主服務(wù)器的日志、帳號(hào)、從服務(wù)器的relaylog好了,只需要通知從服務(wù)器連過來:
(master_log_file是當(dāng)前master所用的二進(jìn)制文件。master_log_pos是當(dāng)前master的position。下面有查看方法)
見識(shí)下二進(jìn)制日志:
目前用的最新的二進(jìn)制日志是:
(mater機(jī)器)
看看當(dāng)前master機(jī)器的狀態(tài):
(確實(shí)當(dāng)前用的是mysql-bin.000003,position 278的意思是:我主服務(wù)器已經(jīng)寫到278位置了,你從服務(wù)器注意哈)
操作slave:
(reset slave:重置slave。然后設(shè)置對(duì)應(yīng)master的相關(guān)信息)
查看slave的情況:show slave status \G
啟動(dòng)slave:
再查看狀態(tài)就好了(第一行變成了waiting? for master to send event):
接下來,不管在master是新建庫、表,各種增刪改查,在slave中都會(huì)看到相應(yīng)的變化
典型問題:
有一業(yè)務(wù)場(chǎng)景,經(jīng)過測(cè)試,讀寫比為1:20,請(qǐng)根據(jù)讀寫比,合理設(shè)置優(yōu)化方案.
?
讀寫比:
寫數(shù)據(jù)/讀數(shù)據(jù)的比例,
Insert/update/delelte ????/ ?select
?
不管具體技術(shù),從"讀寫分離"的概念出發(fā)來推導(dǎo)一下基本的要素.
通俗的說:讀服務(wù)器就是指寫服務(wù)器的數(shù)據(jù)鏡像.
?
從服務(wù)端看:要有N臺(tái)從服務(wù)器和主服務(wù)器保持?jǐn)?shù)據(jù)一致.
從客戶端看:比如有一條insert語句和一條select語句,
則要區(qū)分讀/寫語句,并且分別請(qǐng)求從/主服務(wù)器.
?
?
服務(wù)器端讀寫分離的具體技術(shù)
1:數(shù)據(jù)庫集群技術(shù)
集群由3個(gè)概念
1:sql節(jié)點(diǎn) ?sql node
2:數(shù)據(jù)節(jié)點(diǎn)data node
3:管理節(jié)點(diǎn)ndb managerment
?
Sql語句發(fā)送"1sql節(jié)點(diǎn)", "1sql"節(jié)點(diǎn)發(fā)往"2數(shù)據(jù)節(jié)點(diǎn)",再由3管理節(jié)點(diǎn)完成數(shù)據(jù)節(jié)點(diǎn)的之間的同步.
?
集群技術(shù)相對(duì)復(fù)雜,至少有3種節(jié)點(diǎn),4臺(tái)服務(wù)器才能完成.
?
?
2:數(shù)據(jù)庫復(fù)制replication
數(shù)據(jù)庫復(fù)制 replication 的實(shí)現(xiàn)原理
1:主服務(wù)器凡運(yùn)行語句,都產(chǎn)生一個(gè)二進(jìn)制日志binlog
2:從服務(wù)器不斷讀取主服務(wù)器的binlog
3:從主服務(wù)讀取到的binlog,轉(zhuǎn)換為自身可執(zhí)行的relaylog,
4:執(zhí)行relaylog
?
?
實(shí)現(xiàn)步驟:
1:首先確保主服務(wù)器打開二進(jìn)制日志功能.
這樣,主服務(wù)器一旦有數(shù)據(jù)變化,立即產(chǎn)生二進(jìn)制日志.
?
2:從服務(wù)器也需要開啟二進(jìn)制日志和relay日志功能.
這樣可以從主服務(wù)器讀取binlog,并產(chǎn)生relaylog
?
3:在主服務(wù)器建立一個(gè)從服務(wù)器的賬號(hào),并授予數(shù)得上權(quán)限.
?
4: 指定從服務(wù)對(duì)應(yīng)的主服務(wù)器,開啟從服務(wù)器.
?
?
具體實(shí)施
本人虛擬機(jī)下有兩臺(tái)linux,IP為199 200
1: 200做從服務(wù)器
2: 199mysql,做為主服務(wù)器.
3: 保證主從3306端口互通.
4: 配置主服務(wù)器,打開binlog
#給服務(wù)器起一個(gè)唯一的id
server-id=1
?#開啟二進(jìn)制日志
log-bin=mysql-bin
#指定日志格式
binlog-format=mixd/row/statement
重啟mysql
已經(jīng)能夠充當(dāng)master服務(wù)器
5: 配置從服務(wù)器打開binlog和relaylog
重啟從服務(wù)器
?
6: 在主服務(wù)器上創(chuàng)建相應(yīng)的復(fù)制賬號(hào)
7: 在從服務(wù)器通過語句指定要復(fù)制的主服務(wù)器(注意,可以一主多從,不可一從多主).
8:啟動(dòng)從服務(wù)器功能
->start slave;
8: 測(cè)試.
?
?
常用語句:
show master status ; 查看master的狀態(tài),尤其是當(dāng)前的日志及位置
show slave stattus; 查看slave的狀態(tài).
reset slave ; ?重置slave狀態(tài).
start slave ; 啟動(dòng)slave狀態(tài)(開始監(jiān)聽msater的變化)
stop slave; 暫停slave狀態(tài);
查看mysql帳號(hào):