MySQL延時複製簡介

 

公司有一套mysqlAB複製架構的生產庫,一主一從的架構, 每週一凌晨0天都自動作全備。mysql

一切正常,但今天(假設爲周6)不當心誤刪除了一張表,從庫也會跟着作誤刪除。假設這張表裏有好幾年的業務數據,  如何恢復呢?sql

有如下幾種思路:數據庫

須要把這幾年內全部的二進制日誌先合併,再經過sed,grep,awk等命令處理把這張表從建表到如今的全部操  做按順序找出來(固然要除掉你最後誤刪除的那條),而後導回去(數據量太大就不建議了)服務器

先恢復週一的全備到測試庫上,而後再恢復全備到如今的二進制日誌(除了誤刪除的那句),再把那張表導出  來,導回到生產庫上架構

有延時複製的話,在延時庫上導出這張表,導回A,  再用二進制日誌恢復延時時間內的誤刪表的操做(除了誤刪除的那句)socket

 

從上面的分析來看,延時複製可以在必定程序上簡化恢復的過程。工具

 

Maatkit是一個Perl寫的Mysql開源管理工具包, 裏面有一個mk-slave-delay 命令能夠實現延時複製。測試

能夠在www.maatkit.org網站上下載軟件包。我這裏軟包爲maatkit-7540.tar.gz網站

 

 

搭建過程ui

 

首先須要搭建好mysqlAB複製(傳統AB複製,基於GTIDs的AB複製,半同步複製等均可以),而後作如下過程

 

 

1, 在須要作延時複製的slave上安裝mattkit

 

(注意: master和正常的slave不用安裝)

 

 

 

2, 確認整個架構全部機器時間同步

由於延時是要按時間來計算的,因此時間必需要一致, 全部服務器執行下面的命令,並比較時間

3, 運行延時複製進程

確認時間一致, 而且AB複製正常的狀況下, 在slave上執行下面的命令

4.jpg

 

參數

說明

--defaults-file=/mysql56/etc/my.cnf

指定slave的mysql配置文件

localhost

指定mysql爲localhost本機上

--quiet

指定輸出信息爲靜默模式,在終端不會顯示不少信息

--delay=1m

表示延時一分鐘,生產環境根據實際需求來調整

--interval=15s

15秒爲一個間隔週期,延時時間到了後,SQL線程會執行15秒內的操做

--user=root

指定鏈接數據庫的用戶

--password=123

指定鏈接數據庫的密碼

--socket=/tmp/mysql56.sock

指定鏈接數據庫的socket文件路徑

 

4, 測試

在slave上查看複製狀態,會發現SQL線程爲NO,這是正常的,由於延時複製裏IO線程是實時的,只是把SQL線程延時了

5.jpg

而後在master上找一個測試表插入幾條數據,等待1分鐘後,纔會看到數據在salve上覆製成功

相關文章
相關標籤/搜索