pt-online-schema-change使用

公司一個業務的DB表結構由於需求不斷變更,表結構隨着需求的變更不斷須要修改,更改字段類型,增長字段。
最苦逼的是其中兩個主表都特別大,一個5000W以上,另一個更恐怖達到1億多。之前都是採用分區,後面
考慮到分區字段沒有實際意義,致使分區的優點沒有體現出來,只是起了個內心做用而已,也不知道當時這個設計
是從哪裏出發的,今年將分區所有去掉了。
切入主題:
這兩個大表要加字段,又不能停機,業務發佈時間緊迫。當時的構想是用standby來先操做,而後和master作切換。
而後再更改master。再切回master.這樣來回折騰。可是這種方式是比較快的,同時咱們也採用pt-online-schema-change來作
在線更改表結構。可是這樣操做速度不夠快,比直接更改慢了不少,直接更改5個小時。pt-online-schema-change須要15個小時。
固然時間增長了,可是對業務沒有影響,仍是值得推薦的,當麼有standby的話,使用pt-online-schema-change仍是不錯的。
咱們在作小表結構更改,就用的pt-online-schema-change。
簡單說下用法:本身使用是在公司業務上,涉及到具體表,不方便透露:
下面來源網絡:

 功能介紹: 數據庫

  功能爲在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

相關文章
相關標籤/搜索