[MySQL進階之路][No.0003] 主從複製(Replication)在運維中的運用

前序

在以前的兩章裏,主要介紹的主從複製(Replication)的基本使用方法和show slave status一些基本參數,這一章咱們講一下主從複製在生產環境中的一些在運維中的常見用途。下面將要介紹的一些運用可能在不一樣的地方有不一樣的叫法, 我取的名字可能比較隨意, 若是有不許確或者有歧義的地方還請多多指教。php

總體遷移

首先最多見的是主從數據庫總體的遷移。具體的運用場景例如,當要換一批新的服務器的時候,須要將當前舊服務器的數據庫服務遷移到新的服務器上。這個時候就能夠利用主從複製來進行服務器的更換。具體流程以下圖。
圖片描述mysql

圖例很簡單,把新的主從集羣作爲slave掛在原來的集羣下。以後把寫入讀取的指向改到新服務器上,整個遷移工做也就算完成了。
須要注意的是new master中必定要設置log_slave_updates爲有效,否則不會將更新寫入binlog文件中。sql

總體合併

合併兩個或者多個主從數據庫羣也是在運維中常常見到的。爲了節省成本,須要將多個主從集羣合併到一個集羣中,這時能夠運用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。spa

小結

簡單介紹了幾種比較常見的replication運用的實例。這裏只是介紹了最基本的實現原理,在實際生產環境中須要注意的東西還有不少。在之後有機會再同你們分享。orm

相關文章
相關標籤/搜索