當(dāng)單臺(tái)MYSQL服務(wù)器無(wú)法滿足當(dāng)前網(wǎng)站流量時(shí)的優(yōu)化方案。需要搭建mysql集群技術(shù)。
一、功能:
當(dāng)向主服務(wù)器插入|修改|刪除數(shù)據(jù)時(shí),數(shù)據(jù)會(huì)自動(dòng)同步到從服務(wù)器。
注意:主從復(fù)制是單向的,只能主 -> 從
分為兩種類型:發(fā)射型(一主多從):一般使用在:備份、讀寫(xiě)分離。
![](/d/20211018/08227d440889dffcf8c5f5c99b122321.gif)
環(huán)形(多主多從):一般使用:當(dāng)主服務(wù)器壓力大時(shí)、跨地區(qū)的網(wǎng)站實(shí)現(xiàn)數(shù)據(jù)同步
![](/d/20211018/c73047e52015eb67c161651b5dd06ac3.gif)
在環(huán)形結(jié)構(gòu)中,如果同時(shí)向三臺(tái)服務(wù)器的同一表插入記錄會(huì)出現(xiàn)“ID沖突的問(wèn)題”。
解決辦法:讓三臺(tái)服務(wù)器生成不同的ID;
第一臺(tái):1,4,7...
第二臺(tái):2,5,8..
第三臺(tái):3,6,9...
這個(gè)可以MYSQL的配置文件中設(shè)置:
二、主從的原理(利用了bin日志)
Mysql中有一種日志叫做bin日志(二進(jìn)制日志)。這個(gè)日志會(huì)記錄下所有修改了數(shù)據(jù)庫(kù)的SQL語(yǔ)句(insert,update,delete,ALTER TABLE,grant等等)。主從復(fù)制的原理其實(shí)就是把主服務(wù)器上的BIN日志復(fù)制到從服務(wù)器上執(zhí)行一遍,這樣從服務(wù)器上的數(shù)據(jù)就和主服務(wù)器上的數(shù)據(jù)相同了。
擴(kuò)展:mysql中的日志:
查詢?nèi)罩惧e(cuò)誤日志 Bin日志
慢日志:你可以設(shè)置一個(gè)時(shí)間閥值,如0.5秒,那么將來(lái)所以執(zhí)行時(shí)間超過(guò)這個(gè)值的SQL語(yǔ)句就會(huì)被記錄下來(lái)。這樣我們就可以把慢的SQL語(yǔ)句記錄下來(lái),專門(mén)進(jìn)行優(yōu)化。
用途:可以快速定位到網(wǎng)站中比較拖網(wǎng)站的SQL,然后可以優(yōu)化:建索引,緩存這個(gè)SQL的結(jié)果。
三、實(shí)際的配置
把windows系統(tǒng)的MYSQL做為主服務(wù)器,LINUX下的做為從服務(wù)器。
主服務(wù)器:
1. 開(kāi)啟bin日志
修改mysql的配置文件:my.ini添加:
![](/d/20211018/02f9cb5ac381155c6672cd4f2a2a8d3c.gif)
為服務(wù)器指定一個(gè)server-id(主從服務(wù)器的ID值不能重復(fù))
![](/d/20211018/383a102e0a2229abea045ab7a328f85d.gif)
如果是環(huán)形的服務(wù)器需要添加以下項(xiàng):
log-slave-updates = on // 如果是環(huán)形多服務(wù)器,要設(shè)置這一項(xiàng),
在主服務(wù)器上為從服務(wù)器創(chuàng)建一個(gè)用來(lái)同步數(shù)據(jù)的賬號(hào)
登錄MYSQL
執(zhí)行一個(gè)SQL:
創(chuàng)建了一個(gè)只有REPLICATION SLAVE權(quán)限的賬號(hào):用戶名:slave密碼:1234
![](/d/20211018/e38c6a8d02bf03e22b9e7d71326a5e32.gif)
在主服務(wù)器執(zhí)行SQL查看主服務(wù)器當(dāng)前bin日志的狀態(tài)
![](/d/20211018/65af6f7a6a5163758a658680a952d262.gif)
注意:每次修改數(shù)據(jù)時(shí)這兩個(gè)值都會(huì)改變,所以在查看了這兩個(gè)值之后,不要操作主服務(wù)器、直接到從服務(wù)器配置完成之后,否則這個(gè)值對(duì)應(yīng)不上會(huì)同步失敗。
從服務(wù)器(linux):
開(kāi)啟bin日志
修改配置文件/etc/my.cnf
![](/d/20211018/a862bac6cf4edb5d2b14f0ed1c1904cb.gif)
![](/d/20211018/de0bd1469e15e2534573c2f610de249a.gif)
設(shè)置一個(gè)server-id:
![](/d/20211018/59277f4e78dda89a03d5272c88e16ee0.gif)
3. 如果是環(huán)形的服務(wù)器需要添加以下項(xiàng):
log-slave-updates = on // 如果是環(huán)形多服務(wù)器,要設(shè)置這一項(xiàng),
4.在從服務(wù)器上執(zhí)行SQL語(yǔ)句配置主服務(wù)器的地址:
登錄MYSQL:
![](/d/20211018/9f847c623e66a82dc4023c64b5b8a322.gif)
設(shè)置從服務(wù)器并啟動(dòng)復(fù)制功能 ![](/d/20211018/95682b272e6019d1aeb51df1ede2a33c.gif)
5.執(zhí)行SQL查詢從服務(wù)器的狀態(tài)是否配置成功:
![](/d/20211018/20390ee49b7cbf6edb749fa9cf5fb587.gif)
![](/d/20211018/44c1d3a63bcc755aea350456c2b86bb9.gif)
如果是兩個(gè)YES那么代碼成功!完成!
說(shuō)明:在配置成功之前,主服務(wù)器上的數(shù)據(jù)不會(huì)自動(dòng)到從服務(wù)器上來(lái)。所以需要在配置之前先把主服務(wù)器上的所有數(shù)據(jù)先手動(dòng)的導(dǎo)到從服務(wù)器上來(lái),然后配置完主從之后,數(shù)據(jù)以后就同步了。
應(yīng)用場(chǎng)合:
從服務(wù)器做為數(shù)據(jù)的備份服務(wù)器。當(dāng)服務(wù)器壓力比較大時(shí)可以使用主從服務(wù)器實(shí)現(xiàn)讀、寫(xiě)分離來(lái)分流減輕服務(wù)器的壓力??绲赜蚓W(wǎng)站的優(yōu)化
制作一個(gè)留言板的功能,考慮到不同地域優(yōu)化的架構(gòu)思路?
以上就是關(guān)于MYSQL主從復(fù)制的全部原理知識(shí)點(diǎn),感謝大家的學(xué)習(xí)和對(duì)腳本之家的支持。
您可能感興趣的文章:- MySQL主從復(fù)制延遲原因以及解決方案
- mysql主從復(fù)制配置過(guò)程
- 全面解讀MySQL主從復(fù)制,從原理到安裝配置
- MySQL 主從復(fù)制原理與實(shí)踐詳解
- MySQL主從復(fù)制與讀寫(xiě)分離原理及用法詳解
- Mysql主從復(fù)制作用和工作原理詳解
- MYSQL 完全備份、主從復(fù)制、級(jí)聯(lián)復(fù)制、半同步小結(jié)
- 深入理解MySQL主從復(fù)制線程狀態(tài)轉(zhuǎn)變
- mysql 主從復(fù)制如何跳過(guò)報(bào)錯(cuò)