2009-06-18 17 views
12

Was wäre der schnellste Weg, eine neue Spalte in einer großen MySQL-Tabelle hinzuzufügen?Hinzufügen einer neuen Spalte in einer großen MySQL-Tabelle

Die Tabelle zum Hinzufügen einer neuen Tabelle erstellt eine Kopie der vollständigen Tabelle und ersetzt dann die alte Tabelle durch die neue Tabelle create. Während dieser Prozess ausgeführt wird, ist die ursprüngliche Tabelle lesbar, aber alle Einfügungen und Aktualisierungen werden angehalten.

Bei großen Tabellen kann die Kopie sehr lange dauern, gibt es eine Möglichkeit, sie zu reduzieren?

+0

Verwandte Frage: http://stackoverflow.com/questions/1645215/how-do-i-add-a-column-to-large-sql-server-table –

+1

Tuning innodb_log_file_size Betrachten (Aber Vorsicht, siehe http://www.mysqlperformanceblog.com/2011/07/09/how-to-change-innodb_log_file_size-safely/) und innodb_log_buffer_size. Weitere Informationen finden Sie in meiner Antwort hier: http://StackOverflow.com/a/12688184/1148030 –

Antwort

5

Sie stecken fest die ALTER TABLE. Der beste Weg, um effektiv damit umzugehen, ist ein MASTER-MASTER Setup.

Sie können zuerst MASTER1 ändern und MASTER2 einfach in der Produktion verwenden. Dann wechseln Sie und machen das genaue Gegenteil.

2

Tun Sie dies nicht live auf einem aktiven System. Bei einem aktiven System tun Sie dies, während Sie das System zur regelmäßigen Wartung herunterfahren.

+0

Es ist möglich, das Update in einer Slave-Box zu tun, aber gibt es eine nicht-manuelle Möglichkeit, die Updates auf dem echten neu zu erstellen ? das Binärlog oder so ähnlich. Der manuelle Weg wäre jede Beilage oder Aktualisierung zu protokollieren und in der gleichen Reihenfolge anzuwenden. – Maraino

1

eine InnoDB-Tabelle Angenommen: Spalten auf neue Tabelle

  1. Kopieren {vorhandene Tabelle} in {Neuer Tabelle} ohne Daten (Schema nur)
  2. Verwenden Alte Tabelle hinzuzufügen Befehle/ändern (sollte funktionieren blitzschnell)
  3. MYSQLDUMP vorhandene Tabelle (mit Einzeltransaktion, --no-drop-table usw.) zu Datei
  4. Import-Dump-Datei in {New Table} (dies kann eine Weile dauern, aber alte Tabelle noch in diesem Zeitraum verwendbar)
  5. d Während der Wartungszeit DROP {Old Table} und {New Table} in den vorherigen {Old Table} umbenennen.
Verwandte Themen