您好,登錄后才能下訂單哦!
Mysql中怎么讀寫分離,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
在Mysql中讀寫分離實際上就是讓主數據庫處理主動寫操作,讓從數據庫處理主動讀操作。我們可以使用mysql-proxy中間件實現Mysql的讀寫分離,mysql-proxy在這里是作為什么角色呢?實際上我們可以將mysql-proxy理解為一個主從數據庫之間的代理,它負責接受客戶端的請求,然后判斷請求SQL是屬于寫操作還是讀操作,如果屬于讀操作則轉發給從數據庫處理請求,如果處于寫操作則轉發給主數據庫處理請求。
實現Mysql讀寫分離
其實實現Mysql讀寫分離最簡單的方案就是開啟主從同步,在后端配置主數據庫的連接和從數據庫的連接,如果需要處理更新數據操作,就是用主數據庫連接完成更新操作,如果只是select查詢數據,則使用從數據庫連接從從數據庫獲取數據。但是通過代碼來管理連接不同的主從數據庫太過于繁瑣了,所以Mysql提供了官方的中間件mysql-proxy實現代理,客戶端只需要請求mysql-proxy的連接池取到一個連接,至于根據讀寫操作來選擇不同的主從數據庫這些工作就只需要交給mysql-proxy來處理就可以了。所以本篇文章重點介紹如何使用mysql-proxy來實現Mysql的讀寫分離。
lua安裝
/*下載lua并且解壓*/wget http://www.lua.org/ftp/lua-5.1.4.tar.gz && tar zxvf lua-5.1.4.tar.gz/*進入lua并且install*/cd lua-5.1.4 && make linux && make install/*導出*/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:配置只讀從數據庫
--proxy-backend-addresses:配置主服務器
--proxy-lua-script:rw-splitting.lua腳本路徑
&:表示后臺執行mysql-proxy。
--log-file:日志文件存放路徑
可以看到查出來的數據是從數據庫的數據,因為結果只有一條,如果來自于主數據庫應該有我們剛才新插入的三條數據,所以可以證明我們的讀操作分離也成功了,到這里我們主從同步和讀寫分離全部配置成功,我們在項目中就可以使用這個4040端口的root用戶來代理數據庫操作,如果是寫操作則代理到主數據庫去執行,如果屬于讀操作則代理到從數據庫去執行,實現Mysql讀寫分離。
mysql-proxy執行流程簡析
我們這里測試是為了方便采取一主一從的架構去測試,但是很多時候后端Mysql服務不止一個,我們最后來大致了解下mysql-proxy的工作流程:
實際上客戶端向mysql-proxy發起連接時會調用connect_server()函數,如果沒有實現這個函數,則mysql-proxy默認使用輪詢方式找到合適的客戶端代理請求給客戶端。
用戶進行賬號權限驗證時傳遞賬號密碼等信息,mysql-proxy會調用read_auth()函數,當后端mysql服務向mysql-proxy認證結果時,mysql-proxy則會調用read_auth_result()然后給客戶端返回認證結果。
認證成功。客戶端每次發起請求mysql-proxy都會調用read_query()來處理中間具體轉發的業務邏輯,然后在后端mysql服務向mysql-proxy傳遞查詢結果時,調用read_query_result()對結果集進行一系列處理,最后將結果集返回給客戶端。
關于Mysql中怎么讀寫分離問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。