|導讀
MySQL延遲從庫的好處多多,你瞭解嗎mysql
MySQL的主從複製(replication)關係,不太嚴謹的叫法是「同步」或者「主從同步」。實際上在早期,MySQL的主從並不能實現真正的「同步」(sync),而是「異步」的(async)。sql
MySQL主從複製它能夠有多種模式,最經典的也是最先出現的異步複製(async replication),從5.5版本開始有了半同步複製(semi-sync replication),到了5.7又有了加強半同步。本文要討論的延遲從庫,也是在5.6以後纔有的功能,在這以前須要用percona pt-slave-delay 工具來變相實現。數據庫
另外,從5.6版本開始增長了並行複製,不過這時仍是基於schema的並行模式(slave-parallel-type=DATABASE),效率很是差,意義不大。到了5.7,才實現了真正的並行複製(slave-parallel-type=LOGICAL_CLOCK),複製效率提高不少;還有新增了多源複製,很方便的就能實現多主一從的架構。微信
瞭解完MySQL複製的簡史,咱們切入主題。多線程
MySQL延遲從庫的好處主要有幾點:
一、誤刪除時,能更快恢復數據。
有時候手抖了,把線上數據給誤刪除了,或者誤刪除庫、表、其餘對象,或不加WHERE條件的更新、刪除,均可以讓延遲從庫在誤操做前的時間點停下,而後進行恢復。架構
二、把延遲從庫做爲專用的備份節點。
雖然有必定的延遲,但並不影響利用該節點做爲備份角色,也不影響生產節點數據庫庫。異步
三、還能夠把延遲從庫當作一些問題、案例研究的對象。
個別時候,可能有些binlog event在普通從庫上會有問題(例如早期版本中無主鍵會致使從庫更新很是慢的經典問題),這時就有時間在延遲從庫上慢慢琢磨研究了。async
啓用延遲從庫的方法也挺簡單的,下面是在MySQL 8.0的作法:工具
#直接用 CHANGE MASTER TO 設置,後面的N單位是秒數 CHANGE MASTER TO MASTER_DELAY = N
當發生誤操做須要讓延遲從庫在某個位置上停下來時,用下面的命令:線程
START SLAVE UNTIL { #一、直到指定的GTID位置停下 {SQL_BEFORE_GTIDS | SQL_AFTER_GTIDS} = gtid_set #二、直到指定的binlog位置停下 | MASTER_LOG_FILE = 'log_name', MASTER_LOG_POS = log_pos #三、直到指定的relay log位置停下 | RELAY_LOG_FILE = 'log_name', RELAY_LOG_POS = log_pos #四、直到slave上多個並行線程以前沒有延遲差距了就停下 #由於多線程複製,不一樣線程的複製進度不同,所以有差距 | SQL_AFTER_MTS_GAPS }
P.S,從5.7起,修改 MASTER_DELAY 選項能夠在線當即生效,而無需重啓 slave 線程。
至於具體 MASTER_DELAY 設置多少合適,要估算若是發生誤操做時,DBA平均能到現場的時間,通常建議1小時左右。
延伸閱讀
MySQL複製 | SLAVE複製爲何停了
MySQL複製 | SLAVE延遲很大怎麼辦
MySQL複製 | 精確監控SLAVE延遲
MySQL複製 | 列類型被自動修改致使複製失敗
有問題請微信聯繫微信:lvqingshan_