mysql使用主从复制迁移,[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運用的實例。這里只是介紹了最基本的實現原理,在實際生產環境中需要注意的東西還有很多。在以后有機會再同大家分享。
總結
以上是生活随笔為你收集整理的mysql使用主从复制迁移,[MySQL进阶之路][No.0003] 主从复制(Replication)在运维中的运用...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 可能是史上最美手机!魅族20系列来了:视
- 下一篇: 英国小镇被巨型老鼠入侵:像猫一样大 悬崖