1. 程式人生 > >mysql分表與分割槽、主從複製

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作為從庫