MySQL修改大表工具pt-online-schema-change原理
MySQL修改大表工具pt-online-schema-change的使用限制:
1)、如果修改表有外來鍵,除非使用 --alter-foreign-keys-method 指定特定的值,否則工具不予執行
2)、被修改表必須要有主鍵,否則報錯:Cannot chunk the original table `houyi`.`ga`: There is no good index and the table is oversized. at ./pt-online-schema-change line 5353.
3)、被修改表上不能有針對after delete|insert|update三個觸發器,否則修改表結構操作失敗
MySQL修改大表工具pt-online-schema-change原理:
1)、首先使用帳號密碼連線到mysql後,獲取指定表的狀態資訊,檢查是否有觸發器,檢查表是否有主鍵。
2)、接著按照修改表的表定義,新建一個名為'_tb_new'不可見的臨時表,對這個表執行alter新增欄位,並校驗是否執行成功。
3)、然後針對源表建立三個觸發器,分別如下:
create trigger db_tb_del after delete on db.tb for each row delete ignore from db._tb_new where db._tb_new.id <=> OLD.id #刪掉新表中db._tb_new.id <=> OLD.id的資料,否則忽略操作
create trigger db_tb_del after update on db.tb for each row replace into db._tb_new(id,...) values(new.id,...) #源表執行update的時候,把對應的資料replace into的方式寫入新表
create trigger db_tb_del after insert on db.tb for each row replace into db._tb_new(id,...) values(new.id,...) #源表執行insert操作的時候,把對應的資料replace into的方式寫入新表
4)、觸發器建立好之後會執行insert low_priority ignore into db._tb_new(id,..) select id,... from tb lock in share mode語句複製源表資料到新表。
5)、複製完成之後執行語句:rename table db.tb to db._tb_old,db._tb_new to db.tb同時把源表修改為_tb_old格式,把新表_tb_new修改為源表名字的原子修改。
6)、接著,如果沒有加不刪除old表的選項,那麼就會刪除Old表,然後刪除三個觸發器。到這裡就完成了線上表結構的修改 。整個過程只在rename表的時間會鎖一下表,其他時候不鎖表。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22996654/viewspace-2661328/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL 5.6使用pt-online-schema-change線上修改大表欄位長度MySql
- MySQL:pt-online-schema-change原理及注意點(未完)MySql
- 一個 MySQL 線上 DDL 工具 — pt-online-schema-changeMySql
- pt-osc(pt-online-schema-change)工具實現原理剖析
- MySQL online ddl 工具之pt-online-schema-changeMySql
- 【MySQL】online ddl 工具之pt-online-schema-changeMySql
- MySQL 5.7使用pt-online-schema-change對大表加索引MySql索引
- MySQL 5.7使用pt-online-schema-change對大表加欄位MySql
- MySQL 執行原理【表】MySql
- pt-online-schema-change 工具使用薦
- 記錄一次mysql批量修改大量資料MySql
- MySQL修復表的簡單分析MySql
- pt-online-schema-change的操作原理簡單介紹
- MySQL 分割槽表原理及使用詳解MySql
- MySQL-不要用SQLyog工具導表MySql
- 官方工具|MySQL Router 高可用原理與實戰MySql
- MySQL資料庫表損壞後的修復方法MySql資料庫
- MySQL ONLINE DDL 和PT-ONLINE-SCHEMA-CHANGE對比MySql
- mysql進修MySql
- mysql表結構同步工具SchemaSync使用初探MySql
- MYSQL資料表損壞的原因分析和修復方法MySql
- 批次修改大量影片幀速率的教程
- Excel新增按鈕快速更改大小寫Excel
- 【MySQL】表索引損壞致Crash及修復過程一則MySql索引
- Android熱修復原理Android
- MySQL分割槽表的分割槽原理和優缺點MySql
- 【MySQL】單表支援並行匯出的工具--mydumperMySql並行
- Hbase修復工具Hbck
- 磁碟修復工具TestDisk
- MySQL資料庫INNODB表損壞修復處理過程分享MySql資料庫
- MySQL派生表合併最佳化的原理和實現MySql
- MySQL主從修復MySql
- MySQL truncate原理MySql
- MySQL索引原理MySql索引
- 修復工具DBVERIFY的使用
- 抓包工具原理
- Android熱修復原理(一)熱修復框架對比和程式碼修復Android框架
- 【MySQL】Mydumper工作原理MySql