您好,登錄后才能下訂單哦!
這篇文章主要介紹了mysql中pt-online-schema-change怎么用,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
pt-online-schema-change
限制條件
1 外鍵限制,配合使用–alter-foreign-keys-method參數(shù)
2 必須存在主鍵
3 表上不能存在after(增刪改)三個觸發(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操作耗時過長,pt-osc有可能會強制選擇另外一種方式drop_swap
drop_swap
禁用t2表外鍵約束檢查,設置FOREIGN_KEY_CHECKS = 0
然后drop t1原表 rename _t1_new t1
這種方式速度快,也不阻塞請求,但是有風險。drop表的瞬間到rename過程,t1表是不存在,遇到請求會報錯
pt-osc和online ddl對比
1 ddl在必須copy table時成本很高,不宜采用?
2 pt-osc存在觸發(fā)器時,就用不了
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 修改主鍵(假設原主鍵是復合主鍵)
會涉及以下修改動作
4.1刪除復合主鍵
4.2添加新的自增主鍵
4.3原復合主鍵字段,修改成唯一索引
ps: 修改主鍵影響最大的就是delete觸發(fā)器,新表t2上的主鍵字段在舊表t1上不存在,無法根據(jù)主鍵條件出發(fā)刪除新表t2數(shù)據(jù),如果表上相關列上沒有索引或者沒有主鍵,那么刪除的代價非常高,所以在刪除主鍵的同時一定添加復合索引
–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ù)時,除了對對象表所需的權限外,還需要SUPER, REPLICATION SLAVE兩種權限。
nocheck-replication-filters:
max-lag:中斷數(shù)據(jù)拷貝直到所有的復制延遲都少于這個值,默認為1S。每一個chunk拷貝完成后,OSC都會去show salve status通過Seconds_Behind_Master來確定所有的復制情況,任何相關的slave的復制延遲高于該值時,OSC就會停止數(shù)據(jù)拷貝–check-interval參數(shù)所指定的時間,然后重新發(fā)起檢查,直到延遲降低到該值以下。
charset:
max-load:默認threads_running = 25, 每個chunk(chunk是啥)拷貝完,會檢查show global status,檢查指標是否超過了指定tr線程數(shù)的閥值,如果超過,數(shù)據(jù)拷貝暫停。
critical-load:默認threads_running = 50,每個chunk(chunk是啥)拷貝完,會檢查show global status,檢查指標是否超過了指定tr線程數(shù)的閥值,如果超過 終止pt進程
chunk-time:默認是0.5秒,工具會根據(jù)當前系統(tǒng)運行繁忙程度計算出在該指定時間內可以處理的數(shù)據(jù)行數(shù)(即chunks),(相比較chunk-size靈活)
chunk-size:指定chunk的大小
charset: 指定連接的字符集,遠程操作記得加上,否則可能出現(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 內存 swap
3 異常sql
感謝你能夠認真閱讀完這篇文章,希望小編分享的“mysql中pt-online-schema-change怎么用”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業(yè)資訊頻道,更多相關知識等著你來學習!
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。