第十章 復制(上)

復制概述

復制解決的基本問題是讓一臺服務器的數(shù)據(jù)與其他服務器保持同步

MySQL支持兩種復制方式:基于行的復制和基于語句的復制,通過在主庫上記錄二進制日志,然后在備庫重放日志的方式來實現(xiàn)異步數(shù)據(jù)的復制

復制解決的問題
  • 數(shù)據(jù)分布:比如在不同的地理位置存放數(shù)據(jù)備份,不同的數(shù)據(jù)中心
  • 負載均衡:通過復制將讀操作分布到多個服務器上,實現(xiàn)對讀密集型應用的優(yōu)化
  • 備份:復制是備份的一種補充,代替不了備份
  • 高可用性和故障切換:避免單點故障,切換備庫縮短宕機時間
  • MySQL升級測試
復制如何工作
  1. 在主庫上把數(shù)據(jù)更改記錄到二進制日志(Binary Log)中(這些記錄被稱為二進制日志事件)
  2. 備庫將主庫上的日志復制到自己的中繼日志(Relay Log)中
  3. 備庫讀取中繼日志中的事件,將其重放到備庫數(shù)據(jù)之上
  • 兩個新的數(shù)據(jù)庫之間的配置

創(chuàng)建復制賬號、配置主庫和備庫、啟動復制

  • 從另一個服務器開始復制

一個已經(jīng)運行了一段時間的主庫,然后用一臺新安裝的備庫與之同步,此時這臺備庫還沒有數(shù)據(jù),需要三個條件來讓主庫和備庫保持同步:

  1. 在某個時間點的主庫的數(shù)據(jù)快照
  2. 主庫當前的二進制日志文件,二進制日志文件中的偏移量(日志文件坐標)
  3. 從快照時間到現(xiàn)在的二進制日志
  • 從別的服務器克隆備庫的方法
  1. 冷備份:關(guān)閉數(shù)據(jù)庫,拷貝數(shù)據(jù)文件
  2. 熱備份:mysqlhotcopy、rsync
  3. mysqldump
  4. 快照或備份
  5. Xtrabackup:可以在不影響主庫的情況下設(shè)置備庫
  • 如果是從主庫獲得備份,可以從xtrabackup_binlog_pos_innodb文件中獲得復制開始的位置
  • 如果是從另外的備庫獲得備份,可以從xtrabackup_slave_info文件中獲得復制開始的位置
復制的原理
  • 基于語句的復制

主庫會記錄那些造成數(shù)據(jù)更改的查詢,當備庫讀取并重放這些事件時,實際上只是把主庫上執(zhí)行過的sql再執(zhí)行一遍

優(yōu)點:

當主備的模式不同時,邏輯復制能夠在多種情況下工作:比如數(shù)據(jù)類型不同、列的順序不同;基于語句的復制方式一般允許更靈活的操作;基于預計的方式執(zhí)行復制的過程基本上就是執(zhí)行SQL語句。出現(xiàn)問題容易定位。

缺點:

對于儲存過程、觸發(fā)器,存在Bug;如果正在使用觸發(fā)器或者儲存過程,就不要使用基于語句的復制模式,除非能夠清楚的確定不會碰到復制問題

  • 基于行的復制

將實際數(shù)據(jù)記錄在二進制日志中,可以證券的復制每一行數(shù)據(jù)

優(yōu)點:

幾乎沒有基于行復制模式無法處理的場景,容易找到并解決數(shù)據(jù)不一致的情況;比如基于語句的復制模式,在備庫更新一個不存在的記錄時不會失敗,但在基于行的復制模式下則會報錯并停止復制

缺點:

由于語句并沒有在日志里記錄,因為無法判斷執(zhí)行了哪些SQL;使用一種完全不同的方式在備庫進行數(shù)據(jù)變更,執(zhí)行基于行的變化的過程就像一個黑盒子,無法知道服務器正在做什么;

復制拓撲
  1. 一主多備

場景:少量寫、大量讀

  1. 主-主(主動-主動)

(⊙o⊙)…MySQL不支持多主庫復制

  1. 主-主(主動-被動)

構(gòu)建容錯性和高可用的強大方式,主要區(qū)別在于:其中一臺服務器是只讀的被動服務器,這種方式使得反復切換主動和被動服務器非常方便,因為服務器的配置是堆成的。使得故障轉(zhuǎn)移和故障恢復很容易。它也可以讓你在不關(guān)閉服務器的情況下執(zhí)行維護、優(yōu)化表、升級操作系統(tǒng)或者其他任務。

配置:
1)確保兩臺服務器上有相同的數(shù)據(jù)
2)啟動二進制日志,選擇唯一的服務器ID,并創(chuàng)建復制賬號
3)啟用備庫更新的日志記錄,這是故障轉(zhuǎn)移和故障恢復的關(guān)鍵
4)把被動服務器配置成只讀
5)啟動每個服務器的MySQL實例
6)將每個主庫設(shè)置為對方的備庫,使用新創(chuàng)建的二進制日志開始工作

  1. 擁有備庫的主-主結(jié)構(gòu)
  2. 環(huán)形復制

環(huán)形結(jié)構(gòu)非常脆弱,盡量避免

  1. 一個主庫、一個分發(fā)主庫和多個備庫

分發(fā)主庫也是一個備庫,只是其他備庫從這個分發(fā)主庫來接收日志事件,降低主庫的壓力

  1. 樹形或者金字塔形

好處是減輕主庫的負擔,缺點是中間層出現(xiàn)任何錯誤都會影響到多個服務器,中間層次越多,處理故障就會更困難、更復雜

用途建議
  • 選擇性復制

比如按部門,將數(shù)據(jù)復制到不同的數(shù)據(jù)庫

  • 分離功能

在主庫上用作OLTP,在備庫上作OLAP分析

  • 數(shù)據(jù)歸檔

在備庫上實現(xiàn)數(shù)據(jù)歸檔,保留主庫上刪除過的數(shù)據(jù)

  • 將備庫用作全文檢索
  • 只讀備庫
  • 模擬多主庫復制
  • 創(chuàng)建日志服務器

創(chuàng)建沒有數(shù)據(jù)的日志服務器,它的唯一目的就是更加容易重放并且過濾二進制日志事件,對崩潰后重啟復制很有幫助

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • MySQL Replication 主從復制(也稱 AB 復制)允許將來自一個MySQL數(shù)據(jù)庫服務器(主服務器)的...
    紅衣漫漫閱讀 540評論 0 0
  • MySQL Replication 主從復制(也稱 AB 復制)允許將來自一個MySQL數(shù)據(jù)庫服務器(主服務器)的...
    你笑的那么美丶閱讀 507評論 0 0
  • 日志備份和恢復MySQL Replication 復制 一、日志: 日志的分類:查詢?nèi)罩荆篻eneral_log慢...
    哈嘍別樣閱讀 491評論 0 0
  • 一、什么是Mysql主從復制 MySQL主從復制是其最重要的功能之一。主從復制是指一臺服務器充當主數(shù)據(jù)庫服務器,另...
    人在碼途閱讀 2,953評論 0 23
  • 1、承諾不再指責了,但還是每天怨孩子,拼命想救他。 身體反應:干咳想吐,怨氣沖天。 收到信息:媽媽你不要再管我了,...
    悅己心靈閱讀 309評論 0 0

友情鏈接更多精彩內(nèi)容