pt-online-schema-change 在線更改MySQL表結構
Percona開發了一系列工具Percona Toolkit包,其中有一工具pt-online-schema-change可以在線執行DDL操作,不會阻塞讀寫操作從而影響業務程序。當然啦,MySQL 5.6也增強了一些在線DDL功能。下面主要是說pt-online-schema-change在線更改表結構。
pt-online-schema-change原理
1、如果存在外鍵,根據alter-foreign-keys-method參數的值,檢測外鍵相關的表,做相應設置的處理。
2、創建一個新的表,表結構為修改後的數據表,用於從源數據表向新表中導入數據。
3、創建觸發器,用於記錄從拷貝數據開始之後,對源數據表繼續進行數據修改的操作記錄下來,用於數據拷貝結束後,執行這些操作,保證數據不會丟失。
4、拷貝數據,從源數據表中拷貝數據到新表中。
5、修改外鍵相關的子表,根據修改後的數據,修改外鍵關聯的子表。
6、rename源數據表為old表,把新表rename為源表名,並將old表刪除。
7、刪除觸發器。
官網下載最新版的rpm包,然後yum本地安裝,自動解決依賴等問題,最好這樣安裝。
wget https://www.percona.com/downloads/percona-toolkit/3.0.4/binary/redhat/7/x86_64/percona-toolkit-3.0.4-1.el7.x86_64.rpm yum install percona-toolkit-3.0.4-1.el7.x86_64.rpm
執行,比如給BorrowOrders表增加一個字段
time pt-online-schema-change --host=10.153.1.200 --port=3306 --user=prod --password="yourpasswd" --alter="ADD COLUMN internalCode VARCHAR(32) DEFAULT ‘0‘" --execute D=trade,t=BorrowOrders --set-vars innodb_lock_wait_timeout=50 --no-check-replication-filters --recursion-method=none
pt-online-schema-change 在線更改MySQL表結構