mysql分表與分割槽、主從複製
1.分割槽的工作原理
對使用者而言,分割槽表是一個獨立的邏輯表,但mysql底層將其分成了多個物理子表,每一個分割槽都是一個獨立的子檔案;
分割槽不需要改動原先的sql語句。
建立表時使用partition by子句定義每個分割槽存放的資料,執行查詢時,mysql優化器會過濾那些沒有我們需要查詢的資料的分割槽,這樣只需要查詢有我們需要資料的分割槽即可。
分割槽的主要目的是將資料按一個較粗的粒度分在不同的表中,也可以將相關的資料存放在一起,如果一次性刪除整個分割槽也很方便。
2.分割槽使用場景
表非常大,無法全部存在記憶體,或者只在表的最後有熱點資料,其他都是歷史資料;
分割槽表的資料更易維護,可以對獨立的分割槽進行獨立的操作;
分割槽的資料可以存放在不同的機器上,從而高效地利用資源;
可以備份和恢復獨立的分割槽;
3.分割槽的限制
一張表只能分成1024個分割槽;
分割槽欄位中如果有主鍵和唯一索引列,那麼主鍵和唯一索引列都必須包含進來;
分割槽表中無法使用外來鍵;
所有分割槽必須使用;
某些引擎不支援分割槽;
對於myisam分割槽的表,不能再使用load index into cache;
對於MyIsam表,使用分割槽時需要開啟更多的檔案描述符;
4.分庫分表的工作原理
通過hash演算法或一些工具實現將一張表水平或垂直物理拆分;
1)水平分割
表很大,分割後可以降低查詢時需要讀的資料和索引的頁數;
2)垂直分割
把主鍵和一些列放在一個表,把主鍵和另外一些列放另一張表
適用於表中某些列常用,而另外一些列不常用
可以使資料行變小,同一資料頁能存更多資料,減少I/O次數
缺點:
管理冗餘列,查詢所有資料要使用join;
有些分表的策略基於應用層的邏輯演算法,一旦邏輯演算法改變,整個分表邏輯都會改變,擴充套件性差;
對應用層,邏輯演算法會增加開發成本。
5.主從複製
在主庫上把資料更改記錄到二進位制日誌
從庫將主庫的日誌複製到自己的中繼日誌
從庫讀取中繼日誌的事件,將其重放到從庫資料中
1)解決的問題
資料分佈:隨意停止或開始複製,並在不同地理位置分佈資料備份
負載均衡:降低單個伺服器的壓力
高可用和故障切換:幫助應用程式避免單點失敗
升級測試:可以使用更高版本的mysql作為從庫