我試圖改變列並同時更改表上的一些索引。要做到這一點,我使用的是pt-online-schema-change
,以便它可以在網上發生,但我得到了一個錯誤:無法更改pt-online-schema-change中的列和改變索引
Error altering new table `db`.`_test_table_new`: DBD::mysql::db do failed: Key column 'foo' doesn't exist in table [for Statement "ALTER TABLE `db`.`_test_table_new` ADD INDEX test_table_composite_idx (foo, bar), DROP INDEX test_table_foo_idx, DROP_INDEX test_table_bar_idx, CHANGE COLUMN foo foo2 VARCHAR(127) NOT NULL;"] at /usr/bin/pt-online-schema-change line 9040.
該表是作爲創建如下:
CREATE TABLE `test_table` (
`id` bigint(20) unsigned NOT NULL,
`foo` varchar(127) DEFAULT NULL,
`bar` varchar(32) CHARACTER SET ascii DEFAULT NULL,
KEY `test_table_id_idx` (`id`),
KEY `test_table_foo_idx` (`foo`, `id`),
KEY `test_table_bar_idx` (`bar`, `id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
從本質上說,我米嘗試以下操作:
ADD INDEX test_table_composite_idx (foo, bar)
DROP INDEX test_table_foo_idx,
DROP INDEX test_table_bar_idx,
CHANGE COLUMN foo foo2 TEXT;
我能夠單獨做指數變化和列變化(但我需要我的所有數據複製兩次,寧願做它只有一次),但如果我添加二人共同呃,它給出了一個錯誤。這感覺就像我失去了一些明顯的東西;有任何想法嗎?
也許我錯過了一些東西 - 但爲什麼你不以常規方式重命名列(沒有pt-online-schema-change)? –
@PaulSpiegel我實際上也試圖對列做一個修改:我想要一個不同的類型。但我能夠將問題簡化爲重命名。我想,需要更小的數據集來重現。 percona工具包的原因是我希望所有事情都可以在線發生,並且能夠限制速度。 – Aeveus
仍然不知道這是否有幫助..但看看[表格](https://dev.mysql.com/doc/refman/5.6/en/innodb-create-index-overview.html)。由於MySQL 5.6不需要「表重建」來重命名列。 –