有人知道是否可以使用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,移动/移除逗号等)
答案 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"