J'essaie de modifier une colonne et de modifier quelques index sur une table en même temps. Pour ce faire, j'utilise pt-online-schema-change
afin qu'il puisse se produire en ligne, mais je reçois une erreur:Impossible de changer de colonne et de modifier l'index dans 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.
La table a été créée comme suit:
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
Essentiellement, je m essayer ce qui suit:
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;
Je suis capable de faire la modification de l'index et la modification colonne séparément (mais je aurais besoin de copier toutes mes données deux fois, préféreraient le faire qu'une seule fois), mais si j'ajoute les deux euh, ça donne une erreur. J'ai l'impression de manquer quelque chose d'évident; des idées?
Peut-être qu'il me manque quelque chose - Mais pourquoi ne renommez-vous pas la colonne de façon régulière (sans pt-online-schema-change)? –
@PaulSpiegel J'essaie aussi de faire un changement sur la colonne: je veux un type différent. Mais j'ai été en mesure de réduire le problème à simplement renommer. Je suppose que le plus petit ensemble de données devait se reproduire. La raison pour percona toolkit est que je veux que tout se passe en ligne, et capable d'être limité. – Aeveus
Toujours pas sûr si cela aide .. mais regardez le [tableau ici] (https://dev.mysql.com/doc/refman/5.6/fr/innodb-create-index-overview.html). Depuis MySQL 5.6, aucune "reconstruction de table" n'est requise pour renommer une colonne. –