功能介紹: 數據庫
功能爲在alter操做更改表結構的時候不用鎖定表,也就是說執行alter的時候不會阻塞寫和讀取操做,注意執行這個工具的時候必須作好備份,操做以前最好詳細讀一下官方文檔。 網絡
工做原理是建立一個和你要執行alter操做的表同樣的空表結構,執行表結構修改,而後從原表中copy原始數據到表結構修改後的表,當數據copy完成之後就會將原表移走,用新表代替原表,默認動做是將原表drop掉。在copy數據的過程當中,任何在原表的更新操做都會更新到新表,由於這個工具在會在原表上建立觸發器,觸發器會將在原表上更新的內容更新到新表。若是表中已經定義了觸發器這個工具就不能工做了。 app
用法介紹: dom
pt-online-schema-change [OPTIONS] DSN 工具
options能夠自行查看help,DNS爲你要操做的數據庫和表。 spa
這裏有兩個參數須要介紹一下: 設計
--dry-run 這個參數不創建觸發器,不拷貝數據,也不會替換原表。只是建立和更改新表。 日誌
--execute 這個參數的做用和前面工做原理的介紹的同樣,會創建觸發器,來保證最新變動的數據會影響至新表。注意:若是不加這個參數,這個工具會在執行一些檢查後退出。這一舉措是爲了讓使用這充分了解了這個工具的原理,同時閱讀了官方文檔。 文檔
使用示例: it
在線更改表的的引擎,這個尤爲在整理innodb表的時候很是有用,示例以下:
pt-online-schema-change --user=root --password=XXxx --host=localhost --lock-wait-time=120 --alter="ENGINE=InnoDB" D=test,t=oss_pvinfo2 --execute
從下面的日誌中能夠看出它的執行過程:
Altering `test`.`oss_pvinfo2`...
Creating new table...
Created new table test._oss_pvinfo2_new OK.
Altering new table...
Altered `test`.`_oss_pvinfo2_new` OK.
Creating triggers...
Created triggers OK.
Copying approximately 995696 rows...
Copied rows OK.
Swapping tables...
Swapped original and new tables OK.
Dropping old table...
Dropped old table `test`.`_oss_pvinfo2_old` OK.
Dropping triggers...
Dropped triggers OK.
Successfully altered `test`.`oss_pvinfo2`.
在來一個範例,大表添加字段的,語句以下:
pt-online-schema-change --user=root --password=XXX --host=localhost --lock-wait-time=120 --alter="ADD COLUMN domain_id INT" D=test,t=oss_pvinfo2 --execute