這篇文章主要介紹了MySQL中pt-online-schema-change怎么用,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
玉溪ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為成都創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18980820575(備注:SSL證書合作)期待與您的合作!
pt-online-schema-change
限制條件
1 外鍵限制,配合使用–alter-foreign-keys-method參數(shù)
2 必須存在主鍵
3 表上不能存在after(增刪改)三個(gè)觸發(fā)器
alter-foreign-keys-method說明
兩種方式(t1,t2有外鍵依賴于t1)
rebuild_constraints(優(yōu)先)
它先通過alter table t2 drop fk1, add _fk1重建外鍵,指向新表
再rename t1 t1_old,_t1_new t1 交換表名,不影響客戶端
刪除舊表t1_old
如果t2表太大,以致alter操作耗時(shí)過長,pt-osc有可能會強(qiáng)制選擇另外一種方式drop_swap
drop_swap
禁用t2表外鍵約束檢查,設(shè)置FOREIGN_KEY_CHECKS = 0
然后drop t1原表 rename _t1_new t1
這種方式速度快,也不阻塞請求,但是有風(fēng)險(xiǎn)。drop表的瞬間到rename過程,t1表是不存在,遇到請求會報(bào)錯
pt-osc和online ddl對比
1 ddl在必須copy table時(shí)成本很高,不宜采用?
2 pt-osc存在觸發(fā)器時(shí),就用不了
3 修改index,foreign-key,column-name優(yōu)先使用ddl,并指定ALGORITHM=INPLACE
示例
1 添加新列
pt-online-schema-change --user=user --password=xxx --host=ip --port=33066 --alter “add column col1 VARCHAR(64) NULL COMMENT ‘訂單號’” D=sy,t=t1 --execute --charset=utf8 --nocheck-replication-filters --max-load=“Threads_running=20”
2 修改列類型
pt-online-schema-change --user=user --password=xxx --host=ip --port=3306 --alter “convert to character set utf8mb4 collate utf8mb4_bin” D=db1,t=t1 --execute --nocheck-replication-filters --charset=utf8 --max-load=“Threads_running=20”
3 添加刪除索引
pt-online-schema-change --user=user --password=xxx --host=ip --port=3306 --alter “DROP KEY cid,add key idx_game_id(game_id)” D=db1,t=t1 --execute --charset=utf8 --nocheck-replication-filters --max-load=“Threads_running=20”
4 修改主鍵(假設(shè)原主鍵是復(fù)合主鍵)
會涉及以下修改動作
4.1刪除復(fù)合主鍵
4.2添加新的自增主鍵
4.3原復(fù)合主鍵字段,修改成唯一索引
ps: 修改主鍵影響最大的就是delete觸發(fā)器,新表t2上的主鍵字段在舊表t1上不存在,無法根據(jù)主鍵條件出發(fā)刪除新表t2數(shù)據(jù),如果表上相關(guān)列上沒有索引或者沒有主鍵,那么刪除的代價(jià)非常高,所以在刪除主鍵的同時(shí)一定添加復(fù)合索引
–alter “drop primary key, add column id auto_crement primary key,add unique key uk_pk_k(pk,k)”
5 重建表
pt-online-schema-change --user=user --password=xxx --host=ip --port=3306 --alter “engine=innodb” D=db1,t=t1 --execute --nocheck-replication-filters --charset=utf8 --max-load=“Threads_running=20” --max-lag=2s --chunk-time=1s
參數(shù)說明
execute :該參數(shù)用于執(zhí)行alter操作,如果不加的話,只會做一些安全檢查后退出。一定要確保知道如何使用該工具并有合適的備份后,再添加該參數(shù)。使用該參數(shù)時(shí),除了對對象表所需的權(quán)限外,還需要SUPER, REPLICATION SLAVE兩種權(quán)限。
nocheck-replication-filters:
max-lag:中斷數(shù)據(jù)拷貝直到所有的復(fù)制延遲都少于這個(gè)值,默認(rèn)為1S。每一個(gè)chunk拷貝完成后,OSC都會去show salve status通過Seconds_Behind_Master來確定所有的復(fù)制情況,任何相關(guān)的slave的復(fù)制延遲高于該值時(shí),OSC就會停止數(shù)據(jù)拷貝–check-interval參數(shù)所指定的時(shí)間,然后重新發(fā)起檢查,直到延遲降低到該值以下。
charset:
max-load:默認(rèn)threads_running = 25, 每個(gè)chunk(chunk是啥)拷貝完,會檢查show global status,檢查指標(biāo)是否超過了指定tr線程數(shù)的閥值,如果超過,數(shù)據(jù)拷貝暫停。
critical-load:默認(rèn)threads_running = 50,每個(gè)chunk(chunk是啥)拷貝完,會檢查show global status,檢查指標(biāo)是否超過了指定tr線程數(shù)的閥值,如果超過 終止pt進(jìn)程
chunk-time:默認(rèn)是0.5秒,工具會根據(jù)當(dāng)前系統(tǒng)運(yùn)行繁忙程度計(jì)算出在該指定時(shí)間內(nèi)可以處理的數(shù)據(jù)行數(shù)(即chunks),(相比較chunk-size靈活)
chunk-size:指定chunk的大小
charset: 指定連接的字符集,遠(yuǎn)程操作記得加上,否則可能出現(xiàn)亂碼 ,--charset=utf8 或 D=db1,t=t1,A=utf8
ps:
threads_running代表非sleeping狀態(tài)的線程數(shù)量。
threads_running增長的原因:
1 客戶端連接暴增
2 系統(tǒng)性能瓶頸,cpu io 內(nèi)存 swap
3 異常sql
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“mysql中pt-online-schema-change怎么用”這篇文章對大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!
網(wǎng)頁名稱:mysql中pt-online-schema-change怎么用
URL網(wǎng)址:http://www.chinadenli.net/article18/iighgp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營銷型網(wǎng)站建設(shè)、手機(jī)網(wǎng)站建設(shè)、云服務(wù)器、網(wǎng)站收錄、域名注冊、品牌網(wǎng)站設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)