MySQL中怎么讀寫分離,針對(duì)這個(gè)問題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡(jiǎn)單易行的方法。
公司主營(yíng)業(yè)務(wù):成都做網(wǎng)站、網(wǎng)站建設(shè)、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。創(chuàng)新互聯(lián)是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)推出常州免費(fèi)做網(wǎng)站回饋大家。
在Mysql中讀寫分離實(shí)際上就是讓主數(shù)據(jù)庫處理主動(dòng)寫操作,讓從數(shù)據(jù)庫處理主動(dòng)讀操作。我們可以使用mysql-proxy中間件實(shí)現(xiàn)Mysql的讀寫分離,mysql-proxy在這里是作為什么角色呢?實(shí)際上我們可以將mysql-proxy理解為一個(gè)主從數(shù)據(jù)庫之間的代理,它負(fù)責(zé)接受客戶端的請(qǐng)求,然后判斷請(qǐng)求SQL是屬于寫操作還是讀操作,如果屬于讀操作則轉(zhuǎn)發(fā)給從數(shù)據(jù)庫處理請(qǐng)求,如果處于寫操作則轉(zhuǎn)發(fā)給主數(shù)據(jù)庫處理請(qǐng)求。
實(shí)現(xiàn)Mysql讀寫分離
其實(shí)實(shí)現(xiàn)Mysql讀寫分離最簡(jiǎn)單的方案就是開啟主從同步,在后端配置主數(shù)據(jù)庫的連接和從數(shù)據(jù)庫的連接,如果需要處理更新數(shù)據(jù)操作,就是用主數(shù)據(jù)庫連接完成更新操作,如果只是select查詢數(shù)據(jù),則使用從數(shù)據(jù)庫連接從從數(shù)據(jù)庫獲取數(shù)據(jù)。但是通過代碼來管理連接不同的主從數(shù)據(jù)庫太過于繁瑣了,所以Mysql提供了官方的中間件mysql-proxy實(shí)現(xiàn)代理,客戶端只需要請(qǐng)求mysql-proxy的連接池取到一個(gè)連接,至于根據(jù)讀寫操作來選擇不同的主從數(shù)據(jù)庫這些工作就只需要交給mysql-proxy來處理就可以了。所以本篇文章重點(diǎn)介紹如何使用mysql-proxy來實(shí)現(xiàn)Mysql的讀寫分離。
lua安裝
/*下載lua并且解壓*/wget http://www.lua.org/ftp/lua-5.1.4.tar.gz && tar zxvf lua-5.1.4.tar.gz/*進(jìn)入lua并且install*/cd lua-5.1.4 && make linux && make install/*導(dǎo)出*/export LUA_CFLAGS="-I/usr/local/include" LUA_LIBS="-L/usr/local/lib -llua -ldl" LDFLAGS="-lm"
/*下載mysql-proxy并且解壓*/ wget mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit.tar.gz && tar -zxvf mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit.tar.g
/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua
./mysql-proxy \--proxy-read-only-backend-addresses=49.232.154.38:3306 \--proxy-backend-addresses=49.235.28.88:3306 \--log-file=/usr/local/mysql-proxy/logs/mysql-proxy.log \--proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua &
--proxy-read-only-backend-addresses:配置只讀從數(shù)據(jù)庫
--proxy-backend-addresses:配置主服務(wù)器
--proxy-lua-script:rw-splitting.lua腳本路徑
&:表示后臺(tái)執(zhí)行mysql-proxy。
--log-file:日志文件存放路徑
可以看到查出來的數(shù)據(jù)是從數(shù)據(jù)庫的數(shù)據(jù),因?yàn)榻Y(jié)果只有一條,如果來自于主數(shù)據(jù)庫應(yīng)該有我們剛才新插入的三條數(shù)據(jù),所以可以證明我們的讀操作分離也成功了,到這里我們主從同步和讀寫分離全部配置成功,我們?cè)陧?xiàng)目中就可以使用這個(gè)4040端口的root用戶來代理數(shù)據(jù)庫操作,如果是寫操作則代理到主數(shù)據(jù)庫去執(zhí)行,如果屬于讀操作則代理到從數(shù)據(jù)庫去執(zhí)行,實(shí)現(xiàn)Mysql讀寫分離。
mysql-proxy執(zhí)行流程簡(jiǎn)析
我們這里測(cè)試是為了方便采取一主一從的架構(gòu)去測(cè)試,但是很多時(shí)候后端Mysql服務(wù)不止一個(gè),我們最后來大致了解下mysql-proxy的工作流程:
實(shí)際上客戶端向mysql-proxy發(fā)起連接時(shí)會(huì)調(diào)用connect_server()函數(shù),如果沒有實(shí)現(xiàn)這個(gè)函數(shù),則mysql-proxy默認(rèn)使用輪詢方式找到合適的客戶端代理請(qǐng)求給客戶端。
用戶進(jìn)行賬號(hào)權(quán)限驗(yàn)證時(shí)傳遞賬號(hào)密碼等信息,mysql-proxy會(huì)調(diào)用read_auth()函數(shù),當(dāng)后端mysql服務(wù)向mysql-proxy認(rèn)證結(jié)果時(shí),mysql-proxy則會(huì)調(diào)用read_auth_result()然后給客戶端返回認(rèn)證結(jié)果。
認(rèn)證成功??蛻舳嗣看伟l(fā)起請(qǐng)求mysql-proxy都會(huì)調(diào)用read_query()來處理中間具體轉(zhuǎn)發(fā)的業(yè)務(wù)邏輯,然后在后端mysql服務(wù)向mysql-proxy傳遞查詢結(jié)果時(shí),調(diào)用read_query_result()對(duì)結(jié)果集進(jìn)行一系列處理,最后將結(jié)果集返回給客戶端。
關(guān)于Mysql中怎么讀寫分離問題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識(shí)。