1. 程式人生 > >pt-online-schema-change 在線更改MySQL表結構

pt-online-schema-change 在線更改MySQL表結構

order 結構 拷貝數據 -h add def mysql表 o-c 設置

總所周知,數據庫最昂貴的操作莫過於DDL操作,因為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表結構