OS:centos 6.5
創(chuàng)新互聯(lián)建站主要從事成都網(wǎng)站制作、網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)昌邑,十余年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):13518219792
DB:percona server 5.6.32
gh-ost:1.0.21
DB-M:192.168.128.128
DB-S : 192.168.128.129
簡介:
gh-ost是github開源的一款在線執(zhí)行sql的開源工具??梢杂糜谠诰€表結(jié)構(gòu)變更(特別是大表,原因下面講)
在線表結(jié)構(gòu)變更,目前常用有以下幾種方式:
1.小表:online ddl (5.6及其以后版本)
創(chuàng)建臨時(shí)表為更改后的表結(jié)構(gòu),更新臨時(shí)表數(shù)據(jù),原表的新入數(shù)據(jù)記錄入內(nèi)存中的alter log,rename
2.大表:pt-ost工具。觸發(fā)器機(jī)制
3.大表:gh-ost。,創(chuàng)建臨時(shí)表。無觸發(fā)器,根據(jù)binlog機(jī)制
測試:
test庫下usertb表(1000w)
gh-ost測試:
gh-ost \
--max-load=Threads_running=25 \
--critical-load=Threads_running=64 \
--chunk-size=1000 \
--throttle-control-replicas="192.168.128.129:3306" \
--max-lag-millis=1500 \
--initially-drop-old-table \
--initially-drop-ghost-table \
--initially-drop-socket-file \
--ok-to-drop-table \
--conf="/etc/my.cnf" \
--host="192.168.128.129" \
--port=3306 \
--user="root" \
--password="thy" \
--database="test" \
--table="usertb" \
--verbose \
--alter="add ps_id int(10) default null" \
--switch-to-rbr \
--allow-master-master \
--cut-over=default \
--default-retries=120 \
--panic-flag-file=/tmp/ghost.panic.flag \
--postpone-cut-over-flag-file=/tmp/ghost.postpone.flag \
--execute
執(zhí)行過程中
128:
129:
最后:
結(jié)論:從截圖可以看出,gh-ost的原理是利用了M-S和binlog的工作模式,在無觸發(fā)器的機(jī)制上最大程度的減少了對(duì)主庫的侵入以及MDL對(duì)于源數(shù)據(jù)的保護(hù),后期可以考慮作為大表ddl的工具。