Entwicklung und Datenbanken

Datenbank von MyISAM nach InnoDB konvertieren und die Storage-Engine wechseln

Geprüft am 5 Min. Lesezeit MySQL Konvertierung

Eine Anwendung kann verlangen, MyISAM-Tabellen nach InnoDB zu konvertieren. Ersetzen Sie nicht global Text im Dump und leeren Sie nicht die Produktionsdatenbank: Die Änderung muss auf einer unabhängigen Kopie getestet werden, und das Original bleibt als Rückfallebene erhalten.

1. Eine geschützte Kopie erstellen und prüfen

Arbeiten Sie in einem privaten Ordner außerhalb von public_html und mit einem neuen Dump-Namen. Halten Sie Schreibvorgänge vorübergehend an und erstellen Sie einen Dump. Die Option -p fragt das Passwort ab, ohne es in den Befehl aufzunehmen:

umask 077
mysqldump --routines --triggers -u USUARIO_MYSQL -p BASE_DE_DATOS > base-antes-innodb.sql &&
test -s base-antes-innodb.sql &&
sha256sum base-antes-innodb.sql > base-antes-innodb.sql.sha256 &&
chmod 400 base-antes-innodb.sql base-antes-innodb.sql.sha256 &&
sha256sum -c base-antes-innodb.sql.sha256

Gibt mysqldump einen Fehler zurück, machen Sie nicht weiter und betrachten Sie die unvollständige Datei nicht als gültig. Der Export von Routinen erfordert Berechtigungen; schlägt er fehl, prüfen Sie, welche Objekte die Anwendung braucht, bevor Sie sie weglassen. Auch Events, falls vorhanden, müssen erfasst und mit den passenden Optionen und Berechtigungen exportiert werden. Die Prüfsumme erkennt spätere Änderungen an der Datei, beweist aber nicht, dass die Kopie vollständig ist. Auch reine Leseberechtigungen machen sie nicht unveränderlich.

Laden Sie den Dump und seine Prüfsumme auf einen anderen Speicher herunter. Ändern Sie diese Dateien nicht.

2. Einen Klon wiederherstellen und prüfen

Legen Sie eine neue Datenbank und einen neuen Benutzer an, stellen Sie die Kopie wieder her und richten Sie dort einen Klon der Anwendung ein. Deaktivieren Sie dessen E-Mails, Zahlungen, Webhooks und automatische Aufgaben, damit keine Aktionen der Produktion doppelt ausgeführt werden:

mysql -u USUARIO_NUEVO -p BASE_NUEVA < base-antes-innodb.sql

Lassen Sie sich die MyISAM-Tabellen und ihre Größe anzeigen:

SELECT TABLE_NAME, ENGINE, TABLE_ROWS, DATA_LENGTH, INDEX_LENGTH
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'BASE_NUEVA'
  AND ENGINE = 'MyISAM';

Prüfen Sie die Primärschlüssel, die Indizes (einschließlich FULLTEXT), die Zeilenformate und die Kompatibilität der Anwendung mit dem Engine-Wechsel. Stellen Sie sicher, dass genug freier Speicher für den Klon und für den Neuaufbau seiner Tabellen vorhanden ist. Die Konvertierung kann Tabellen sperren und zusätzlichen Platz benötigen.

3. Nur die geprüften Tabellen konvertieren

Erzeugen Sie eine Liste exakter Anweisungen, prüfen Sie sie und führen Sie jede nur im Klon aus:

SELECT CONCAT('ALTER TABLE `', REPLACE(TABLE_SCHEMA, '`', '``'),
              '`.`', REPLACE(TABLE_NAME, '`', '``'), '` ENGINE=InnoDB;') AS sentencia_a_revisar
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'BASE_NUEVA'
  AND ENGINE = 'MyISAM';

Verwenden Sie keine globale Ersetzung in der .sql-Datei: Sie könnte Benutzerdaten, Kommentare oder Einstellungen verändern, die das Wort MyISAM enthalten.

4. Prüfen und umstellen

Verwenden Sie COUNT(*) für exakte Zählungen: TABLE_ROWS kann ein Schätzwert sein, besonders nach der Konvertierung zu InnoDB. Vergleichen Sie Schema, Indizes und Zeilenanzahl aller Tabellen zwischen Originaldatenbank und Klon. Testen Sie Anmeldung, Suche, Schreibvorgänge, geplante Aufgaben und die kritischen Vorgänge der Anwendung.

Erst nachdem Sie den Klon geprüft haben, halten Sie die Schreibvorgänge erneut an, synchronisieren gegebenenfalls die letzten Änderungen und stellen die Zugangsdaten der Anwendung auf BASE_NUEVA um. Lassen Sie die Originaldatenbank während des Beobachtungszeitraums unverändert und ohne Schreibvorgänge.

Zurücksetzen

Schlägt eine spätere Prüfung fehl, halten Sie die Schreibvorgänge an. Bevor Sie die vorherigen Zugangsdaten wiederherstellen, ermitteln und sichern Sie die Vorgänge, die in der neuen Datenbank eingegangen sind; ohne Abgleich gingen diese Änderungen bei der Rückkehr verloren. Ist das geklärt, kehren Sie zur Originaldatenbank zurück. Behalten Sie sowohl diese Datenbank als auch den geprüften Dump, bis feststeht, dass die Konvertierung stabil ist.

Wenn Sie keinen Klon anlegen oder den nötigen Speicherplatz nicht berechnen können, wenden Sie sich vor der Konvertierung der Tabellen an den Support.

Das könnte Ihnen auch helfen

Stimmt etwas nicht oder hat sich etwas geändert? Erzählen Sie es uns, und wir prüfen es.