Мне нужно изменить тип данных с INT на BIGINT в таблице MySQL 600 ГБ. Столбец имеет уникальный индекс. Я мог бы быть хорош с неподписанным INT, но я предполагаю, что изменение к этому или BIGINT будет в значительной степени той же самой болью. Двигатель стола - InnoDB. Что будет проще:
- ALTER TABLE
- Копирование структуры и
INSERT INTO (SELECT *)
- Таблица дампа и изменение определений таблицы файла дампа
- Что-нибудь еще?
ОБНОВЛЕНИЕ: Как и требовалось, MySQL версии 5.5.15, без внешних ключей и создания таблицы:
CREATE TABLE `tbl` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`created_at` datetime NOT NULL,
`tid` bigint(20) NOT NULL,
`t` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`f` tinyint(1) NOT NULL,
`i_id` bigint(20) NOT NULL,
`ir_id` int(11) NOT NULL,
`r_c` int(11) NOT NULL,
`r` tinyint(1) NOT NULL,
`e` text CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`t` varchar(5) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `user` (`user_id`,`tid`)
) ENGINE=InnoDB AUTO_INCREMENT=1657146169 DEFAULT CHARSET=utf8
ALTER TABLE ONLINE
. У вас есть внешние ключи, ссылающиеся на этот столбец? Это помогло бы, если бы вы показалиSHOW CREATE TABLE tablename;
вывод.Ответы:
Предполагая, что ваша таблица не имеет никаких триггеров, вы должны рассмотреть возможность ее использования,
pt-online-schema-change
поскольку это позволит вам ИЗМЕНИТЬ таблицу без ее блокировки.Это все еще займет значительное количество времени, учитывая размер таблицы.
Кроме того, при использовании этого метода или
ALTER TABLE
вам потребуется убедиться, что у вас есть 600 ГБ дополнительного дискового пространства для поддержки двух копий таблицы во время ее восстановления.источник
ALTER TABLE
может занять 24 - 96 часов. Вы можете получить более точную оценку, запустив ALTER TABLE в тестовой среде.Использование Percona Toolkit
pt-online-schema-change
было бы моим выбором на производстве без ущерба для использования. Это добавит триггеры для получения дельт и временную таблицу, которая будет переименована после того, как это будет сделано.пример:
источник