MySQL-Deadlock - Spalten hinzufügen

MySQL-Deadlock - Spalten hinzufügen

Neulich ist bei mir ein schlimmes MySQL-Problem aufgetreten. Ich habe der Tabelle „Promotions“ (13 vorhandene Spalten, ~750 Datensätze) mithilfe der PHPMyAdmin-Schnittstelle zwei neue Spalten hinzugefügt. Diese Abfrage („ALTER TABLE.....“) wurde nie vollständig ausgeführt und sperrte die Tabelle, sodass jede nachfolgende Abfrage an „Promotions“ hängen blieb und in die Warteschlange gestellt wurde. Ich habe ungefähr eine Stunde gebraucht, um dies zu bemerken, und das Problem wurde durch einen Neustart meiner Datenbank behoben.

Gibt es Standardvorkehrungen, die getroffen werden müssen, und bekannte Probleme, die durch das Ändern von Datenbankschemata entstehen? Ich habe diese Art von Sperren noch nie zuvor erlebt.

Antwort1

Um eine MySQL-Tabelle insbesondere in einer Produktionsumgebung reibungsloser zu ändern, ziehen Sie das folgende Szenario in Betracht:

1. CREATE tmp_table LIKE original_table
2. ALTER tmp_table..
3. INSERT INTO tmp_table SELECT * FROM original_table
4. RENAME original_table to orginal_table_old
5. RENAME tmp_table to original_table
6. DROP original_table_old

Auch interessant für SieFLUSH-TISCHEUndTABELLEN ENTSPERRENzur Dokumentation.

Bearbeiten: Es gibt alternative Lösungen, um dieses Problem zu lösen, wiept-online-schema-changeWerkzeug von Percona.

verwandte Informationen