Percona Toolkit在线架构更改:可以一​​次添加多个列吗?

时间:2014-05-05 19:46:19

标签: mysql sql database-schema percona

有人知道是否可以使用Percona的pt-online-schema-change for MySQL一次添加多个列?我已经尝试过每个我能想到的变体,以便一次添加多个列。这似乎是你应该能够做的事情,但是我无法在网上找到任何你能做到的证据,我也无法得到合理的语法。我尝试过的一些陈述如下,让您了解我尝试过的内容(出于显而易见的原因,用户名和密码已被删除)

声明1:

    pt-online-schema-change --print --progress time,5 --max-load Threads_running=1000 
--critical-load Threads_running=10000 --chunk-time 5 --set-vars "innodb_lock_wait_timeout=600" 
--nocheck-plan --execute -h webdb -u xxxx --p xxxx --alter "ADD first_seen datetime NOT NULL 
DEFAULT 0, last_seen datetime NOT NULL DEFAULT 0 AFTER days_running"  D=mydata,t=mytable

声明2:

    pt-online-schema-change --print --progress time,5 --max-load Threads_running=1000 
--critical-load Threads_running=10000 --chunk-time 5 --set-vars "innodb_lock_wait_timeout=600" 
--nocheck-plan --execute -h webdb -u xxxx --p xxxx --alter "ADD first_seen datetime NOT NULL 
DEFAULT 0, ADD last_seen datetime NOT NULL DEFAULT 0 AFTER days_running"  D=mydata,t=mytable

陈述3:

 pt-online-schema-change --print --progress time,5 --max-load Threads_running=1000 
--critical-load Threads_running=10000 --chunk-time 5 --set-vars "innodb_lock_wait_timeout=600" 
--nocheck-plan --execute -h webdb -u xxxx --p xxxx --alter "ADD first_seen datetime NOT NULL 
DEFAULT 0 AFTER days_running, ADD last_seen datetime NOT NULL DEFAULT 0 AFTER days_running"  
D=mydata,t=mytable

等等。基本上我已经尝试了我能想到的ADD first_seen datetime NOT NULL的每个变体     DEFAULT 0,ADD last_seen datetime NOT NULL DEFAULT 0 after days_running" (移动/移除后,移动/移除ADD,移动/移除逗号等)

1 个答案:

答案 0 :(得分:8)

根据manual这是可能的,只需用逗号分隔语句即可。引用手册的--alter部分:

  

- 改变

type: string

The schema modification, without the ALTER TABLE keywords. You can perform 
multiple modifications to the table by specifying them with commas. Please 
refer to the MySQL manual for the syntax of ALTER TABLE.

在你的情况下,这个--alter应该有效(假设你的陈述的其余部分是正确的):

--alter "ADD first_seen datetime NOT NULL DEFAULT 0, ADD last_seen datetime NOT NULL DEFAULT 0 AFTER days_running"