Entwicklung und Datenbanken
Datenbank von MyISAM nach InnoDB konvertieren und die Storage-Engine wechseln
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
- Den Fehler bei der Datenbankverbindung in WordPress beheben Was Sie prüfen sollten, wenn WordPress nach einer Migration der Website oder einer Änderung der MySQ...
- Eine Datenbank und ihren Benutzer mit dem Assistenten von cPanel anlegen Legen Sie mit dem Assistenten von cPanel eine MySQL-Datenbank, ihren Benutzer und die Berechtigungsz...
- Laufende MySQL-Abfragen beenden Listen Sie die noch offenen MySQL-Abfragen auf und beenden Sie sie mit KILL QUERY im Terminal, mit m...
- MySQL 8, Änderung der Zeichenkodierung von latin1 auf utf8mb4 Beheben Sie seltsame Zeichen in älteren Anwendungen nach dem Wechsel zu MySQL 8, indem Sie latin1 fü...
Stimmt etwas nicht oder hat sich etwas geändert? Erzählen Sie es uns, und wir prüfen es.