Ich bin ziemlich neu im Tunen von InnoDB. Ich ändere langsam die Tabellen (wo nötig) von MyIsam auf InnoDB. Ich habe ungefähr 100 MB in innodb, also habe ich die innodb_buffer_pool_size
Variable auf 128 MB erhöht:
mysql> show variables like 'innodb_buffer%';
+-------------------------+-----------+
| Variable_name | Value |
+-------------------------+-----------+
| innodb_buffer_pool_size | 134217728 |
+-------------------------+-----------+
1 row in set (0.00 sec)
Als ich den innodb_log_file_size
Wert änderte (Beispiel: my.cnf auf der Innodb-Konfigurationsseite von mysql , um die Größe der Protokolldatei auf 25% der Puffergröße zu ändern), sah meine my.cnf folgendermaßen aus:
# innodb
innodb_buffer_pool_size = 128M
innodb_log_file_size = 32M
Wenn ich den Server neu starte, erhalte ich folgende Fehlermeldung:
110216 9:48:41 InnoDB: Pufferpool wird initialisiert, Größe = 128.0M
110216 9:48:41 InnoDB: Initialisierung des Pufferpools abgeschlossen
InnoDB: Fehler: Protokolldatei ./ib_logfile0 hat eine andere Größe 0 5242880 Bytes
InnoDB: als in angegeben die .cnf datei 0 33554432 bytes!
110216 9:48:41 [ERROR] Die 'InnoDB'-Init-Funktion des Plugins hat einen Fehler zurückgegeben.
110216 9:48:41 [ERROR] Die Registrierung von 'InnoDB' als STORAGE ENGINE ist fehlgeschlagen.
Also meine Frage: Ist es sicher, die alten log_files zu löschen, oder gibt es eine andere Methode, um die innodb_log_file_size
Variable zu ändern ?
Antworten:
Ja, es ist sicher, die Protokolldatei zu löschen, sobald mysqld heruntergefahren wurde
Führen Sie vor diesem Hintergrund einfach die folgenden Schritte aus:
Inbetriebnahme mysqld neu erstellen
ib_logfile0
undib_logfile1
Versuche es !!!
UPDATE 20.10.2011 16:40 Uhr EDT
Damit alle Daten im InnoDB-Pufferpool sauber ausgegeben werden, bevor die Protokolldateien wiederhergestellt werden, sollten Sie diese Option ca. 1 Stunde vor dem Herunterfahren festlegen:
Standardmäßig ist innodb_max_dirty_pages_pct 75 (MySQL 5.5+) oder 90 (vor MySQL 5.5). Wenn Sie diesen Wert auf Null setzen, bleibt die Anzahl der verschmutzten Seiten unter 1% des InnoDB-Pufferpools. Performing
service mysql stop
macht das trotzdem. Darüber hinaus werden durch das Herunterfahren alle verbleibenden Elemente im Redo-Protokoll beendet. Um diese Option beizubehalten, fügen Sie sie einfach zu /etc/my.cnf hinzu:UPDATE 2013-04-19 16:16 EDT
Ich habe meine Antwort ein bisschen mehr mit innodb_fast_shutdown aktualisiert, weil ich mysql neu gestartet und mysql dazu angehalten habe. Jetzt ist dieser Schritt von entscheidender Bedeutung, da jede nicht festgeschriebene Transaktion andere bewegliche Teile innerhalb und außerhalb der InnoDB-Transaktionsprotokolle enthalten kann ( siehe InnoDB-Infrastruktur ).
Bitte beachten Sie, dass durch das Setzen von innodb_fast_shutdown auf 2 auch die Logs gelöscht werden. Es sind jedoch noch mehr bewegliche Teile vorhanden, die beim Starten von mysqld bei Crash Recovery abgerufen werden. Die Einstellung 0 ist am besten.
quelle
SET GLOBAL innodb_fast_shutdown = 0;
. Beim Herunterfahren von MySQL werden alle Transaktionen aus allen sich bewegenden Teilen gelöscht, einschließlich der Redo-Protokolle (ib_logfile0 und ib_logfile1). Man kann sie behalten. Ich habe noch keine Probleme mit vollständig geleerten Protokollen.Ich würde stattdessen die offizielle Methode empfehlen , die ich hier der Einfachheit halber wiedergebe:
quelle
innodb_buffer_pool_size
- einfach ändernmy.cnf
(my.ini
) und mysqld neu starten.innodb_log_file_size
ist weniger kritisch. Ändern Sie es nicht, es sei denn, es gibt einen Grund dafür. Roland lieferte die Schritte , aber ein Aspekt macht mir Sorgen ... Ich weiß nicht, ob die ersten beiden Schritte wichtig sind; es scheint, als könnten sie sein:set innodb_fast_shutdown = OFF
Die Protokolldateien protokollieren noch nicht abgeschlossene Geschäfte. "
innodb_fast_shutdown
" sagt, dass man sich nach dem Neustart mit dem Zeug befassen soll . Das Entfernen der Dateien kann also Informationen verlieren?Neue Versionen haben Dinge verbessert: (mehr Diskussion in den Kommentaren)
innodb_log_file_size
> 4 GBinnodb_log_file_size
kann geändert werden, ohne zuerst iblog zu entfernen *innodb_buffer_pool_size
Soll ich log_file_size ändern?
Verwenden Sie
GLOBAL STATUS
diese Option, um die Anzahl der Minuten vor den Protokollzyklen zu berechnen.Wenn es viel weniger als 60 (Minuten) ist, kann es hilfreich sein, log_file_size zu erhöhen. Wenn es viel mehr ist, verschwenden die Protokolldateien Speicherplatz. Diese "1 Stunde" ist eher willkürlich. Wenn Sie also in der Nähe sind, müssen Sie die log_file_size nicht ändern.
Übernehmen Sie
innodb_log_files_in_group
den Standardwert von 2.quelle
--skip-networking
als Vorsichtsmaßnahme, um diese Änderungen in letzter Minute aus dem Weg zu räumen. Deine erste Zeile (setze innodb_fast_shutdown = OFF) beseitigt das. +1 !!!innodb_log_file_size
wurde erweitert , damit es zu ändern , ohne die iblog Dateien zu entfernen.Wenn Sie sich bei mysql anmelden, geben Sie folgende Befehle ein:
Sie erhalten zwei Zahlen. Zuerst bekommt man einen und wartet dann eine Minute. Sie werden eine andere bekommen.
Angenommen, der erste ist 3.456.718.123 und der zweite ist 4.098.873.134
Now (4.098.873.134-3.856.718.123) * 60/1024/1024
Das Ergebnis ist = 13.856 MB
Sie haben zwei Protokolldateien. Wenn Sie es durch zwei teilen, erhalten Sie eine Zahl in der Nähe von 7.000 MB. Stellen Sie zur Sicherheit die Größe Ihrer Protokolldatei auf 8 GB ein
quelle
Log File Size
in dba.stackexchange.com/questions/23189/... )chown mysql: mysql -R / etc / mysql / var / lib / mysql && cd / var / lib / mysql && rm -f ib_logfile * && service mysql restart || Service MySQL neu starten
Probieren Sie es aus, es wird garantiert funktionieren [getestet auf Debian 6]
quelle