10 複製
mysql支援基於行的複製和基於語句的複製,這兩種方式都是通過在主庫中記錄二進位制日誌,然後在備庫中重放日誌的方式來實現資料的非同步複製。
複製框架對於主庫的開銷:增加二進位制日誌的儲存,備庫從主庫讀取日誌的網路開銷等。
複製的目的:資料分布儲存、達到負載均衡、備份、高可用性和故障切換、伺服器公升級測試等
複製的過程:首先,主庫上執行sql,改變主庫資料內容,然後根據sql提交的順序,寫主庫日誌,寫完後,主庫commit;其次,備庫啟動io執行緒,去主庫請求資料,主庫開啟乙個執行緒,響應備庫的請求,並將資料發出去,備庫接收到資料,放入中繼日誌中;最後,備庫啟動sql執行緒從中繼日誌中讀取資料,執行,將資料放入備庫中。
啟動複製需要在主備庫中進行一些賬號以及許可權的配置,如果主庫已經執行了一段時間,然後使用一台新的備庫機器對主庫進行複製,情況會有點複雜,需要解決主庫未存放日誌的一些資料的複製。
基於行的複製和基於語句的複製
基於語句的複製是複製每次主庫執行的sql,然後在備庫中重新執行一遍,但是有些情況使這種方式無法完成資料的備份,如current_user,now(),儲存過程與觸發器對錶的修改等。
基於行的複製是將改動的資料行存入日誌,然後在備庫中重新更新一遍,這種方式一般不會丟失資料,有些情況執行效率也很高(如彙總表計算),但有時需要傳輸很多的資料(如基於表的修改操作)。
基於語句的複製能夠解決一些基於行無法解決的問題,如修改schema。
複製拓撲結構:
一主多備,可以利用多備提供高效能讀,可以利用多備進行容錯
主主複製,可以同時提高讀寫效能,但主主之間的寫會造成問題
主主複製,但限制同一時間只能一主寫,提高讀效能,寫的庫可以進行切換,提供故障切換功能,提供熱備份的功能。
分發主庫
樹形主備
複製發生的環境:選擇性複製,將不同的讀分散到不同的備份機器上去;分離不同型別的功能(oltp和olap),利用對資料實時性要求不一樣,對資料的使用方式不一樣的方式,使用主庫提供oltp功能,備庫提供olap功能;資料歸檔,將刪除等操作隔離開,在備庫中過濾掉,只記錄資料;增加全文索引等在一台機器上難以同時實現的功能;在發生異常等情況,建立日誌伺服器使用。
複製的容量規劃:讀與寫的增大與複製主備伺服器負載變化之間的關係,備庫與主庫之間資料延遲的處理,主備之間冗餘容量的規劃。
主備伺服器資料監控,延遲時間監控,一致性監控,重新從主庫同步異常資料
11 可擴充套件的mysql
可擴充套件性就是增加資源後獲得效能(容量和速度)提公升的能力
可擴充套件性定律(usl):線性擴充套件的偏差可通過兩個因素進行建模:無法併發執行的工作和需要互動進行的另外一部分工作。無法併發進行的工作導致增加新的資源到一定程度後,系統執行效能無法再得到有效提公升,需要互動的工作在增加資源後,互動部分需要更多的資源來完成,導致資源增加到一定程度後,互動部分增加的工作比新增的資源帶來的效能還要高。
usl表明,設計可擴充套件性系統時,應該儘量減少序列工作,降低互動量。
可擴充套件性可以提高機器效能獲得,也可以通過增加機器獲得。
如何通過增加機器獲得mysql的效能?簡單的說,就是設計架構,能夠方便地將資料分布到多台機器上去。
資料分布到多台機器上的方式:按功能,將不同功能的資料分布到不同機器;對於某些功能的資料,一台機器已經難以處理,可以對這部分資料按邏輯進行分片,再次分散到不同機器上去;對於分片,分片鍵的選擇是關鍵,分割槽鍵要根據實際情況,儘量減少跨區查詢,並盡量提高效能,如果有些資料跨區查詢不可避免,可以採用在應用層上進行解決。
資料分片時,節點,資料庫,表,分片之間的包含關係。
mysql對於高效能機器的應用方式
mysql的集群擴充套件機制:ndb cluster、clustrix、scalebase
提高效能的另乙個方面是對歷史資料進行歸檔,將活躍資料與非活躍資料進行分離,從而提高效能。
多伺服器之間的負載均衡處理:直接連線方式,中介軟體方式,一主多備方式
12 高可用性
高可用性可從兩方面著手:提高可用時間與降低故障恢復時間
提高可用時間可以從消除單點故障影響等方面
降低故障恢復時間可以從故障轉移,恢復流程制定等方面著手。
13 應用層優化
快取的開銷與效能提公升
快取的層級:瀏覽器快取,cdn快取(squid),應用程式快取,資料庫快取
應用層快取分類:執行緒快取,本地執行緒共享快取,分布式快取,磁碟快取等
快取失效方式:失效時間,寫失效與寫更新,讀失效,
快取失效與版本控制的關係
14 備份與恢復
備份與複製的區別
熱備份、冷備份、暖備份
高效能mysql 樹 高效能mysql精要
1 explain 中 extra using index 表示覆蓋索引,sql優化中最好能使用覆蓋索引,否則 二級索引 需要回表查詢。所謂覆蓋索引,是指要查詢的列正好是索引,而條件也是這個索引之一 2 where 語句中 條件等於主鍵的 在核心索引層完成,條件等於非索引的,在服務層完成 3 讀索引...
mysql高效能索引 mysql高效能索引( )
在開發中,我們知道大多數應用的瓶頸在於sql語句的執行時耗,在這裡並不討論sql語句的安全,僅僅討論高效能sql語句,而與高效能sql語句緊密相連的就是傳說中的 索引。索引 一種工作在儲存引擎端的用於快速找到記錄的一種資料結構。mysql使用索引的方式是 先找到索引的值,再根據索引的值找到資料行。索...
高效能mysql(一) 建立高效能索引
單列索引和多列索引 單列索引 多個單列索引的選擇問題 多個or條件 多個單列的效能往往效能很低,盡量建立高效的多列索引。多列索引 選擇合適的索引順序 避免範圍條件 在where子句中,in是有效的,範圍條件會導致後面的索引無效!在order by中,範圍條件和in都會導致無法按照索引排序!按照索引順...