[MySQL進階之路][No.0003] 主從複製(Replication)在運維中的運用
前序
在之前的兩章裡,主要介紹的主從複製(Replication)的基本使用方法和show slave status一些基本引數,這一章我們講一下主從複製在生產環境中的一些在運維中的常見用途。下面將要介紹的一些運用可能在不同的地方有不同的叫法, 我取的名字可能比較隨意, 如果有不準確或者有歧義的地方還請多多指教。
整體遷移
首先最常見的是主從資料庫整體的遷移。具體的運用場景例如,當要換一批新的伺服器的時候,需要將當前舊伺服器的資料庫服務遷移到新的伺服器上。這個時候就可以利用主從複製來進行伺服器的更換。具體流程如下圖。
圖例很簡單,把新的主從叢集做為slave掛在原來的叢集下。之後把寫入讀取的指向改到新伺服器上,整個遷移工作也就算完成了。
需要注意的是new master中一定要設定log_slave_updates為有效,不然不會將更新寫入binlog檔案中。
整體合併
合併兩個或者多個主從資料庫群也是在運維中經常見到的。為了節省成本,需要將多個主從叢集合併到一個叢集中,這時可以運用replication來整合資料。從多個主伺服器獲取資料需要運用multi-source replication(MSR)。其實就是通過change master命令的channel引數來區分多個複製源。
大體的原理如上圖所示, 這裡需要注意的是如果你使用的是5.7, 並且設定了binlog_format=row, binlog_rows_query_log_events=on。
使用MSR會出現memory leak的bug。所以在5.7版本下,把binlog_format設成statement之後再做MSR吧。
https://bugs.mysql.com/bug.ph...資料表分割
當一張表越來越到大的時候, 其查詢速度也會變的越來越慢。 為了優化效能, 我們需要對資料表進行分割。資料表分割分為垂直分割和水平分割。
垂直分割是對錶的列(column)進行分割。如果一張表裡有一些列不經常用,可以用這種分割方法來提高搜尋速度。缺點就是提高了業務層面的複雜度。
水平分割是將一張資料表的資料(record)分散到多個表裡。這樣不僅可以減小索引B+樹的層數,減少磁碟的讀取次數提高索引速度。(只有當索引是比較大的值的時候優化提升比較顯著)
水平分割和垂直分割的實現方法可能有很多種, 用replication來實現資料表分割個人覺得理解和實現比較簡單。
水平分割
例如上面的例子,本來的資料庫裡Table1表裡的user1和user2的兩個資料,通過replication將資料複製到兩個新的主從叢集中,再將不要的資料刪除, 簡單的水平分割就完成了。
垂直分割
和水平分割一樣,只是在刪除資料的時候刪除column。
小結
簡單介紹了幾種比較常見的replication運用的例項。這裡只是介紹了最基本的實現原理,在實際生產環境中需要注意的東西還有很多。在以後有機會再同大家分享。