MySQL數(shù)據(jù)實(shí)時(shí)克隆的初步設(shè)計(jì)
之前我們重點(diǎn)建設(shè)了數(shù)據(jù)克隆的一個(gè)服務(wù),其實(shí)起這個(gè)名字也琢磨了好久,說邏輯備份恢復(fù)很多業(yè)務(wù)同學(xué)都不大能理解,GET到我們要解決的問題,而數(shù)據(jù)克隆的概念就比較清晰。
先來(lái)說說我們對(duì)數(shù)據(jù)克隆的定義
1)數(shù)據(jù)克隆快速?gòu)木€上導(dǎo)出指定庫(kù)/表數(shù)據(jù),并構(gòu)建虛擬環(huán)境,從而來(lái)提供高效的數(shù)據(jù)服務(wù);
2)功能方面實(shí)現(xiàn)了業(yè)務(wù)自助提取數(shù)據(jù),分鐘級(jí)構(gòu)建環(huán)境,可以通過workbench等工具訪問數(shù)據(jù),無(wú)需DBA介入;
3)安全方面支持?jǐn)?shù)據(jù)庫(kù)操作日志審計(jì),已接入ES審計(jì),并提供了庫(kù)/表訪問過濾,虛擬環(huán)境隨機(jī)分配,臨時(shí)密碼交付,同時(shí)限定了虛擬環(huán)境的使用時(shí)長(zhǎng)。
適用場(chǎng)景:
1)線上配置數(shù)據(jù)的快速查看;
2)提取線上表結(jié)構(gòu);
3)日志數(shù)據(jù)查詢,線上大表;
4)線上SQL異常,快速構(gòu)建虛擬環(huán)境進(jìn)行SQL優(yōu)化,壓測(cè)等;
5)指定大表的變更和數(shù)據(jù)操作影響評(píng)估;
6)數(shù)據(jù)補(bǔ)丁合并,基于業(yè)務(wù)邏輯的數(shù)據(jù)操作和數(shù)據(jù)補(bǔ)丁整理。
而從數(shù)據(jù)克隆的使用來(lái)看,其實(shí)能夠滿足一些不確定的需求,比如做一些全量的查詢過濾等,但是因?yàn)槭呛途€上環(huán)境隔離的,所以就不會(huì)同步線上的數(shù)據(jù),在這一點(diǎn)上可以更進(jìn)一步,那就是落地實(shí)時(shí)數(shù)據(jù)克隆,從而能夠?qū)崿F(xiàn)實(shí)時(shí)的數(shù)據(jù)同步,當(dāng)然這種同步是一種多源冪等復(fù)制,打個(gè)比方,源庫(kù)有10張表,我們的目標(biāo)環(huán)境可能只克隆了2張表,那么在做實(shí)時(shí)復(fù)制時(shí),就需要排除那8張表,而且同一個(gè)實(shí)例上面有多套環(huán)境,所以會(huì)自然開啟多源復(fù)制模式。
如果排除一些瑣碎的細(xì)節(jié),我們可以概括為:實(shí)時(shí)克隆的核心是對(duì)于GTID_SET的管理,在設(shè)計(jì)上需要考慮如下的一些因素:
基礎(chǔ)限定和配置
1. 同一個(gè)實(shí)例的數(shù)據(jù)庫(kù)只能克隆一次
2. 數(shù)據(jù)開啟GTID,實(shí)時(shí)克隆暫不支持MySQL 5.5版本
3. 數(shù)據(jù)庫(kù)參數(shù)slave_exec_mode值為IDEMPOTENT
4. 設(shè)置數(shù)據(jù)庫(kù)參數(shù)skip-slave-errors=1146
5. 實(shí)時(shí)克隆環(huán)境建議為只讀
6. 克隆的數(shù)據(jù)庫(kù)復(fù)制賬號(hào)為db_clone_repl
7. 通常克隆環(huán)境的表數(shù)量小于源庫(kù)環(huán)境
GTID變更流程
1. 數(shù)據(jù)邏輯備份時(shí),需要包含GTID值,并記錄到導(dǎo)出記錄中
2. 數(shù)據(jù)邏輯恢復(fù)時(shí),可以參考如下的步驟:
a) 如果已有數(shù)據(jù)復(fù)制通道運(yùn)行
i. 暫停復(fù)制通道Channel
ii. 得到固定的GTID_SET值
iii. 追加導(dǎo)出的GTID至GTID_SET,并更新至GTID_PURGED
iv. 啟動(dòng)復(fù)制通道Channel
b) 如果沒有數(shù)據(jù)復(fù)制通道運(yùn)行
i. 追加導(dǎo)出的GTID至當(dāng)前GTID_SET,并更新至GTID_PURGED
ii. 啟動(dòng)復(fù)制通道Channel
注:復(fù)制通道Channel的命名為db_clone_【源IP】_【源端口】
3. 每天的定時(shí)任務(wù)清理環(huán)境時(shí),自動(dòng)執(zhí)行reset master操作清空GTID_SET
本文轉(zhuǎn)載自微信公眾號(hào)「楊建榮的學(xué)習(xí)筆記」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系楊建榮的學(xué)習(xí)筆記公眾號(hào)。