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、修改外鍵相關的子表,根據修改后的數據,修改外鍵關聯的子表。
6、rename源數據表為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 檢查主從延遲
例子:
- 添加字段
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
- 刪除字段
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
- 修改字段
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
- 添加索引
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
- 刪除索引
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.修改完成
注意:如果異常終止程序,觸發器不會自動刪除,如果要刪除新表,那么要先刪除觸發器,否則向老表插入數據會因為找不到新表而報錯
注意事項:
- pt-online-schema-change 在線DDL工具,雖然說不會鎖表,但是對性能還是有一定的影響,執行過程中對全表做一次select。這個過程會將buffer_cache中活躍數據全部交換一遍,這就導致活躍數據的請求都要從磁盤獲取,導致慢SQL增多,file_reads增大。所以對於大表應在業務低峰期執行該操作
- 執行 RENAME 時,你不能有任何鎖定的表或活動的事務。你同樣也必須有對原初表的 ALTER 和 DROP 權限,以及對新表的 CREATE 和 INSERT 權限。當業務量較大時,修改操作會等待沒有數據修改后,執行最后的rename操作。因此,在修改表結構時,應該盡量選擇在業務相對空閑時,至少修改表上的數據操作較低時,執行較為妥當。如果在多表更名中,MySQL 遭遇到任何錯誤,它將對所有被更名的表進行倒退更名,將每件事物退回到最初狀態。
- 對表的慢查詢操作,慢查詢還未結束執行osc操作,會報錯,超時錯誤,在創建觸發器的時候退出。
- 對於主從復制架構。 考慮到主從的一致性,應該在主庫上執行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