溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Mysql主從復制和讀寫分離的概念

發(fā)布時間:2021-09-16 07:11:20 來源:億速云 閱讀:135 作者:chen 欄目:編程語言

本篇內容介紹了“Mysql主從復制和讀寫分離的概念”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

什么是主從復制 

當mysql數據庫的數據量太大的時候,查詢數據就很吃力了,無論怎么優(yōu)化都會產生瓶頸,這時我們需要增加服務器設備來實現分布式數據庫,首先要了解主從數據庫服務器的版本的需求,主從mysql的安裝運行版本需一致。因此,我們利用mysql自帶的REPLICATION來實現mysql多機主從同步的功能,mysql版本為5.7進行演示。

Mysql主從復制和讀寫分離的概念

什么是讀寫分離

就是把對數據庫的讀操作和寫操作分離開,將讀寫壓力分擔到多臺服務器上,通常用于讀遠大于寫的場景。讀寫分離的基本原理是讓主數據庫處理事務性增、改、刪操作(INSERT、UPDATE、DELETE),而從數據庫處理SELECT查詢操作。數據庫復制被用來把事務性操作導致的變更同步到集群中的從數據庫。數據多了之后,對數據庫的讀、寫就會很多。寫庫就一個,讀庫可以有多個,利用主從復制負責主庫和多個讀庫的數據同步。

Mysql主從復制和讀寫分離的概念

什么是雙機熱備(互為主從)

互為主從也叫主主同步,是在主從同步的基礎上還增加了,主也同步從的bin-log,利用 keepalive的虛擬ip 也叫vip 他的作用就是監(jiān)控兩個數據庫 默認設置是master1,如果master1掛了就去Master2 ,如果master2掛了就去master1,消除了以往一主一從和一主多從的 master單點問題,由此可以實現數據庫的高可用。

Mysql主從復制和讀寫分離的概念

主從同步配置的步驟

1、master:修改數據庫配置文件vi /etc/my.cnf

2、master:給slave數據庫放權,創(chuàng)建一個用于同步的賬戶,密碼,并授予bin-log權限

3、slave:修改數據庫配置文件vi /etc/my.cnf

4、slave:設置2創(chuàng)建的賬戶 master_host , master_user, master_password

主從同步方式

我們平時所提到的主從同步,主主同步默認采取的異步同步方式, 從MySQL5.5開始,MySQL以插件的形式支持半同步復制。如何理解半同步呢?首先我們來看看異步,全同步的概念 

異步復制(Asynchronous replication)

MySQL默認的復制即是異步的,主庫在執(zhí)行完客戶端提交的事務后會立即將結果返給給客戶端,并不關心從庫是否已經接收并處理,這樣就會有一個問題,主如果crash掉了,此時主上已經提交的事務可能并沒有傳到從上,如果此時,強行將從提升為主,可能導致新主上的數據不完整。

全同步復制(Fully synchronous replication)

指當主庫執(zhí)行完一個事務,所有的從庫都執(zhí)行了該事務才返回給客戶端。因為需要等待所有從庫執(zhí)行完該事務才能返回,所以全同步復制的性能必然會收到嚴重的影響。

半同步復制(Semisynchronous replication)

介于異步復制和全同步復制之間,主庫在執(zhí)行完客戶端提交的事務后不是立刻返回給客戶端,而是等待至少一個從庫接收到并寫到relay log中才返回給客戶端。相對于異步復制,半同步復制提高了數據的安全性,同時它也造成了一定程度的延遲,這個延遲最少是一個TCP/IP往返的時間。所以,半同步復制最好在低延時的網絡中使用。

下面來看看半同步復制的原理圖:

 Mysql主從復制和讀寫分離的概念

java讀寫分離動態(tài)切換數據源

1.手寫DynamicDataSource extends AbstractRoutingDataSource 實現determineCurrentLookupKey方法,HandleDataSource.get()取出值,可以是數據源名稱也可以根據取出值實現多從的負載均衡
2.配置多個數據源名稱master,salve1,salve2....,都組裝到DynamicDataSource targetDateSource中去
3. 手寫HandleDataSource用線程變量來存放當前線程數據源
4. 手寫一個DataSourceAspect切面,切入點sql語句前綴(select,update,delete,insert) 或者注解自定義注解(如@DateSource("salve2"))將對應數據源名稱或自定義值設置到HandleDataSource中

“Mysql主從復制和讀寫分離的概念”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI