MySQL讀寫分離原理是什麼
一、讀寫分離的概念
讀寫分離是基於主從複製來實現的。在實際的應用環境中,肯定是讀取操作多,就像我們在電商平台上去買東西,可能看了100個就買了一兩個。所以讀取操作永遠比寫這種更新操作多很多。所以我們基於主從複製的讀寫分離配置,就是讓一個主庫專門用來做資料的修改,寫的時候專門在主庫上寫,主庫透過主從複製把資料的變更透過binlog同步到從庫上去,那麼其他的客戶端查詢的請求都會最終映射到從庫上去,而我們一個主庫帶上兩三個從庫,主庫專門用來做數據的更新(寫操作),從庫專門用來做讀取操作這樣一來可以很好的分攤讀寫的壓力,不用全部都集中在主庫上,對於後端服務的並發處理能力有很大的提高,另外就是它的高可用容災,當主庫掛了以後,可以把指定的從庫變成主庫。
MySQL client透過mysql 提供的API,用mysql自訂的基於TCP的資料協定(簡稱mysql協定)與MySQL Server通信,存取MySQL Server資料庫。
如果只有一台伺服器(單機環境),所有資料的增刪改查都是在一台伺服器上進行,隨著我們的服務被越來越多的人使用,流量逐漸變大,需要並發能力逐漸提升,所以如果我們發現資料庫效能到瓶頸了,我們可以做讀寫分離操作,提高後台服務。
圖中的MySQL主伺服器專門做寫入操作,下面連著2個MySQL從伺服器專門做讀取操作,讀取請求轉送到B、C,寫入請求轉發到A。
如果我們在客戶端直接用程式碼寫死,insert、update等寫入操作在A上做,show、select等讀取操作在B、C上做,相當於程式碼和主從環境就是強綁定的。這就導致程式碼的穩定性不太好,因為和環境強相關了,我們寫程式碼得時候必須得知道哪個機器是負責寫操作的主庫,哪個機器是負責讀取操作的從庫,由程式碼來選擇。而這時如果有某個機器掛掉了,程式碼也不會知道,還是按照原來的方式轉送請求,通訊就會出現問題,所以把讀寫分離用程式碼實作肯定不合適。所以在實際的解決方案中,讀寫分離需要依賴資料庫的中間件。
二、引入中間件MyCat
實際上,讀寫分離,分庫分錶都是需要依賴資料庫中間件(mycat),mycat就是代理伺服器的角色。
客戶端其實區分不出來連的是MyCat還是MySQL,因為通訊都是遵守的是MySQL通訊協議,怎麼和MySQL通信,現在就怎麼和MyCat通信,所以不用區分。
在MyCat上配置讀寫分離,我們在客戶端上的程式碼不用做任何變更,程式碼上不需要區分哪個請求是讀,哪個請求是寫,程式碼直接訪問的是MyCat,由MyCat解析請求,依照SQL的讀寫性質轉送到負責對應操作的伺服器,實現讀寫分離。
在MyCat上需要設定主伺服器和從伺服器的資訊,有3種情況:一主一從、一主多從、多主多從
一主多從場景:當寫函式庫(master)掛了,MyCat還可以馬上把一個從函式庫(slave)直接變成一個寫函式庫(master),那相當於又回到一台機器的處理,因為從庫和從庫之間並沒有主從複製的配置,所以我們還需要把變成寫庫的從庫還要和其他從庫之間配置一下主從複製。
多主多從:
#可以看到圖中,MyCat伺服器掛了兩套環境,如果其中1套的主庫宕機了(它對應的從庫也就不能用了),此時MyCat會自動切到另一套環境,因為M1和M2之間也是配置成互為主從的,所以M2可以同步M1的數據,提供與M1環境完全相同的服務,所以它的高可用容災能力是非常不錯的。
三、MyCat服務埠和管理埠
MySQL的服務埠是3306,MyCat服務埠是8066(這個埠也是可以改的),也就是MySQL Client連接的是8066端口,登入8066端口看到的介面就和登入MySQL Server的3306端口一樣。 MyCat還有一個管理埠9066,登入這個管理埠可以查看MyCat正在工作的所有狀態以及和後端伺服器的連接,以及連接資料來源的狀態等。
以上是MySQL讀寫分離原理是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Laravel 是一款 PHP 框架,用於輕鬆構建 Web 應用程序。它提供一系列強大的功能,包括:安裝: 使用 Composer 全局安裝 Laravel CLI,並在項目目錄中創建應用程序。路由: 在 routes/web.php 中定義 URL 和處理函數之間的關係。視圖: 在 resources/views 中創建視圖以呈現應用程序的界面。數據庫集成: 提供與 MySQL 等數據庫的開箱即用集成,並使用遷移來創建和修改表。模型和控制器: 模型表示數據庫實體,控制器處理 HTTP 請求。

MySQL和phpMyAdmin是強大的數據庫管理工具。 1)MySQL用於創建數據庫和表、執行DML和SQL查詢。 2)phpMyAdmin提供直觀界面進行數據庫管理、表結構管理、數據操作和用戶權限管理。

MySQL与其他编程语言相比,主要用于存储和管理数据,而其他语言如Python、Java、C 则用于逻辑处理和应用开发。MySQL以其高性能、可扩展性和跨平台支持著称,适合数据管理需求,而其他语言在各自领域如数据分析、企业应用和系统编程中各有优势。

在開發一個小型應用時,我遇到了一個棘手的問題:需要快速集成一個輕量級的數據庫操作庫。嘗試了多個庫後,我發現它們要么功能過多,要么兼容性不佳。最終,我找到了minii/db,這是一個基於Yii2的簡化版本,完美地解決了我的問題。

文章摘要:本文提供了詳細分步說明,指導讀者如何輕鬆安裝 Laravel 框架。 Laravel 是一個功能強大的 PHP 框架,它 упростил 和加快了 web 應用程序的開發過程。本教程涵蓋了從系統要求到配置數據庫和設置路由等各個方面的安裝過程。通過遵循這些步驟,讀者可以快速高效地為他們的 Laravel 項目打下堅實的基礎。

在使用Thelia開發電商網站時,我遇到了一個棘手的問題:MySQL模式設置不當,導致某些功能無法正常運行。經過一番探索,我找到了一個名為TheliaMySQLModesChecker的模塊,它能夠自動修復Thelia所需的MySQL模式,徹底解決了我的困擾。

MySQL通過表結構和SQL查詢高效管理結構化數據,並通過外鍵實現表間關係。 1.創建表時定義數據格式和類型。 2.使用外鍵建立表間關係。 3.通過索引和查詢優化提高性能。 4.定期備份和監控數據庫確保數據安全和性能優化。

MySQL是一個開源的關係型數據庫管理系統,廣泛應用於Web開發。它的關鍵特性包括:1.支持多種存儲引擎,如InnoDB和MyISAM,適用於不同場景;2.提供主從復制功能,利於負載均衡和數據備份;3.通過查詢優化和索引使用提高查詢效率。
