In einer 600-GB-MySQL-Tabelle muss ein Datentyp von INT in BIGINT geändert werden. Die Spalte hat einen eindeutigen Index. Ich mag mit nicht signiertem INT gut umgehen können, aber ich gehe davon aus, dass der Wechsel zu BIGINT ziemlich schmerzhaft sein wird. Die Engine der Tabelle ist InnoDB. Was wäre einfacher:
- ALTER TABLE
- Struktur kopieren und
INSERT INTO (SELECT *)
- Dump-Tabelle und Ändern der Definitionen der Dump-Datei-Tabelle
- Noch etwas?
UPDATE: Wie gewünscht, MySQL Version 5.5.15, keine Fremdschlüssel und Tabelle erstellen:
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
. Haben Sie Fremdschlüssel, die auf diese Spalte verweisen? Es wäre hilfreich, wenn Sie dieSHOW CREATE TABLE tablename;
Ausgabe zeigen würden.Antworten:
Angenommen, Ihre Tabelle enthält keine Trigger, sollten Sie die Verwendung in Betracht ziehen,
pt-online-schema-change
da Sie damit die Tabelle ÄNDERN können, ohne sie zu sperren.Angesichts der Größe des Tisches wird es noch eine ganze Weile dauern.
Außerdem müssen Sie bei dieser Methode oder mit
ALTER TABLE
sicherstellen, dass Sie 600 GB zusätzlichen Speicherplatz haben, um zwei Kopien der Tabelle zu unterstützen, während diese wiederhergestellt wird.quelle
ALTER TABLE
Ausführung 24 bis 96 Stunden dauern könnte. Sie können eine bessere Schätzung erhalten, indem Sie die ALTER TABLE in einer Testumgebung ausführen.Die Verwendung des Percona-Toolkits
pt-online-schema-change
wäre meine Wahl für die Produktion, ohne die Verwendung zu beeinträchtigen. Dadurch werden einige Trigger hinzugefügt, um Ihre Deltas und eine temporale Tabelle abzurufen, die anschließend umbenannt werden.Beispiel:
quelle