pt-online-schema-change使用


MySQL ddl 的問題現狀

運維mysql數據庫時,我們總會對數據表進行ddl 變更,修改添加字段或者索引,對於mysql 而已,ddl 顯然是一個令所有MySQL dba 詬病的一個功能,因為在MySQL中在對表進行ddl時,會鎖表,當表比較小比如小於1w上時,對前端影響較小,當時遇到千萬級別的表 就會影響前端應用對表的寫操作。

 

工作原理:

1、如果存在外鍵,根據alter-foreign-keys-method參數的值,檢測外鍵相關的表,做相應設置的處理。沒有使用 --alter-foreign-keys-method=rebuild_constraints 指定特定的值,該工具不予執行
2、創建一個和源表表結構一樣的臨時表(_tablename_new),執行alter修改臨時表表結構。
3、在原表上創建3個於inser delete update對應的觸發器. (用於copy 數據的過程中,在原表的更新操作 更新到新表.

4、從原表拷貝數據到臨時表,拷貝過程中在原表進行的寫操作都會更新到新建的臨時表
5、修改外鍵相關的子表,根據修改后的數據,修改外鍵關聯的子表。
6rename源數據表為old表,把新表rename為源表名,並將old表刪除。
7、刪除觸發器。

 

執行條件:

1.操作的表必須有主鍵或則唯一索引,否則報如下錯誤。

Cannot chunk the original table `test`.`t_driver_allowance_test`: There is no good index and the table is oversized. at /usr/local/bin/pt-online-schema-change line 5486.

2 . 該表不能定義觸發器,否則報如下錯誤。

The table `taotao`.`tttt` has triggers.  This tool needs to create its own triggers, so the table cannot already have triggers.

 

用法介紹:

pt-online-schema-change --help  查看參數選項

這里有幾個參數需要介紹一下:

--dry-run  這個參數不建立觸發器,不拷貝數據,也不會替換原表。只是創建和更改新表。

--execute  這個參數的作用和前面工作原理的介紹的一樣,會建立觸發器,來保證最新變更的數據會影響至新表。注意:如果不加這個參數,這個工具會在執行一些檢查后退出。

--critical-load  每次chunk操作前后,會根據show global status統計指定的狀態量的變化,默認是統計Thread_running。目的是為了安全,防止原始表上的觸發器引起負載過高。這也是為了防止在線DDL對線上的影響。超過設置的閥值,就會終止操作,在線DDL就會中斷。提示的異常如上報錯信息。

--max-load 選項定義一個閥值,在每次chunk操作后,查看show global status狀態值是否高於指定的閥值。該參數接受一個mysql status狀態變量以及一個閥值,如果沒有給定閥值,則定義一個閥值為為高於當前值的20%。注意這個參數不會像--critical-load終止操作,而只是暫停操作。當status值低於閥值時,則繼續往下操作。是暫停還是終止操作這是--max-load和--critical-load的差別。

--charset=utf8連接到MySQL后運行SET NAMES UTF8

--check-replication-filters 檢查復制中是否設置了過濾條件,如果設置了,程序將退出

--nocheck-replication-filters 檢查復制中是否設置了過濾條件

--set-vars 設置mysql的變量值

--check-slave-lag 檢查主從延遲

 

例子:

  1. 添加字段

pt-online-schema-change -u root  -p 123456  --alter='add column vid int ' --execute D=taotao,t=tttt --max-load=Threads_connected:650 --critical-load=Threads_running=550 --charset=utf8  --nocheck-replication-filters --set-vars innodb_lock_wait_timeout=30000

  1. 刪除字段

pt-online-schema-change -u root  -p 123456  --alter='drop column vid  '  --execute D=taotao,t=tttt --max-load=Threads_connected:650 --critical-load=Threads_running=550 --charset=utf8  --nocheck-replication-filters --set-vars innodb_lock_wait_timeout=30000

  1. 修改字段

pt-online-schema-change -u root  -p 123456  --alter='modify  column sid bigint(25) '  --execute D=taotao,t=tttt --max-load=Threads_connected:650 --critical-load=Threads_running=550 --charset=utf8  --nocheck-replication-filters --set-vars innodb_lock_wait_timeout=30000

  1. 添加索引

pt-online-schema-change -u root  -p 123456  --alter=' add key indx_sid(sid) '  --execute D=taotao,t=tttt --max-load=Threads_connected:650 --critical-load=Threads_running=550 --charset=utf8  --nocheck-replication-filters --set-vars innodb_lock_wait_timeout=30000

  1. 刪除索引

pt-online-schema-change -u root  -p 123456  --alter=' drop  key indx_sid '  --execute D=taotao,t=tttt --max-load=Threads_connected:650 --critical-load=Threads_running=550 --charset=utf8  --nocheck-replication-filters --set-vars innodb_lock_wait_timeout=30000

 

 

pt-online-schema-change --user=dba_user --password=msds007 -S /app/mysqldata/3306/mysql.sock  --charset=utf8 --no-check-replication-filters --alter "modify HomeworkID bigint(20) AUTO_INCREMENT" --no-drop-old-table D=test,t=wx_edu_homework --alter-foreign-keys-method=rebuild_constraints --print --execute

 

考慮從庫延遲情況 ,意味這要注意這幾個選項的設置

  • --max-lag
  • --check-interval
  • --recursion-method
  • --check-slave-lag

 

pt-online-schema-change --user=dba_user --password=msds007 -S /app/mysqldata/3306/mysql.sock  --charset=utf8 --no-check-replication-filters --alter "modify HomeworkID bigint(20) AUTO_INCREMENT" --no-drop-old-table D=test,t=wx_edu_homework --alter-foreign-keys-method=rebuild_constraints --print --execute --max-lag=1s --check-interval=10s --check-slave-lag=h=192.168.1.121,u=root,p=msds007,P=3306

 

pt-online-schema-change --user=dba_user --password=msds007 -S /app/mysqldata/3306/mysql.sock  --charset=utf8 --no-check-replication-filters --alter "modify HomeworkID bigint(20) AUTO_INCREMENT" --no-drop-old-table D=test,t=wx_edu_homework --alter-foreign-keys-method=rebuild_constraints --print --execute --max-lag=1s --check-interval=10s --recursion-method=processlist

 

流程:

1.判斷各種參數

2.根據原表"t",創建一個名稱為"_t_new"的新表

3.執行ALTER TABLE語句修改新表"_t_new"

4.創建3個觸發器,名稱格式為pt_osc_庫名_表名_操作類型,比如

CREATE TRIGGER `pt_osc_dba_t_del` AFTER DELETE ON `dba`.`t` FOR EACH ROW DELETE IGNORE FROM `dba`.`_t_new` WHERE `dba`.`_t_new`.`id` <=> OLD.`id`

CREATE TRIGGER `pt_osc_dba_t_upd` AFTER UPDATE ON `dba`.`t` FOR EACH ROW REPLACE INTO `dba`.`_t_new` (`id`, `a`, `b`, `c1`) VALUES (NEW.`id`, NEW.`a`, NEW.`b`, NEW.`c1`)

CREATE TRIGGER `pt_osc_dba_t_ins` AFTER INSERT ON `dba`.`t` FOR EACH ROW REPLACE INTO `dba`.`_t_new` (`id`, `a`, `b`, `c1`) VALUES (NEW.`id`, NEW.`a`, NEW.`b`, NEW.`c1`)

5.開始復制數據,比如

INSERT LOW_PRIORITY IGNORE INTO `dba`.`_t_new` (`id`, `a`, `b`, `c1`) SELECT `id`, `a`, `b`, `c1` FROM `dba`.`t` LOCK IN SHARE MODE /*pt-online-schema-change 28014 copy table*/

注意:對原表加共享鎖,會阻塞所有排他鎖

6.復制完成后,交互原表和新表,執行RENAME命令,如 RENAME TABLE t to _t_old, _t_new to t;

7.刪除老表,_t_old

8.刪除觸發器

9.修改完成

 

注意:如果異常終止程序,觸發器不會自動刪除,如果要刪除新表,那么要先刪除觸發器,否則向老表插入數據會因為找不到新表而報錯

 

 

注意事項:

  1. pt-online-schema-change 在線DDL工具,雖然說不會鎖表,但是對性能還是有一定的影響,執行過程中對全表做一次select。這個過程會將buffer_cache中活躍數據全部交換一遍,這就導致活躍數據的請求都要從磁盤獲取,導致慢SQL增多,file_reads增大。所以對於大表應在業務低峰期執行該操作
  2. 執行 RENAME 時,你不能有任何鎖定的表或活動的事務。你同樣也必須有對原初表的 ALTER 和 DROP 權限,以及對新表的 CREATE 和 INSERT 權限。當業務量較大時,修改操作會等待沒有數據修改后,執行最后的rename操作。因此,在修改表結構時,應該盡量選擇在業務相對空閑時,至少修改表上的數據操作較低時,執行較為妥當。如果在多表更名中,MySQL 遭遇到任何錯誤,它將對所有被更名的表進行倒退更名,將每件事物退回到最初狀態。
  3. 對表的慢查詢操作,慢查詢還未結束執行osc操作,會報錯,超時錯誤,在創建觸發器的時候退出。
  4. 對於主從復制架構。 考慮到主從的一致性,應該在主庫上執行pt-online-schema-change操作。

ps:如果在誤在從庫上執行了pt-online-schema-change操作,未執行完成不要取消,等到執行完成了,在修改成原來的狀態。

如果在誤在從庫上執行了pt-online-schema-change操作,未執行完成取消的話,刪除有 pt-online-schema-change在從庫上創建的臨時表和觸發器即可。

####################################################################

在原表上建立三個觸發器,如下:
1)CREATETRIGGER mk_osc_del AFTER DELETE ON $table ” “FOR EACH ROW ”
“DELETE IGNORE FROM $new_table “”WHERE$new_table.$chunk_column = OLD.$chunk_column”;
2)CREATETRIGGER mk_osc_ins AFTER INSERT ON $table ” “FOR EACH ROW ”
“REPLACEINTO $new_table ($columns) ” “VALUES($new_values)”;
3)CREATETRIGGER mk_osc_upd AFTER UPDATE ON $table ” “FOR EACH ROW ”
“REPLACE INTO $new_table ($columns) “”VALUES ($new_values)”;

我們可以看到這三個觸發器分別對應於INSERT、UPDATE、DELETE三種操作:
1)mk_osc_del,DELETE操作,我們注意到DELETEIGNORE,當新有數據時,我們才進行操作,也就是說,當在后續導入過程中,如果刪除的這個數據還未導入到新表,那么我們可以不在新表執行操作,因為在以后的導入過程中,原表中改行數據已經被刪除,已經沒有數據,那么他也就不會導入到新表中;
2)mk_osc_ins,INSERT操作,所有的INSERT INTO全部轉換為REPLACEINTO,為了確保數據的一致性,當有新數據插入到原表時,如果觸發器還未把原表數據未同步到新表,這條數據已經被導入到新表了,那么我們就可以利用replaceinto進行覆蓋,這樣數據也是一致的
3)mk_osc_upd UPDATE操作,所有的UPDATE也轉換為REPLACEINTO,因為當跟新的數據的行還未同步到新表時,新表是不存在這條記錄的,那么我們就只能插入該條數據,如果已經同步到新表了,那么也可以進行覆蓋插入,所有數據與原表也是一致的;
我們也能看出上述的精髓也就這這幾條replaceinto操作,正是因為這幾條replaceinto才能保證數據的一致性
4、拷貝原表數據到臨時表中,在腳本中使用如下語句
INSERT IGNORE INTO $to_table ($columns) ” “SELECT $columns FROM $from_table “”WHERE ($chunks->[$chunkno])”,我們能看到他是通過一些查詢(基本為主鍵、唯一鍵值)分批把數據導入到新的表中,在導入前,我們能通過參數–chunk-size對每次導入行數進行控制,已減少對原表的鎖定時間,並且在導入時,我們能通過—sleep參數控制,在每個chunk導入后與下一次chunk導入開始前sleep一會,sleep時間越長,對於磁盤IO的沖擊就越小
5、Rename 原表到old表中,在把臨時表Rename為原表,
“RENAME TABLE `$db`.`$tmp_tbl`TO `$db`.`$tbl`”; 在rename過程,其實我們還是會導致寫入讀取堵塞的,所以從嚴格意思上說,我們的OSC也不是對線上環境沒有一點影響,但由於rename操作只是一個修改名字的過程,也只會修改一些表的信息,基本是瞬間結束,故對線上影響不太大
6、清理以上過程中的不再使用的數據,如OLD表。

 

 

 

pt-online-schema-change --user=bluewhale --password=bluewhale001 -S /tmp/mysqld.3313_sslog.sock --charset=utf8 --no-check-replication-filters --alter "modify id bigint(20) AUTO_INCREMENT" --no-drop-old-table D=susuan,t=edu_user_vip_log --alter-foreign-keys-method=rebuild_constraints --print --execute --max-lag=1s --check-interval=10s

 

[root@zsyx-wlzj-dbbakrescs8 ~]# pt-online-schema-change --user=bluewhale --password=bluewhale001 -S /tmp/mysqld.3313_sslog.sock --charset=utf8 --no-check-replicatiINCREMENT" --no-drop-old-table D=susuan,t=edu_user_vip_log --alter-foreign-keys-method=rebuild_constraints --print --execute --max-lag=1s --check-interval=10s

No slaves found.  See --recursion-method if host zsyx-wlzj-dbbakrescs8 has slaves.

Not checking slave lag because no slaves were found and --check-slave-lag was not specified.

 

# A software update is available:

#   * The current version for Percona::Toolkit is 3.0.5

 

Operation, tries, wait:

  copy_rows, 10, 0.25

  create_triggers, 10, 1

  drop_triggers, 10, 1

  swap_tables, 10, 1

  update_foreign_keys, 10, 1

No foreign keys reference `susuan`.`edu_user_vip_log`; ignoring --alter-foreign-keys-method.

Altering `susuan`.`edu_user_vip_log`...

Creating new table...

CREATE TABLE `susuan`.`_edu_user_vip_log_new` (

  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,

  `vip_id` int(10) unsigned DEFAULT '0',

  `user_id` int(10) unsigned DEFAULT '0',

  `create_time` datetime DEFAULT '1970-01-01 00:00:00',

  `duration` int(11) DEFAULT '0',

  `type` tinyint(4) DEFAULT '1',

  `description` varchar(255) DEFAULT '',

  `open_id` varchar(50) DEFAULT NULL COMMENT '微信openid',

  PRIMARY KEY (`id`),

  KEY `user_id_key` (`user_id`),

  KEY `create_time_key` (`create_time`),

  KEY `vip_log_index_open_id` (`open_id`) USING BTREE

) ENGINE=InnoDB AUTO_INCREMENT=11719633 DEFAULT CHARSET=utf8

Created new table susuan._edu_user_vip_log_new OK.

Altering new table...

ALTER TABLE `susuan`.`_edu_user_vip_log_new` modify id bigint(20) AUTO_INCREMENT

Altered `susuan`.`_edu_user_vip_log_new` OK.

2018-09-17T20:16:02 Creating triggers...

CREATE TRIGGER `pt_osc_susuan_edu_user_vip_log_del` AFTER DELETE ON `susuan`.`edu_user_vip_log` FOR EACH ROW DELETE IGNORE FROM `susuan`.`_edu_user_vip_log_new` WHERE `susuan`.`_edu_user_vip_log_new`.`id` <=> OLD.`id`

CREATE TRIGGER `pt_osc_susuan_edu_user_vip_log_upd` AFTER UPDATE ON `susuan`.`edu_user_vip_log` FOR EACH ROW REPLACE INTO `susuan`.`_edu_user_vip_log_new` (`id`, `vip_id`, `user_id`, `create_time`, `duration`, `type`, `description`, `open_id`) VALUES (NEW.`id`, NEW.`vip_id`, NEW.`user_id`, NEW.`create_time`, NEW.`duration`, NEW.`type`, NEW.`description`, NEW.`open_id`)

CREATE TRIGGER `pt_osc_susuan_edu_user_vip_log_ins` AFTER INSERT ON `susuan`.`edu_user_vip_log` FOR EACH ROW REPLACE INTO `susuan`.`_edu_user_vip_log_new` (`id`, `vip_id`, `user_id`, `create_time`, `duration`, `type`, `description`, `open_id`) VALUES (NEW.`id`, NEW.`vip_id`, NEW.`user_id`, NEW.`create_time`, NEW.`duration`, NEW.`type`, NEW.`description`, NEW.`open_id`)

2018-09-17T20:16:02 Created triggers OK.

2018-09-17T20:16:02 Copying approximately 7125398 rows...

INSERT LOW_PRIORITY IGNORE INTO `susuan`.`_edu_user_vip_log_new` (`id`, `vip_id`, `user_id`, `create_time`, `duration`, `type`, `description`, `open_id`) SELECT `id`, `vip_id`, `user_id`, `create_time`, `duration`, `type`, `description`, `open_id` FROM `susuan`.`edu_user_vip_log` FORCE INDEX(`PRIMARY`) WHERE ((`id` >= ?)) AND ((`id` <= ?)) LOCK IN SHARE MODE /*pt-online-schema-change 10551 copy nibble*/

SELECT /*!40001 SQL_NO_CACHE */ `id` FROM `susuan`.`edu_user_vip_log` FORCE INDEX(`PRIMARY`) WHERE ((`id` >= ?)) ORDER BY `id` LIMIT ?, 2 /*next chunk boundary*/

Copying `susuan`.`edu_user_vip_log`:  30% 01:08 remain

Copying `susuan`.`edu_user_vip_log`:  58% 00:43 remain

Copying `susuan`.`edu_user_vip_log`:  78% 00:24 remain

2018-09-17T20:19:01 Copied rows OK.

2018-09-17T20:19:01 Swapping tables...

RENAME TABLE `susuan`.`edu_user_vip_log` TO `susuan`.`_edu_user_vip_log_old`, `susuan`.`_edu_user_vip_log_new` TO `susuan`.`edu_user_vip_log`

2018-09-17T20:19:01 Swapped original and new tables OK.

Not dropping old table because --no-drop-old-table was specified.

2018-09-17T20:19:01 Dropping triggers...

DROP TRIGGER IF EXISTS `susuan`.`pt_osc_susuan_edu_user_vip_log_del`;

DROP TRIGGER IF EXISTS `susuan`.`pt_osc_susuan_edu_user_vip_log_upd`;

DROP TRIGGER IF EXISTS `susuan`.`pt_osc_susuan_edu_user_vip_log_ins`;

2018-09-17T20:19:01 Dropped triggers OK.

Successfully altered `susuan`.`edu_user_vip_log`.

 

[root@zsyx-wlzj-dbbakrescs8 ~]# cat /data/mysql_3313_sslog/data/zsyx-wlzj-dbbakrescs8.log

/usr/local/mysql/bin/mysqld, Version: 5.6.25-log (Source distribution). started with:

Tcp port: 3313  Unix socket: /tmp/mysqld.3313_sslog.sock

Time                 Id Command    Argument

180917 20:15:59    11 Connect bluewhale@localhost on susuan

   11 Query SELECT @@SQL_MODE

   11 Query /*!40101 SET NAMES "utf8"*/

   11 Query SHOW VARIABLES LIKE 'innodb\_lock_wait_timeout'

   11 Query SET SESSION innodb_lock_wait_timeout=1

   11 Query SHOW VARIABLES LIKE 'lock\_wait_timeout'

   11 Query SET SESSION lock_wait_timeout=60

   11 Query SHOW VARIABLES LIKE 'wait\_timeout'

   11 Query SET SESSION wait_timeout=10000

   11 Query SET @@SQL_QUOTE_SHOW_CREATE = 1/*!40101, @@SQL_MODE='NO_AUTO_VALUE_ON_ZERO,NO_ENGINE_SUBSTITUTION'*/

   11 Query SELECT @@server_id /*!50038 , @@hostname*/

   12 Connect bluewhale@localhost on susuan

   12 Query SELECT @@SQL_MODE

   12 Query /*!40101 SET NAMES "utf8"*/

   12 Query SHOW VARIABLES LIKE 'innodb\_lock_wait_timeout'

   12 Query SET SESSION innodb_lock_wait_timeout=1

   12 Query SHOW VARIABLES LIKE 'lock\_wait_timeout'

   12 Query SET SESSION lock_wait_timeout=60

   12 Query SHOW VARIABLES LIKE 'wait\_timeout'

   12 Query SET SESSION wait_timeout=10000

   12 Query SET @@SQL_QUOTE_SHOW_CREATE = 1/*!40101, @@SQL_MODE='NO_AUTO_VALUE_ON_ZERO,NO_ENGINE_SUBSTITUTION'*/

   12 Query SELECT @@server_id /*!50038 , @@hostname*/

   11 Query SHOW VARIABLES LIKE 'wsrep_on'

   11 Query SHOW VARIABLES LIKE 'version%'

   11 Query SHOW ENGINES

   11 Query SHOW VARIABLES LIKE 'innodb_version'

   11 Query SELECT @@SERVER_ID

   11 Query SHOW GRANTS FOR CURRENT_USER()

   11 Query SHOW PROCESSLIST

   11 Query SHOW SLAVE HOSTS

   11 Query SHOW GLOBAL STATUS LIKE 'Threads_running'

   11 Query SHOW GLOBAL STATUS LIKE 'Threads_running'

   11 Query SELECT CONCAT(@@hostname, @@port)

180917 20:16:00    11 Query SHOW VARIABLES

180917 20:16:02    11 Query SHOW TABLES FROM `susuan` LIKE 'edu\_user\_vip\_log'

   11 Query SHOW TRIGGERS FROM `susuan` LIKE 'edu\_user\_vip\_log'

   11 Query /*!40101 SET @OLD_SQL_MODE := @@SQL_MODE, @@SQL_MODE := '', @OLD_QUOTE := @@SQL_QUOTE_SHOW_CREATE, @@SQL_QUOTE_SHOW_CREATE := 1 */

   11 Query USE `susuan`

   11 Query SHOW CREATE TABLE `susuan`.`edu_user_vip_log`

   11 Query /*!40101 SET @@SQL_MODE := @OLD_SQL_MODE, @@SQL_QUOTE_SHOW_CREATE := @OLD_QUOTE */

   11 Query EXPLAIN SELECT * FROM `susuan`.`edu_user_vip_log` WHERE 1=1

   11 Query SELECT table_schema, table_name FROM information_schema.key_column_usage WHERE referenced_table_schema='susuan' AND referenced_table_name='edu_user_vip_log'

   11 Query SHOW VARIABLES LIKE 'wsrep_on'

   11 Query /*!40101 SET @OLD_SQL_MODE := @@SQL_MODE, @@SQL_MODE := '', @OLD_QUOTE := @@SQL_QUOTE_SHOW_CREATE, @@SQL_QUOTE_SHOW_CREATE := 1 */

   11 Query USE `susuan`

   11 Query SHOW CREATE TABLE `susuan`.`edu_user_vip_log`

   11 Query /*!40101 SET @@SQL_MODE := @OLD_SQL_MODE, @@SQL_QUOTE_SHOW_CREATE := @OLD_QUOTE */

   11 Query CREATE TABLE `susuan`.`_edu_user_vip_log_new` (

  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,

  `vip_id` int(10) unsigned DEFAULT '0',

  `user_id` int(10) unsigned DEFAULT '0',

  `create_time` datetime DEFAULT '1970-01-01 00:00:00',

  `duration` int(11) DEFAULT '0',

  `type` tinyint(4) DEFAULT '1',

  `description` varchar(255) DEFAULT '',

  `open_id` varchar(50) DEFAULT NULL COMMENT '微信openid',

  PRIMARY KEY (`id`),

  KEY `user_id_key` (`user_id`),

  KEY `create_time_key` (`create_time`),

  KEY `vip_log_index_open_id` (`open_id`) USING BTREE

) ENGINE=InnoDB AUTO_INCREMENT=11719633 DEFAULT CHARSET=utf8

   11 Query ALTER TABLE `susuan`.`_edu_user_vip_log_new` modify id bigint(20) AUTO_INCREMENT

   11 Query /*!40101 SET @OLD_SQL_MODE := @@SQL_MODE, @@SQL_MODE := '', @OLD_QUOTE := @@SQL_QUOTE_SHOW_CREATE, @@SQL_QUOTE_SHOW_CREATE := 1 */

   11 Query USE `susuan`

   11 Query SHOW CREATE TABLE `susuan`.`_edu_user_vip_log_new`

   11 Query /*!40101 SET @@SQL_MODE := @OLD_SQL_MODE, @@SQL_QUOTE_SHOW_CREATE := @OLD_QUOTE */

   11 Query CREATE TRIGGER `pt_osc_susuan_edu_user_vip_log_del` AFTER DELETE ON `susuan`.`edu_user_vip_log` FOR EACH ROW DELETE IGNORE FROM `susuan`.`_edu_user_vip_log_new` WHERE `susuan`.`_edu_user_vip_log_new`.`id` <=> OLD.`id`

   11 Query CREATE TRIGGER `pt_osc_susuan_edu_user_vip_log_upd` AFTER UPDATE ON `susuan`.`edu_user_vip_log` FOR EACH ROW REPLACE INTO `susuan`.`_edu_user_vip_log_new` (`id`, `vip_id`, `user_id`, `create_time`, `duration`, `type`, `description`, `open_id`) VALUES (NEW.`id`, NEW.`vip_id`, NEW.`user_id`, NEW.`create_time`, NEW.`duration`, NEW.`type`, NEW.`description`, NEW.`open_id`)

   11 Query CREATE TRIGGER `pt_osc_susuan_edu_user_vip_log_ins` AFTER INSERT ON `susuan`.`edu_user_vip_log` FOR EACH ROW REPLACE INTO `susuan`.`_edu_user_vip_log_new` (`id`, `vip_id`, `user_id`, `create_time`, `duration`, `type`, `description`, `open_id`) VALUES (NEW.`id`, NEW.`vip_id`, NEW.`user_id`, NEW.`create_time`, NEW.`duration`, NEW.`type`, NEW.`description`, NEW.`open_id`)

   11 Query EXPLAIN SELECT * FROM `susuan`.`edu_user_vip_log` WHERE 1=1

   11 Query SELECT /*!40001 SQL_NO_CACHE */ `id` FROM `susuan`.`edu_user_vip_log` FORCE INDEX(`PRIMARY`) ORDER BY `id` LIMIT 1 /*first lower boundary*/

   11 Query SELECT /*!40001 SQL_NO_CACHE */ `id` FROM `susuan`.`edu_user_vip_log` FORCE INDEX (`PRIMARY`) WHERE `id` IS NOT NULL ORDER BY `id` LIMIT 1 /*key_len*/

   11 Query EXPLAIN SELECT /*!40001 SQL_NO_CACHE */ * FROM `susuan`.`edu_user_vip_log` FORCE INDEX (`PRIMARY`) WHERE `id` >= '1' /*key_len*/

   11 Query EXPLAIN SELECT /*!40001 SQL_NO_CACHE */ `id` FROM `susuan`.`edu_user_vip_log` FORCE INDEX(`PRIMARY`) WHERE ((`id` >= '1')) ORDER BY `id` LIMIT 999, 2 /*next chunk boundary*/

   11 Query SELECT /*!40001 SQL_NO_CACHE */ `id` FROM `susuan`.`edu_user_vip_log` FORCE INDEX(`PRIMARY`) WHERE ((`id` >= '1')) ORDER BY `id` LIMIT 999, 2 /*next chunk boundary*/

   11 Query EXPLAIN SELECT `id`, `vip_id`, `user_id`, `create_time`, `duration`, `type`, `description`, `open_id` FROM `susuan`.`edu_user_vip_log` FORCE INDEX(`PRIMARY`) WHERE ((`id` >= '1')) AND ((`id` <= '1028')) LOCK IN SHARE MODE /*explain pt-online-schema-change 10551 copy nibble*/

   11 Query INSERT LOW_PRIORITY IGNORE INTO `susuan`.`_edu_user_vip_log_new` (`id`, `vip_id`, `user_id`, `create_time`, `duration`, `type`, `description`, `open_id`) SELECT `id`, `vip_id`, `user_id`, `create_time`, `duration`, `type`, `description`, `open_id` FROM `susuan`.`edu_user_vip_log` FORCE INDEX(`PRIMARY`) WHERE ((`id` >= '1')) AND ((`id` <= '1028')) LOCK IN SHARE MODE /*pt-online-schema-change 10551 copy nibble*/

   11 Query SHOW WARNINGS

   11 Query SHOW GLOBAL STATUS LIKE 'Threads_running'

   11 Query EXPLAIN SELECT /*!40001 SQL_NO_CACHE */ `id` FROM `susuan`.`edu_user_vip_log` FORCE INDEX(`PRIMARY`) WHERE ((`id` >= '1029')) ORDER BY `id` LIMIT 9256, 2 /*next chunk boundary*/

   11 Query SELECT /*!40001 SQL_NO_CACHE */ `id` FROM `susuan`.`edu_user_vip_log` FORCE INDEX(`PRIMARY`) WHERE ((`id` >= '1029')) ORDER BY `id` LIMIT 9256, 2 /*next chunk boundary*/

180917 20:16:03    11 Query EXPLAIN SELECT `id`, `vip_id`, `user_id`, `create_time`, `duration`, `type`, `description`, `open_id` FROM `susuan`.`edu_user_vip_log` FORCE INDEX(`PRIMARY`) WHERE ((`id` >= '1029')) AND ((`id` <= '10304')) LOCK IN SHARE MODE /*explain pt-online-schema-change 10551 copy nibble*/

   11 Query INSERT LOW_PRIORITY IGNORE INTO `susuan`.`_edu_user_vip_log_new` (`id`, `vip_id`, `user_id`, `create_time`, `duration`, `type`, `description`, `open_id`) SELECT `id`, `vip_id`, `user_id`, `create_time`, `duration`, `type`, `description`, `open_id` FROM `susuan`.`edu_user_vip_log` FORCE INDEX(`PRIMARY`) WHERE ((`id` >= '1029')) AND ((`id` <= '10304')) LOCK IN SHARE MODE /*pt-online-schema-change 10551 copy nibble*/

   11 Query SHOW WARNINGS

   11 Query SHOW GLOBAL STATUS LIKE 'Threads_running'

   11 Query EXPLAIN SELECT /*!40001 SQL_NO_CACHE */ `id` FROM `susuan`.`edu_user_vip_log` FORCE INDEX(`PRIMARY`) WHERE ((`id` >= '10305')) ORDER BY `id` LIMIT 27846, 2 /*next chunk boundary*/

   11 Query SELECT /*!40001 SQL_NO_CACHE */ `id` FROM `susuan`.`edu_user_vip_log` FORCE INDEX(`PRIMARY`) WHERE ((`id` >= '10305')) ORDER BY `id` LIMIT 27846, 2 /*next chunk boundary*/

   11 Query EXPLAIN SELECT `id`, `vip_id`, `user_id`, `create_time`, `duration`, `type`, `description`, `open_id` FROM `susuan`.`edu_user_vip_log` FORCE INDEX(`PRIMARY`) WHERE ((`id` >= '10305')) AND ((`id` <= '38151')) LOCK IN SHARE MODE /*explain pt-online-schema-change 10551 copy nibble*/

   11 Query INSERT LOW_PRIORITY IGNORE INTO `susuan`.`_edu_user_vip_log_new` (`id`, `vip_id`, `user_id`, `create_time`, `duration`, `type`, `description`, `open_id`) SELECT `id`, `vip_id`, `user_id`, `create_time`, `duration`, `type`, `description`, `open_id` FROM `susuan`.`edu_user_vip_log` FORCE INDEX(`PRIMARY`) WHERE ((`id` >= '10305')) AND ((`id` <= '38151')) LOCK IN SHARE MODE /*pt-online-schema-change 10551 copy nibble*/

180917 20:16:04    11 Query SHOW WARNINGS

   11 Query SHOW GLOBAL STATUS LIKE 'Threads_running'

   11 Query EXPLAIN SELECT /*!40001 SQL_NO_CACHE */ `id` FROM `susuan`.`edu_user_vip_log` FORCE INDEX(`PRIMARY`) WHERE ((`id` >= '38152')) ORDER BY `id` LIMIT 15478, 2 /*next chunk boundary*/

   11 Query SELECT /*!40001 SQL_NO_CACHE */ `id` FROM `susuan`.`edu_user_vip_log` FORCE INDEX(`PRIMARY`) WHERE ((`id` >= '38152')) ORDER BY `id` LIMIT 15478, 2 /*next chunk boundary*/

   11 Query EXPLAIN SELECT `id`, `vip_id`, `user_id`, `create_time`, `duration`, `type`, `description`, `open_id` FROM `susuan`.`edu_user_vip_log` FORCE INDEX(`PRIMARY`) WHERE ((`id` >= '38152')) AND ((`id` <= '53630')) LOCK IN SHARE MODE /*explain pt-online-schema-change 10551 copy nibble*/

   11 Query INSERT LOW_PRIORITY IGNORE INTO `susuan`.`_edu_user_vip_log_new` (`id`, `vip_id`, `user_id`, `create_time`, `duration`, `type`, `description`, `open_id`) SELECT `id`, `vip_id`, `user_id`, `create_time`, `duration`, `type`, `description`, `open_id` FROM `susuan`.`edu_user_vip_log` FORCE INDEX(`PRIMARY`) WHERE ((`id` >= '38152')) AND ((`id` <= '53630')) LOCK IN SHARE MODE /*pt-online-schema-change 10551 copy nibble*/

   11 Query SHOW WARNINGS

   11 Query SHOW GLOBAL STATUS LIKE 'Threads_running'

   11 Query EXPLAIN SELECT /*!40001 SQL_NO_CACHE */ `id` FROM `susuan`.`edu_user_vip_log` FORCE INDEX(`PRIMARY`) WHERE ((`id` >= '53631')) ORDER BY `id` LIMIT 20777, 2 /*next chunk boundary*/

   11 Query SELECT /*!40001 SQL_NO_CACHE */ `id` FROM `susuan`.`edu_user_vip_log` FORCE INDEX(`PRIMARY`) WHERE ((`id` >= '53631')) ORDER BY `id` LIMIT 20777, 2 /*next chunk boundary*/

   11 Query EXPLAIN SELECT `id`, `vip_id`, `user_id`, `create_time`, `duration`, `type`, `description`, `open_id` FROM `susuan`.`edu_user_vip_log` FORCE INDEX(`PRIMARY`) WHERE ((`id` >= '53631')) AND ((`id` <= '74408')) LOCK IN SHARE MODE /*explain pt-online-schema-change 10551 copy nibble*/

   11 Query INSERT LOW_PRIORITY IGNORE INTO `susuan`.`_edu_user_vip_log_new` (`id`, `vip_id`, `user_id`, `create_time`, `duration`, `type`, `description`, `open_id`) SELECT `id`, `vip_id`, `user_id`, `create_time`, `duration`, `type`, `description`, `open_id` FROM `susuan`.`edu_user_vip_log` FORCE INDEX(`PRIMARY`) WHERE ((`id` >= '53631')) AND ((`id` <= '74408')) LOCK IN SHARE MODE /*pt-online-schema-change 10551 copy nibble*/

   11 Query SHOW WARNINGS

   11 Query SHOW GLOBAL STATUS LIKE 'Threads_running'

   11 Query EXPLAIN SELECT /*!40001 SQL_NO_CACHE */ `id` FROM `susuan`.`edu_user_vip_log` FORCE INDEX(`PRIMARY`) WHERE ((`id` >= '74409')) ORDER BY `id` LIMIT 27015, 2 /*next chunk boundary*/

   11 Query SELECT /*!40001 SQL_NO_CACHE */ `id` FROM `susuan`.`edu_user_vip_log` FORCE INDEX(`PRIMARY`) WHERE ((`id` >= '74409')) ORDER BY `id` LIMIT 27015, 2 /*next chunk boundary*/

   11 Query EXPLAIN SELECT `id`, `vip_id`, `user_id`, `create_time`, `duration`, `type`, `description`, `open_id` FROM `susuan`.`edu_user_vip_log` FORCE INDEX(`PRIMARY`) WHERE ((`id` >= '74409')) AND ((`id` <= '101424')) LOCK IN SHARE MODE /*explain pt-online-schema-change 10551 copy nibble*/

   11 Query INSERT LOW_PRIORITY IGNORE INTO `susuan`.`_edu_user_vip_log_new` (`id`, `vip_id`, `user_id`, `create_time`, `duration`, `type`, `description`, `open_id`) SELECT `id`, `vip_id`, `user_id`, `create_time`, `duration`, `type`, `description`, `open_id` FROM `susuan`.`edu_user_vip_log` FORCE INDEX(`PRIMARY`) WHERE ((`id` >= '74409')) AND ((`id` <= '101424')) LOCK IN SHARE MODE /*pt-online-schema-change 10551 copy nibble*/

   11 Query SHOW WARNINGS

   11 Query SHOW GLOBAL STATUS LIKE 'Threads_running'

   11 Query EXPLAIN SELECT /*!40001 SQL_NO_CACHE */ `id` FROM `susuan`.`edu_user_vip_log` FORCE INDEX(`PRIMARY`) WHERE ((`id` >= '101425')) ORDER BY `id` LIMIT 32911, 2 /*next chunk boundary*/

   11 Query SELECT /*!40001 SQL_NO_CACHE */ `id` FROM `susuan`.`edu_user_vip_log` FORCE INDEX(`PRIMARY`) WHERE ((`id` >= '101425')) ORDER BY `id` LIMIT 32911, 2 /*next chunk boundary*/

   11 Query EXPLAIN SELECT `id`, `vip_id`, `user_id`, `create_time`, `duration`, `type`, `description`, `open_id` FROM `susuan`.`edu_user_vip_log` FORCE INDEX(`PRIMARY`) WHERE ((`id` >= '101425')) AND ((`id` <= '134336')) LOCK IN SHARE MODE /*explain pt-online-schema-change 10551 copy nibble*/

   11 Query INSERT LOW_PRIORITY IGNORE INTO `susuan`.`_edu_user_vip_log_new` (`id`, `vip_id`, `user_id`, `create_time`, `duration`, `type`, `description`, `open_id`) SELECT `id`, `vip_id`, `user_id`, `create_time`, `duration`, `type`, `description`, `open_id` FROM `susuan`.`edu_user_vip_log` FORCE INDEX(`PRIMARY`) WHERE ((`id` >= '101425')) AND ((`id` <= '134336')) LOCK IN SHARE MODE /*pt-online-schema-change 10551 copy nibble*/

           .................

180917 20:19:00    11 Query SHOW WARNINGS

   11 Query SHOW GLOBAL STATUS LIKE 'Threads_running'

   11 Query EXPLAIN SELECT /*!40001 SQL_NO_CACHE */ `id` FROM `susuan`.`edu_user_vip_log` FORCE INDEX(`PRIMARY`) WHERE ((`id` >= '11572375')) ORDER BY `id` LIMIT 42715, 2 /*next chunk boundary*/

   11 Query SELECT /*!40001 SQL_NO_CACHE */ `id` FROM `susuan`.`edu_user_vip_log` FORCE INDEX(`PRIMARY`) WHERE ((`id` >= '11572375')) ORDER BY `id` LIMIT 42715, 2 /*next chunk boundary*/

   11 Query EXPLAIN SELECT `id`, `vip_id`, `user_id`, `create_time`, `duration`, `type`, `description`, `open_id` FROM `susuan`.`edu_user_vip_log` FORCE INDEX(`PRIMARY`) WHERE ((`id` >= '11572375')) AND ((`id` <= '11615090')) LOCK IN SHARE MODE /*explain pt-online-schema-change 10551 copy nibble*/

   11 Query INSERT LOW_PRIORITY IGNORE INTO `susuan`.`_edu_user_vip_log_new` (`id`, `vip_id`, `user_id`, `create_time`, `duration`, `type`, `description`, `open_id`) SELECT `id`, `vip_id`, `user_id`, `create_time`, `duration`, `type`, `description`, `open_id` FROM `susuan`.`edu_user_vip_log` FORCE INDEX(`PRIMARY`) WHERE ((`id` >= '11572375')) AND ((`id` <= '11615090')) LOCK IN SHARE MODE /*pt-online-schema-change 10551 copy nibble*/

   11 Query SHOW WARNINGS

   11 Query SHOW GLOBAL STATUS LIKE 'Threads_running'

   11 Query EXPLAIN SELECT /*!40001 SQL_NO_CACHE */ `id` FROM `susuan`.`edu_user_vip_log` FORCE INDEX(`PRIMARY`) WHERE ((`id` >= '11615091')) ORDER BY `id` LIMIT 43378, 2 /*next chunk boundary*/

   11 Query SELECT /*!40001 SQL_NO_CACHE */ `id` FROM `susuan`.`edu_user_vip_log` FORCE INDEX(`PRIMARY`) WHERE ((`id` >= '11615091')) ORDER BY `id` LIMIT 43378, 2 /*next chunk boundary*/

   11 Query EXPLAIN SELECT `id`, `vip_id`, `user_id`, `create_time`, `duration`, `type`, `description`, `open_id` FROM `susuan`.`edu_user_vip_log` FORCE INDEX(`PRIMARY`) WHERE ((`id` >= '11615091')) AND ((`id` <= '11658469')) LOCK IN SHARE MODE /*explain pt-online-schema-change 10551 copy nibble*/

   11 Query INSERT LOW_PRIORITY IGNORE INTO `susuan`.`_edu_user_vip_log_new` (`id`, `vip_id`, `user_id`, `create_time`, `duration`, `type`, `description`, `open_id`) SELECT `id`, `vip_id`, `user_id`, `create_time`, `duration`, `type`, `description`, `open_id` FROM `susuan`.`edu_user_vip_log` FORCE INDEX(`PRIMARY`) WHERE ((`id` >= '11615091')) AND ((`id` <= '11658469')) LOCK IN SHARE MODE /*pt-online-schema-change 10551 copy nibble*/

180917 20:19:01    11 Query SHOW WARNINGS

   11 Query SHOW GLOBAL STATUS LIKE 'Threads_running'

   11 Query EXPLAIN SELECT /*!40001 SQL_NO_CACHE */ `id` FROM `susuan`.`edu_user_vip_log` FORCE INDEX(`PRIMARY`) WHERE ((`id` >= '11658470')) ORDER BY `id` LIMIT 42505, 2 /*next chunk boundary*/

   11 Query SELECT /*!40001 SQL_NO_CACHE */ `id` FROM `susuan`.`edu_user_vip_log` FORCE INDEX(`PRIMARY`) WHERE ((`id` >= '11658470')) ORDER BY `id` LIMIT 42505, 2 /*next chunk boundary*/

   11 Query EXPLAIN SELECT `id`, `vip_id`, `user_id`, `create_time`, `duration`, `type`, `description`, `open_id` FROM `susuan`.`edu_user_vip_log` FORCE INDEX(`PRIMARY`) WHERE ((`id` >= '11658470')) AND ((`id` <= '11700975')) LOCK IN SHARE MODE /*explain pt-online-schema-change 10551 copy nibble*/

   11 Query INSERT LOW_PRIORITY IGNORE INTO `susuan`.`_edu_user_vip_log_new` (`id`, `vip_id`, `user_id`, `create_time`, `duration`, `type`, `description`, `open_id`) SELECT `id`, `vip_id`, `user_id`, `create_time`, `duration`, `type`, `description`, `open_id` FROM `susuan`.`edu_user_vip_log` FORCE INDEX(`PRIMARY`) WHERE ((`id` >= '11658470')) AND ((`id` <= '11700975')) LOCK IN SHARE MODE /*pt-online-schema-change 10551 copy nibble*/

   11 Query SHOW WARNINGS

   11 Query SHOW GLOBAL STATUS LIKE 'Threads_running'

   11 Query EXPLAIN SELECT /*!40001 SQL_NO_CACHE */ `id` FROM `susuan`.`edu_user_vip_log` FORCE INDEX(`PRIMARY`) WHERE ((`id` >= '11700976')) ORDER BY `id` LIMIT 43373, 2 /*next chunk boundary*/

   11 Query SELECT /*!40001 SQL_NO_CACHE */ `id` FROM `susuan`.`edu_user_vip_log` FORCE INDEX(`PRIMARY`) WHERE ((`id` >= '11700976')) ORDER BY `id` LIMIT 43373, 2 /*next chunk boundary*/

   11 Query SELECT /*!40001 SQL_NO_CACHE */ `id` FROM `susuan`.`edu_user_vip_log` FORCE INDEX(`PRIMARY`) ORDER BY `id` DESC LIMIT 1 /*last upper boundary*/

   11 Query EXPLAIN SELECT `id`, `vip_id`, `user_id`, `create_time`, `duration`, `type`, `description`, `open_id` FROM `susuan`.`edu_user_vip_log` FORCE INDEX(`PRIMARY`) WHERE ((`id` >= '11700976')) AND ((`id` <= '11719632')) LOCK IN SHARE MODE /*explain pt-online-schema-change 10551 copy nibble*/

   11 Query INSERT LOW_PRIORITY IGNORE INTO `susuan`.`_edu_user_vip_log_new` (`id`, `vip_id`, `user_id`, `create_time`, `duration`, `type`, `description`, `open_id`) SELECT `id`, `vip_id`, `user_id`, `create_time`, `duration`, `type`, `description`, `open_id` FROM `susuan`.`edu_user_vip_log` FORCE INDEX(`PRIMARY`) WHERE ((`id` >= '11700976')) AND ((`id` <= '11719632')) LOCK IN SHARE MODE /*pt-online-schema-change 10551 copy nibble*/

   11 Query SHOW WARNINGS

   11 Query SHOW GLOBAL STATUS LIKE 'Threads_running'

   11 Query RENAME TABLE `susuan`.`edu_user_vip_log` TO `susuan`.`_edu_user_vip_log_old`, `susuan`.`_edu_user_vip_log_new` TO `susuan`.`edu_user_vip_log`

   11 Query DROP TRIGGER IF EXISTS `susuan`.`pt_osc_susuan_edu_user_vip_log_del`

   11 Query DROP TRIGGER IF EXISTS `susuan`.`pt_osc_susuan_edu_user_vip_log_upd`

   11 Query DROP TRIGGER IF EXISTS `susuan`.`pt_osc_susuan_edu_user_vip_log_ins`

   11 Query SHOW TABLES FROM `susuan` LIKE '\_edu\_user\_vip\_log\_new'

   12 Quit

   11 Quit

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM