mysql主從分離的原理
從庫在連線主庫的時候建立乙個io執行緒,用於接收主庫的binlog日誌,並將其儲存在relay log日誌,而主庫是建立乙個log dump執行緒來傳送binlog給從庫,從庫新開乙個sql執行緒讀取relay log的內容以做到資料的同步
主從分離的目的
1)將讀寫流量分離開,方便後續單獨的擴充套件。
2)大部分系統讀大於寫,通過主從分離搭建一主多從架構,分擔讀的壓力
主從分離的問題
存在資料延遲的問題
在發微博的過程中會有些同步的操作,像是更新資料庫的操作,也有一些非同步的操作,比如說將微博的資訊同步給審核系統,所以我們在更新完主庫之後,會將微博的 id 寫入訊息佇列,再由佇列處理機依據 id 在從庫中獲取微博資訊再傳送給審核系統。
此時如果主從資料庫存在延遲,會導致在從庫中獲取不到微博資訊,整個流程會出現異常。
解決方案
第一種方案是資料的冗餘。你可以在傳送訊息佇列時不僅僅傳送微博 id,而是傳送佇列處理機需要的所有微博資訊,藉此避免從資料庫中重新查詢資料。
第二種方案是使用快取。我可以在同步寫資料庫的同時,也把微博的資料寫入到 memcached 快取裡面,這樣佇列處理機在獲取微博資訊的時候會優先查詢快取,這樣也可以保證資料的一致性。
最後一種方案是查詢主庫。我可以在佇列處理機中不查詢從庫而改為查詢主庫。不過,這種方式使用起來要慎重,要明確查詢的量級不會很大,是在主庫的可承受範圍之內,否則會對主庫造成比較大的壓力。
訪問資料庫的方式改變
以前只需要使用乙個資料庫位址就好了,現在需要使用乙個主庫位址和多個從庫位址,並且需要區分寫入操作和查詢操作
解決方案
mycat中介軟體方案,由中介軟體去控制,業務層無感知
業務層控制,**邏輯調整,讀sql連線從庫,寫sql連主庫
下期預告:
白話說分庫分表,講為什麼分庫分表,它的目的,隨之而來產生的問題又應該如何去規避。
mysql用大白話解釋 大白話說說mysql索引
前面其實寫了好幾篇關於 mysql 索引的文章了,文章中有具體的例項和 sql 語句,這篇文章我想再用純大白話講講 mysql 索引,文中不涉及具體 sql 我之前甚至想過為啥要用資料庫來儲存資料,用普通的 txt 或者 word 這類檔案不行麼,這個問題其實可以從幾個方面來看,乙個是併發訪問資料加...
mysql中 變數 MYSQL中的變數 MySQL
bitscn.com 只記很基礎的知識,細節東西太麻煩了,而且我也用不到。變數分為使用者變數與系統變數。使用者變數 使用者變數與資料庫連線有關,在這個連線中宣告的變數,在連線斷開的時候,就會消失。在此連線中宣告的變數無法在另一連線中使用。使用者變數的變數名的形式為 varname的形式。名字必須以 ...
mysql一主一從讀寫分離真的可以提高效能嗎?
由 mysql的主從複製和讀寫分離 原理可知,所謂主從複製,按慣用的基於語句複製模式,是從庫將主庫的日誌裡的各種sql語句,在從庫重新執行了一遍。這就引出乙個問題,主從複製 讀寫分離,真的可以提高效能嗎?如果一台機上的關係型資料庫,既要寫入資料,又要提供讀取服務,那麼在各種鎖機制之下,可以想見,效率...