
1、連上從庫(kù),在主庫(kù)上修改
這是gh-ost默認(rèn)的工作模式,它會(huì)查看從庫(kù)情況,找到集群的主庫(kù)并且連接上去。修改操作的具體步驟是:
在主庫(kù)上讀寫行數(shù)據(jù);
在從庫(kù)上讀取二進(jìn)制日志事件,將變更應(yīng)用到主庫(kù)上;
在從庫(kù)上查看表格式、字段、主鍵、總行數(shù)等;
在從庫(kù)上讀取gh-ost內(nèi)部事件日志(比如心跳);
在主庫(kù)上完成表切換;
如果主庫(kù)的二進(jìn)制日志格式是Statement,就可以使用這種模式。但從庫(kù)就必須配成啟用二進(jìn)制日志(log_bin, log_slave_updates),還要設(shè)成Row格式(binlog_format=ROW),實(shí)際上gh-ost會(huì)在從庫(kù)上幫你做這些設(shè)置。
事實(shí)上,即使把從庫(kù)改成Row格式,這仍然是對(duì)主庫(kù)侵入最少的工作模式。
2、連上主庫(kù)
如果沒有從庫(kù),或者不想在從庫(kù)上操作,那直接用主庫(kù)也是可以的。gh-ost就會(huì)在主庫(kù)上直接做所有的操作。仍然可以在上面查看主從復(fù)制延遲。
主庫(kù)必須產(chǎn)生Row格式的二進(jìn)制日志;
啟動(dòng)gh-ost時(shí)必須用--allow-on-master選項(xiàng)來(lái)開啟這種模式;
3、在從庫(kù)上修改和測(cè)試
這種模式會(huì)在從庫(kù)上做修改。gh-ost仍然會(huì)連上主庫(kù),但所有操作都是在從庫(kù)上做的,不會(huì)對(duì)主庫(kù)產(chǎn)生任何影響。在操作過(guò)程中,gh-ost也會(huì)不時(shí)地暫停,以便從庫(kù)的數(shù)據(jù)可以保持最新。
--migrate-on-replica選項(xiàng)讓gh-ost直接在從庫(kù)上修改表。最終的切換過(guò)程也是在從庫(kù)正常復(fù)制的狀態(tài)下完成的。
--test-on-replica表明操作只是為了測(cè)試目的。在進(jìn)行最終的切換操作之前,復(fù)制會(huì)被停止。原始表和臨時(shí)表會(huì)相互切換,再切換回來(lái),最終相當(dāng)于原始表沒被動(dòng)過(guò)。主從復(fù)制暫停的狀態(tài)下,你可以檢查和對(duì)比這兩張表中的數(shù)據(jù)。
gh-ost在GitHub的應(yīng)用
現(xiàn)在Github生產(chǎn)環(huán)境的表修改操作全都是用gh-ost完成的。每天只要有需求來(lái)了,技術(shù)人員就把它運(yùn)行起來(lái),有時(shí)候一天會(huì)做好多次。因?yàn)樗袑徲?jì)和控制功能,所以還可以把它和Chatops系統(tǒng)整合起來(lái)。技術(shù)人員可以對(duì)它的工作進(jìn)度有非常清晰的了解,因此可以控制它的行為。在生產(chǎn)環(huán)境中各種指標(biāo)和事件都被收集起來(lái),讓大家可以以圖形化的方式看到操作情況。
開源
gh-ost按照 MIT許可協(xié)議 向開源社區(qū) 發(fā)布 。
盡管現(xiàn)在已經(jīng)穩(wěn)定了,Github還是有一些想要繼續(xù)改進(jìn)的方面,因此現(xiàn)在把它發(fā)布出來(lái),希望能得到來(lái)自于社區(qū)的參與和貢獻(xiàn)。Github也會(huì)不斷把社區(qū)提供的建議等公布出來(lái)。
Github的技術(shù)團(tuán)隊(duì)還在積極維護(hù)gh-ost。希望你能試用一下,他們花了很大的精力,相信它是非??煽康?。