溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

mysql中pt-online-schema-change怎么用

發(fā)布時間:2021-11-02 17:30:13 來源:億速云 閱讀:149 作者:小新 欄目:MySQL數(shù)據(jù)庫

這篇文章主要介紹了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è)資訊頻道,更多相關知識等著你來學習!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。

AI