1. 程式人生 > >主從數據庫讀寫分離知識

主從數據庫讀寫分離知識

數據庫數據 場景 nbsp 日誌 details 一致性 數據庫操作 參考 memcache

(一)為什麽要實現讀寫分離?

為了服務器承載更多的用戶?提升了網站的響應速度?分攤數據庫服務器的壓力?就是為了雙機熱備又不想浪費備份服務器?上面這些回答,我認為都不是錯誤的,但也都不是完全正確的。「讀寫分離」並不是多麽神奇的東西,也帶不來多麽大的性能提升,也許更多的作用的就是數據安全的備份吧。從一個庫到讀寫分離,從理論上對服務器壓力來說是會帶來一倍的性能提升,但你仔細思考一下,你的應用服務器真的很需要這一倍的提升麽?那倒不如你去試著在服務器使用一下緩存系統,如 Memcached、Redis 這些分布式緩存,那性能可能是幾十倍的提升。而且,在服務器硬件異常強悍及性能廉價的今天,完全更沒必要了,所以,在今天,我認為它更多的職責就是為了數據安全而設計的,同時又提升了一些性能,這樣也挺好。

總結:分攤數據庫服務器的壓力,並保證數據庫數據安全。

(二)如何實現讀寫分離?

讀寫分離方式很簡單,就是在你讀數據時去連接從庫,在你寫數據的時候去連接主庫,具體代碼實現當然就是連接時候去操作了,這沒什麽難度,在代碼裏寫就是了,但是這樣源程序就要被改動了,假設一個場景,我們已經部署好了數據庫服務器,這個要實現主從,當然這種方法就有限制了。

巧妙的使用AOP就可以實現: AOP 可以在方法開始執行前後插入執行我們想要的代碼,那這樣,我們可以在執行數據庫操作前根據業務來動態切換數據源,這種方式首先不需要在業務代碼中去做切換,二是可能以後我們不需要讀寫分離了,把 AOP 切換的代碼去掉就行了,三是可能就是拓展性更強。

(三)主從數據庫如何保證數據一致性?

數據的一致性通過主從復制實現,以mysql主(稱master)從(稱slave)復制的原理為例:

1、master將數據改變記錄到二進制日誌(binary log)中,也即是配置文件log-bin指定的文件(這些記錄叫做二進制日誌事件,binary log events);

2、slave將master的binary logevents拷貝到它的中繼日誌(relay log);

3、slave重做中繼日誌中的事件,將改變反映它自己的數據(數據重演);

技術分享圖片

(四)主從配置需要註意的地方

1、主DB server和從DB server數據庫的版本一致;

2、主DB server和從DB server數據庫數據一致,這裏就可以把主的備份在從上還原,也可以直接將主的數據目錄拷貝到從的相應數據目錄;

3、主DB server開啟二進制日誌,主DB server和從DB server的server_id都必須唯一;

(五)一主一從與一主多從的區別以及實現

我的上一篇文章主要討論一主多從,而且只是給了實際應用中的實現方向,自己實現具體的這個可以參考鏈接:

https://blog.csdn.net/zbw18297786698/article/details/54343188

主從數據庫讀寫分離知識