十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
系統(tǒng)優(yōu)化:假如現(xiàn)在用戶反映系統(tǒng)太卡
成都創(chuàng)新互聯(lián)自2013年起,先為余慶等服務(wù)建站,余慶等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為余慶企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
1:如果是請(qǐng)求太多,判斷web服務(wù)器壓力過大,增加前端的web服務(wù)器,做負(fù)載均衡
2:如果請(qǐng)求靜態(tài)頁面不卡了,但是請(qǐng)求動(dòng)態(tài)數(shù)據(jù)還是卡,說明MySQL處理的請(qǐng)求太多了,在應(yīng)用層增加緩存
3:如果請(qǐng)求激增,還是有大量的查詢到MySQL,想辦法處理MySQL ,在一個(gè)應(yīng)用中,大量的消耗MySQL的還是查詢,就可以把MySQL拆開,就像公路分道 公交車道,小轎車道,把MySQL做成主從
1,就算MYSQL拆成了多個(gè),也必須分出主和從,所有的寫操作都必須要在主MYSQL 上完成;
2,所有的從MYSQL的數(shù)據(jù)都來自于(同步于)主MYSQL;
3,既然涉及到同步,那一定有延遲;有延遲,就一定可能在讀的時(shí)候產(chǎn)生臟數(shù)據(jù);所以,能夠在從MYSQL上進(jìn)行的讀操作,一定對(duì)實(shí)時(shí)性和臟數(shù)據(jù)有一定容忍度的數(shù)據(jù);比如,登陸日志,后臺(tái)報(bào)表,首頁統(tǒng)計(jì)信息來源;文章;資訊;SNS消息;
4,[注意]:在MYSQL主從時(shí),如果一個(gè)業(yè)務(wù)(service中的一個(gè)方法)中,如果既有R操作,又有W操作,因?yàn)閃操作一定要在主MYSQL上,所以在一個(gè)事務(wù)中所有的數(shù)據(jù)來源都只能來自于一個(gè)MYSQL
1,要完成主從同步,就必須讓在Master上執(zhí)行的所有的DML和DDL能夠正確的在Salve上再執(zhí)行一遍;MYSQL選擇使用文件來記錄SQL;
2,要完成主從同步,第一個(gè)事情就是把在主服務(wù)器上的bin-log(二進(jìn)制文件)打開,bin-log文件就可以記錄在MYSQL上執(zhí)行的所有的DML+DDL+TCL;
3,MYSQL使用被動(dòng)注冊(cè)的方式來讓從MYSQL請(qǐng)求同步主MYSQL的binlog;原因:被動(dòng)請(qǐng)求的方式,主的MYSQL不需要知道有哪些從的MYSQL,我額外添加/去掉從MYSQL服務(wù)器,對(duì)主MYSQL服務(wù)器的正常運(yùn)行沒有任何影響;
4,第二步,從MYSQL后臺(tái)一個(gè)線程發(fā)送一個(gè)請(qǐng)求,到主服務(wù)器請(qǐng)求更新數(shù)據(jù);最重要的數(shù)據(jù)(我這次請(qǐng)求,請(qǐng)求你bin-log的哪一行數(shù)據(jù)之后的數(shù)據(jù))
5,第三步,主MYSQL后臺(tái)一個(gè)線程接收到從MYSQL發(fā)送的請(qǐng)求,然后讀取bin-log文件中指定的內(nèi)容,并放在從MYSQL的請(qǐng)求響應(yīng)中;
6,第四步,從MYSQL的請(qǐng)求帶回同步的數(shù)據(jù),然后寫在從MYSQL中的relay-log(重做日志)中;relay-log中記錄的就是從主MYSQL中請(qǐng)求回來的哪些SQL數(shù)據(jù);
7,第五步,從MYSQL后臺(tái)一個(gè)線程專門用于從relay-log中讀取同步回來的SQL,并寫入到從MYSQL中,完成同步;
8,MYSQL的主從同步是經(jīng)過高度優(yōu)化的,性能非常高;
要實(shí)現(xiàn)MySQL 的 Replication ,首先必須打開 Master 端的 Binary Log,因?yàn)檎麄€(gè)復(fù)制過程實(shí)際上就是 Slave 從 Master 端獲取該日志然后再在自己身上完全順序的執(zhí)行日志中所記錄的各種操作。
看上去MySQL的Replication原理非常簡(jiǎn)單,總結(jié)一下:
* 每個(gè)從僅可以設(shè)置一個(gè)主。
* 主在執(zhí)行sql之后,記錄二進(jìn)制log文件(bin-log)。
* 從連接主,并從主獲取binlog,存于本地relay-log,并從上次記住的位置起執(zhí)行sql,一旦遇到錯(cuò)誤則停止同步。
異步復(fù)制(Asynchronous replication)
MySQL默認(rèn)的復(fù)制即是異步的,主庫在執(zhí)行完客戶端提交的事務(wù)后會(huì)立即將結(jié)果返給給客戶端,并不關(guān)心從庫是否已經(jīng)接收并處理,這樣就會(huì)有一個(gè)問題,主如果crash掉了,此時(shí)主上已經(jīng)提交的事務(wù)可能并沒有傳到從上,如果此時(shí),強(qiáng)行將從提升為主,可能導(dǎo)致新主上的數(shù)據(jù)不完整。
全同步復(fù)制(Fully synchronous replication)
指當(dāng)主庫執(zhí)行完一個(gè)事務(wù),所有的從庫都執(zhí)行了該事務(wù)才返回給客戶端。因?yàn)樾枰却袕膸靾?zhí)行完該事務(wù)才能返回,所以全同步復(fù)制的性能必然會(huì)收到嚴(yán)重的影響。
半同步復(fù)制(Semisynchronous replication)
介于異步復(fù)制和全同步復(fù)制之間,主庫在執(zhí)行完客戶端提交的事務(wù)后不是立刻返回給客戶端,而是等待至少一個(gè)從庫接收到并寫到relay log中才返回給客戶端。相對(duì)于異步復(fù)制,半同步復(fù)制提高了數(shù)據(jù)的安全性,同時(shí)它也造成了一定程度的延遲,這個(gè)延遲最少是一個(gè)TCP/IP往返的時(shí)間。所以,半同步復(fù)制最好在低延時(shí)的網(wǎng)絡(luò)中使用。
當(dāng)數(shù)據(jù)變化時(shí)觸發(fā)同步指令將變化的數(shù)據(jù)發(fā)送到從數(shù)據(jù)庫由其進(jìn)行更新
MYSQL主從同步原理:
1) MYSQL主從同步是異步復(fù)制的過程,整個(gè)同步需要開啟3線程,master上開啟bin-log日志(記錄數(shù)據(jù)庫增、刪除、修改、更新操作);
2) Slave開啟I/O線程來請(qǐng)求master服務(wù)器,請(qǐng)求指定bin-log中position點(diǎn)之后的內(nèi)容;
3) Master端收到請(qǐng)求,Master端I/O線程響應(yīng)請(qǐng)求,bin-log、position之后內(nèi)容返給salve;
4) Slave將收到的內(nèi)容存入relay-log中繼日志中,生成master.info(記錄master ip、bin-log、position、用戶名密碼);
5) Slave端SQL實(shí)時(shí)監(jiān)測(cè)relay-log日志有更新,解析更新的sql內(nèi)容,解析成sql語句,再salve庫中執(zhí)行;
6) 執(zhí)行完畢之后,Slave端跟master端數(shù)據(jù)保持一致!
**MYSQL bin-log用途**
1) bin-log日志最大的功能記錄數(shù)據(jù)庫增、刪、改、插入等操作,記錄用戶操作的SQL語句;
2) bin-log日志可以用數(shù)據(jù)增量備份、完整備份;
3) bin-log還可以主要主從復(fù)制+讀寫分離;
MySQL數(shù)據(jù)庫一般指MySQL,MySQL是一個(gè)關(guān)系型數(shù)據(jù)庫管理系統(tǒng),由瑞典MySQL AB 公司開發(fā)。
mysql是目前網(wǎng)站以及APP應(yīng)用上用得較多的一個(gè)開源的關(guān)系型數(shù)據(jù)庫系統(tǒng),可以對(duì)數(shù)據(jù)進(jìn)行保存,分段化的數(shù)據(jù)保存,也可以對(duì)其數(shù)據(jù)進(jìn)行檢索,查詢等功能的數(shù)據(jù)庫。
默認(rèn)的mysql數(shù)據(jù)庫中存有一個(gè)庫這個(gè)就是mysql的系統(tǒng)數(shù)據(jù)庫,可以對(duì)其保存系統(tǒng)的數(shù)據(jù)包括mysql數(shù)據(jù)庫的信息,數(shù)據(jù)庫root賬號(hào),普通賬號(hào),以及數(shù)據(jù)庫的名稱,還有數(shù)據(jù)庫的一些表還有一些數(shù)字型的數(shù)據(jù)類型結(jié)構(gòu)都會(huì)有所保存。
mysql數(shù)據(jù)庫的優(yōu)點(diǎn)
(1)MySQL數(shù)據(jù)庫是用C和C++語言編寫的,并且使用了多種編輯器進(jìn)行測(cè)試,以保證源碼的可移植性。
(2)支持多個(gè)操作系統(tǒng)例如:Windows、Linux、Mac OS等等。
(3)支持多線程,可以充分的利用CPU資源。
(4)為多種編程語言提供API,包括C語言、Java、PHP、Python語言等。
(5)MySQL優(yōu)化了SQL算法,有效的提高了查詢速度。
(6)MySQL內(nèi)提供了用于管理,檢查以及優(yōu)化數(shù)據(jù)庫操作的管理工具。
(7)它能夠作為一個(gè)單獨(dú)的應(yīng)用程序應(yīng)用在客戶端服務(wù)器網(wǎng)絡(luò)環(huán)境中,也可以作為一個(gè)庫嵌入到其他的軟件中并提供多種語言支持。