這篇文章主要介紹了MySQL中pt-online-schema-change怎么用,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
玉溪ssl適用于網站、小程序/APP、API接口等需要進行數據傳輸應用場景,ssl證書未來市場廣闊!成為成都創新互聯公司的ssl證書銷售渠道,可以享受市場價格4-6折優惠!如果有意向歡迎電話聯系或者加微信:18980820575(備注:SSL證書合作)期待與您的合作!
pt-online-schema-change
限制條件
1 外鍵限制,配合使用–alter-foreign-keys-method參數
2 必須存在主鍵
3 表上不能存在after(增刪改)三個觸發器
alter-foreign-keys-method說明
兩種方式(t1,t2有外鍵依賴于t1)
rebuild_constraints(優先)
它先通過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存在觸發器時,就用不了
3 修改index,foreign-key,column-name優先使用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觸發器,新表t2上的主鍵字段在舊表t1上不存在,無法根據主鍵條件出發刪除新表t2數據,如果表上相關列上沒有索引或者沒有主鍵,那么刪除的代價非常高,所以在刪除主鍵的同時一定添加復合索引
–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
參數說明
execute :該參數用于執行alter操作,如果不加的話,只會做一些安全檢查后退出。一定要確保知道如何使用該工具并有合適的備份后,再添加該參數。使用該參數時,除了對對象表所需的權限外,還需要SUPER, REPLICATION SLAVE兩種權限。
nocheck-replication-filters:
max-lag:中斷數據拷貝直到所有的復制延遲都少于這個值,默認為1S。每一個chunk拷貝完成后,OSC都會去show salve status通過Seconds_Behind_Master來確定所有的復制情況,任何相關的slave的復制延遲高于該值時,OSC就會停止數據拷貝–check-interval參數所指定的時間,然后重新發起檢查,直到延遲降低到該值以下。
charset:
max-load:默認threads_running = 25, 每個chunk(chunk是啥)拷貝完,會檢查show global status,檢查指標是否超過了指定tr線程數的閥值,如果超過,數據拷貝暫停。
critical-load:默認threads_running = 50,每個chunk(chunk是啥)拷貝完,會檢查show global status,檢查指標是否超過了指定tr線程數的閥值,如果超過 終止pt進程
chunk-time:默認是0.5秒,工具會根據當前系統運行繁忙程度計算出在該指定時間內可以處理的數據行數(即chunks),(相比較chunk-size靈活)
chunk-size:指定chunk的大小
charset: 指定連接的字符集,遠程操作記得加上,否則可能出現亂碼 ,--charset=utf8 或 D=db1,t=t1,A=utf8
ps:
threads_running代表非sleeping狀態的線程數量。
threads_running增長的原因:
1 客戶端連接暴增
2 系統性能瓶頸,cpu io 內存 swap
3 異常sql
感謝你能夠認真閱讀完這篇文章,希望小編分享的“mysql中pt-online-schema-change怎么用”這篇文章對大家有幫助,同時也希望大家多多支持創新互聯,關注創新互聯行業資訊頻道,更多相關知識等著你來學習!
網頁名稱:mysql中pt-online-schema-change怎么用
URL網址:http://vcdvsql.cn/article18/iighgp.html
成都網站建設公司_創新互聯,為您提供營銷型網站建設、手機網站建設、云服務器、網站收錄、域名注冊、品牌網站設計
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯