2012-04-06 20 views
5

Ich habe einen myisam dedizierten 32 GB RAM mysql Server, der auf der Standardkonfiguration ausgeführt wird. Ich möchte den Motortyp in InnoDB einer Tabelle ändern, um Tabellensperren zu vermeiden. Es hat 50 Millionen Datensätze und die Größe auf der Festplatte beträgt etwa 15 GB. Ich benutze mysql Version 5.5 Ich denke, ich muss die folgenden Optionen hinzufügen und mysql neu starten.Ändern des Tabellentyps zu InnoDB

innodb_buffer_pool_size=1G 
innodb_log_file_size=100M 
innodb_file_per_table=1 

Was wird beim Wechsel des Motortyps als notwendig erachtet?

Antwort

13

Sie werden tatsächlich einen Befehl ausführen, um jede Tabelle zu konvertieren.

Es geht schneller, zuerst die Tabelle zu sortieren:

ALTER TABLE tablename ORDER BY primary_key_column; 

Führen Sie dann den Befehl ALTER:

ALTER TABLE tablename ENGINE = INNODB; 

Es hat eine Weile dauern kann, wenn die Tabelle wirklich groß ist, und es wird verwenden eine Menge von Ihrer CPU ....

+0

Meine Frage ist, was Änderungen an my.cnf-Konfiguration vorgenommen werden muss, da die aktuelle cnf keine innodb bezogenen Parameter hat. – shantanuo

+0

Die folgende Lösung schlägt "SHOW ENGINES" vor, die Ihnen sagen wird, ob Sie weitere Änderungen an Ihrer my.cnf-Datei benötigen. Wenn ja, sei nur sicher, dass "skip-innodb" auskommentiert ist. Denken Sie daran, Ihre mysql-Engine anmutig neu zu starten. –

+0

In diesem Fall wird InnoDB auf Standardeinstellungen ausgeführt. Meine Frage ist, welche Standardeinstellungen geändert werden müssen. Oder wird es auf lange Sicht mit der Standardeinstellung funktionieren? Ich habe die 3 wichtigsten Parameter aufgelistet, ich wollte mehr wissen. – shantanuo

7

Überprüfen Sie zuerst, ob Ihre Datenbank InnoDB-Engine unterstützt (ich wette, es wird unterstützt;)):

SHOW ENGINES\G 

Wenn ja, gibt es bereits innodb related parameters anstelle Standard, überprüfen Sie sie mit:

SHOW VARIABLES LIKE '%innodb%' 

und versuchen, sie zu verstehen und die auf Ihre speziellen Bedürfnisse zu ändern. Selbst wenn Sie die Standardparameter verwenden, können Sie nun mit InnoDB-Tabellen umgehen.

Wenn Sie nur InnoDB-Tabellen erstellen möchten, können Sie Ihre Standard-Speicher-Engine ändern, entweder für die aktuelle Sitzung mit: SET storage_engine=INNODB; oder in Ihrem config default-storage-engine Option.

Der schnellste Weg, um eine Tabelle in InnoDB zu konvertieren, ist übrigens nicht der oben beschriebene Weg. Man kann die folgenden Schritte aus, eine Tabelle zu InnoDB zu konvertieren, indem Sie einfach die Daten einfügen:

CREATE TABE new AS SELECT * FROM old WHERE 1<>1; 
ALTER TABLE new ENGINE = INNODB; 
INSERT INTO new SELECT * FROM old; 

Natürlich müssen Sie die Indizes, die Sie manuell müssen hinzufügen, aber seine in der Regel lohnt sich die Zeit (und Schmerzen) Sie sparen gegenüber die ALTER TABLE ... auf etwas größeren Tischen.

+0

Warum wird die viel nützlichere Antwort nicht akzeptiert? +1 von mir – fancyPants