部署MySQL延遲從庫的好處小結(jié)
前言
MySQL的主從復(fù)制(replication)關(guān)系,不太嚴(yán)謹(jǐn)?shù)慕蟹ㄊ恰巴健被蛘摺爸鲝耐健?。?shí)際上在早期,MySQL的主從并不能實(shí)現(xiàn)真正的“同步”(sync),而是“異步”的(async)。
MySQL主從復(fù)制它可以有多種模式,最經(jīng)典的也是最早出現(xiàn)的異步復(fù)制(async replication),從5.5版本開始有了半同步復(fù)制(semi-sync replication),到了5.7又有了增強(qiáng)半同步。本文要討論的延遲從庫,也是在5.6之后才有的功能,在這之前需要用percona pt-slave-delay 工具來變相實(shí)現(xiàn)。
另外,從5.6版本開始增加了并行復(fù)制,不過這時(shí)還是基于schema的并行模式(slave-parallel-type=DATABASE),效率非常差,意義不大。到了5.7,才實(shí)現(xiàn)了真正的并行復(fù)制(slave-parallel-type=LOGICAL_CLOCK),復(fù)制效率提升很多;還有新增了多源復(fù)制,很方便的就能實(shí)現(xiàn)多主一從的架構(gòu)。
了解完MySQL復(fù)制的簡史,我們切入主題。
MySQL延遲從庫的好處主要有幾點(diǎn):
1、誤刪除時(shí),能更快恢復(fù)數(shù)據(jù)。
有時(shí)候手抖了,把線上數(shù)據(jù)給誤刪除了,或者誤刪除庫、表、其他對(duì)象,或不加WHERE條件的更新、刪除,都可以讓延遲從庫在誤操作前的時(shí)間點(diǎn)停下,然后進(jìn)行恢復(fù)。
2、把延遲從庫作為專用的備份節(jié)點(diǎn)。雖然有一定的延遲,但并不影響利用該節(jié)點(diǎn)作為備份角色,也不影響生產(chǎn)節(jié)點(diǎn)數(shù)據(jù)庫庫。
3、還可以把延遲從庫當(dāng)做一些問題、案例研究的對(duì)象。個(gè)別時(shí)候,可能有些binlog event在普通從庫上會(huì)有問題(例如早期版本中無主鍵會(huì)導(dǎo)致從庫更新非常慢的經(jīng)典問題),這時(shí)就有時(shí)間在延遲從庫上慢慢琢磨研究了。
啟用延遲從庫的方法也挺簡單的,下面是在MySQL 8.0的做法:
#直接用 CHANGE MASTER TO 設(shè)置,后面的N單位是秒數(shù) CHANGE MASTER TO MASTER_DELAY = N
當(dāng)發(fā)生誤操作需要讓延遲從庫在某個(gè)位置上停下來時(shí),用下面的命令:
START SLAVE
UNTIL {
#1、直到指定的GTID位置停下
{SQL_BEFORE_GTIDS | SQL_AFTER_GTIDS} = gtid_set
#2、直到指定的binlog位置停下
| MASTER_LOG_FILE = ‘log_name', MASTER_LOG_POS = log_pos
#3、直到指定的relay log位置停下
| RELAY_LOG_FILE = ‘log_name', RELAY_LOG_POS = log_pos
#4、直到slave上多個(gè)并行線程之前沒有延遲差距了就停下
#因?yàn)槎嗑€程復(fù)制,不同線程的復(fù)制進(jìn)度不一樣,因此有差距
| SQL_AFTER_MTS_GAPS }
P.S,從5.7起,修改 MASTER_DELAY 選項(xiàng)可以在線立即生效,而無需重啟 slave 線程。
至于具體 MASTER_DELAY 設(shè)置多少合適,要估算如果發(fā)生誤操作時(shí),DBA平均能到現(xiàn)場的時(shí)間,一般建議1小時(shí)左右。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
mysql8.0.11安裝配置方法圖文教程 MySQL8.0新密碼認(rèn)證方式
這篇文章主要為大家詳細(xì)介紹了mysql8.0.11安裝配置方法圖文教程,以及MySQL8.0新密碼認(rèn)證方式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-11-11
在MySQL中實(shí)現(xiàn)基于時(shí)間點(diǎn)的數(shù)據(jù)恢復(fù)
在MySQL中實(shí)現(xiàn)基于時(shí)間點(diǎn)的數(shù)據(jù)恢復(fù)是一個(gè)復(fù)雜但可行的過程,主要依賴于MySQL的二進(jìn)制日志(Binary Log),本文介紹了實(shí)現(xiàn)此功能的一般步驟,并有詳細(xì)的代碼供大家參考,需要的朋友可以參考下2024-03-03
mysql大小寫敏感導(dǎo)致程序無法啟動(dòng)的問題
這篇文章主要介紹了mysql大小寫敏感導(dǎo)致程序無法啟動(dòng)的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11
MySQL數(shù)據(jù)表分區(qū)策略及優(yōu)缺點(diǎn)分析
項(xiàng)目開發(fā)中,隨著數(shù)據(jù)庫數(shù)據(jù)量越來越大,單個(gè)表中數(shù)據(jù)太多,從而導(dǎo)致查詢速度變慢,而且由于表的鎖機(jī)制導(dǎo)致應(yīng)用操作也受到嚴(yán)重影響,出現(xiàn)了數(shù)據(jù)庫性能瓶頸。因此我們需要考慮分表與分區(qū),MySQL分表分區(qū)就是為了解決大數(shù)據(jù)量導(dǎo)致MySQL性能低下的問題。2021-05-05
mysql自動(dòng)停止 Plugin FEDERATED is disabled 的完美解決方法
今天在配置服務(wù)器的時(shí)候,發(fā)現(xiàn)mysql的一個(gè)錯(cuò)誤提示在 本地計(jì)算機(jī) 無法啟動(dòng) MySQL 服務(wù)。錯(cuò)誤 1067: 進(jìn)程意外終止,其實(shí)原因很多這個(gè)不是導(dǎo)致進(jìn)程意外終止的最終原因,但可以解決2016-04-04

