本篇內容介紹了“MySQL主從復制和讀寫分離的概念”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
創(chuàng)新互聯(lián)公司,是成都地區(qū)的互聯(lián)網解決方案提供商,用心服務為企業(yè)提供網站建設、重慶App定制開發(fā)、成都小程序開發(fā)、系統(tǒng)按需開發(fā)和微信代運營服務。經過數(shù)10年的沉淀與積累,沉淀的是技術和服務,讓客戶少走彎路,踏實做事,誠實做人,用情服務,致力做一個負責任、受尊敬的企業(yè)。對客戶負責,就是對自己負責,對企業(yè)負責。
當mysql數(shù)據(jù)庫的數(shù)據(jù)量太大的時候,查詢數(shù)據(jù)就很吃力了,無論怎么優(yōu)化都會產生瓶頸,這時我們需要增加服務器設備來實現(xiàn)分布式數(shù)據(jù)庫,首先要了解主從數(shù)據(jù)庫服務器的版本的需求,主從mysql的安裝運行版本需一致。因此,我們利用mysql自帶的REPLICATION來實現(xiàn)mysql多機主從同步的功能,mysql版本為5.7進行演示。

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

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

1、master:修改數(shù)據(jù)庫配置文件vi /etc/my.cnf
2、master:給slave數(shù)據(jù)庫放權,創(chuàng)建一個用于同步的賬戶,密碼,并授予bin-log權限
3、slave:修改數(shù)據(jù)庫配置文件vi /etc/my.cnf
4、slave:設置2創(chuàng)建的賬戶 master_host , master_user, master_password
我們平時所提到的主從同步,主主同步默認采取的異步同步方式, 從MySQL5.5開始,MySQL以插件的形式支持半同步復制。如何理解半同步呢?首先我們來看看異步,全同步的概念
異步復制(Asynchronous replication)
MySQL默認的復制即是異步的,主庫在執(zhí)行完客戶端提交的事務后會立即將結果返給給客戶端,并不關心從庫是否已經接收并處理,這樣就會有一個問題,主如果crash掉了,此時主上已經提交的事務可能并沒有傳到從上,如果此時,強行將從提升為主,可能導致新主上的數(shù)據(jù)不完整。
全同步復制(Fully synchronous replication)
指當主庫執(zhí)行完一個事務,所有的從庫都執(zhí)行了該事務才返回給客戶端。因為需要等待所有從庫執(zhí)行完該事務才能返回,所以全同步復制的性能必然會收到嚴重的影響。
半同步復制(Semisynchronous replication)
介于異步復制和全同步復制之間,主庫在執(zhí)行完客戶端提交的事務后不是立刻返回給客戶端,而是等待至少一個從庫接收到并寫到relay log中才返回給客戶端。相對于異步復制,半同步復制提高了數(shù)據(jù)的安全性,同時它也造成了一定程度的延遲,這個延遲最少是一個TCP/IP往返的時間。所以,半同步復制最好在低延時的網絡中使用。
下面來看看半同步復制的原理圖:

1.手寫DynamicDataSource extends AbstractRoutingDataSource 實現(xiàn)determineCurrentLookupKey方法,HandleDataSource.get()取出值,可以是數(shù)據(jù)源名稱也可以根據(jù)取出值實現(xiàn)多從的負載均衡
2.配置多個數(shù)據(jù)源名稱master,salve1,salve2....,都組裝到DynamicDataSource targetDateSource中去
3. 手寫HandleDataSource用線程變量來存放當前線程數(shù)據(jù)源
4. 手寫一個DataSourceAspect切面,切入點sql語句前綴(select,update,delete,insert) 或者注解自定義注解(如@DateSource("salve2"))將對應數(shù)據(jù)源名稱或自定義值設置到HandleDataSource中
“Mysql主從復制和讀寫分離的概念”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關的知識可以關注創(chuàng)新互聯(lián)網站,小編將為大家輸出更多高質量的實用文章!
文章標題:Mysql主從復制和讀寫分離的概念
URL標題:http://chinadenli.net/article38/jpsjpp.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供商城網站、域名注冊、用戶體驗、移動網站建設、服務器托管、動態(tài)網站
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)