it-swarm.com.de

MySQL startet nicht nach dem Erhöhen von innodb_buffer_pool_size und innodb_log_file_size

Ich verfolge diese Lösung hier https://stackoverflow.com/questions/3927690/howto-clean-a-mysql-innodb-storage-engine/4056261#comment14041132_4056261 und habe versucht, meine innodb_buffer_pool_size Bis 4G und höher 1G (ebenfalls 1024M) zusätzlich zur Größe der Protokolldatei, aber MySQL beginnt nicht mit diesen Werten. Wenn ich es wieder auf 512M setze, startet MySQL gut.

Wie kann ich das lösen? Mein Server hat 16 GB und laut Webmin sysinfo:

Real memory 15.62 GB total, 3.13 GB used

Inzwischen habe ich auch das Fehlerprotokoll gefunden:

120529 10:29:32 mysqld_safe mysqld aus der PID-Datei /var/run/mysqld/mysqld.pid wurde beendet

120529 10:29:33 mysqld_safe Starten des mysqld-Daemons mit Datenbanken aus/var/lib/mysql

120529 10:29:33 [Hinweis] Das Plugin 'FEDERATED' ist deaktiviert.

120529 10:29:33 InnoDB: Der InnoDB-Speicherheap ist deaktiviert

120529 10:29:33 InnoDB: Mutexe und rw_locks verwenden GCC-Atom-Builtins

120529 10:29:33 InnoDB: Komprimierte Tabellen verwenden zlib 1.2.3

120529 10:29:33 InnoDB: Verwenden von nativem Linux-AIO

120529 10:29:33 InnoDB: Pufferpool wird initialisiert, Größe = 1,0 G.

120529 10:29:33 InnoDB: Initialisierung des Pufferpools abgeschlossen

InnoDB: Fehler: Die Protokolldatei ./ib_logfile0 hat eine andere Größe von 0 134217728 Byte

InnoDB: als in der .cnf-Datei angegeben 0 268435456 Bytes!

18
giorgio79

Die beiden Antworten von @ RickJames und @ drogart sind im Wesentlichen die Mittel. (+1 für jeden).

Direkt aus dem von Ihnen angezeigten Fehlerprotokoll sagen die letzten beiden Zeilen:

InnoDB: Fehler: Die Protokolldatei ./ib_logfile0 hat eine andere Größe von 0 134217728 Byte

InnoDB: als in der .cnf-Datei angegeben 0 268435456 Bytes! `

Zu diesem Zeitpunkt war es offensichtlich, dass Sie innodb_log_file_size in my.cnf Auf 256M (268435456) setzen, während die InnoDB-Transaktionsprotokolle (ib_logfile0, ib_logfile1) Waren jeweils 128 Millionen (134217728). Wenn Sie auf den Link zu meiner StackOverflow-Antwort in Ihrer Frage zurückblicken, mussten Sie Folgendes tun:

Schritt 01) Fügen Sie dies zu my.cnf Hinzu:

[mysqld]
innodb_buffer_pool_size=4G
innodb_log_file_size=1G

Schritt 02) Führen Sie diesen Befehl im Betriebssystem aus

mysql -u... -p... -e"SET GLOBAL innodb_fast_shutdown = 1"
service mysql stop
rm -f /var/lib/mysql/ib_logfile*
service mysql start

Führen Sie tail -f Gegen das Fehlerprotokoll aus, um Vertrauen in das Geschehen zu haben. Sie sehen eine Meldung, die Sie darüber informiert, wann jede Innodb-Protokolldatei erstellt wird.

19
RolandoMySQLDBA

Aufgrund des Fehlers im Protokoll haben Sie vermutlich Folgendes getan:

  • mySQL herunterfahren
  • bearbeitete my.cnf, um die Größe der Innodb-Protokolldatei zu ändern
  • versuchte MySQL zu starten (dann schlug es fehl)

Wenn Sie die Größe der Protokolldatei ändern, müssen Sie die alten Protokolldateien entfernen. Innodb wird nicht erfolgreich gestartet, wenn die vorhandenen Dateien nicht der angegebenen Größe in der Konfigurationsdatei entsprechen. Wenn Sie sie an einen anderen Ort verschieben, erstellt innodb beim Start neue Transaktionsprotokolldateien mit der richtigen Größe.

Ich würde empfehlen, die alten Dateien in ein anderes Verzeichnis zu verschieben, anstatt sie nur zu löschen, bis der Server mit neuen Protokolldateien betriebsbereit ist und alles in Ordnung aussieht.

4
drogart

Der buffer_pool sollte auf ungefähr 70% von verfügbar RAM, wenn Sie nur InnoDB ausführen) festgelegt werden.

Die Protokollgröße spielt keine große Rolle. Das Optimum ist, es so einzustellen, dass (Uptime * innodb_log_file_size/Innodb_os_log_written) ngefähr 3600 (1 Stunde) ist.

Um die Protokollgröße zu ändern, muss man

  1. mysqld sauber herunterfahren
  2. lösche den Wert in my.cnf (my.ini)
  3. löschen Sie die Protokolldateien
  4. neustart - Neue Protokolldateien werden neu erstellt.
3
Rick James

Es kann auch ein Problem mit Ihrem Wert für die Größe des Pufferpools geben . wie es in meinem Fall passiert ist ...

Beim Erhöhen oder Verringern von innodb_buffer_pool_size Wird die Operation in Blöcken ausgeführt. Die Blockgröße wird durch die Konfigurationsoption innodb_buffer_pool_chunk_size Definiert, die standardmäßig 128 MB hat. Weitere Informationen finden Sie unter Konfigurieren der Blockgröße des InnoDB-Pufferpools .

Die Größe des Pufferpools muss immer gleich oder ein Vielfaches von innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances Sein. Wenn Sie innodb_buffer_pool_size Auf einen Wert konfigurieren, der nicht gleich oder ein Vielfaches von innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances Ist, wird die Größe des Pufferpools automatisch auf einen Wert angepasst, der gleich oder ein Vielfaches von innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances, die nicht kleiner als die angegebene Pufferpoolgröße ist.

Im Beispiel ist innodb_buffer_pool_size Auf 8G und innodb_buffer_pool_instances Auf 16 gesetzt. innodb_buffer_pool_chunk_size Ist 128M, was der Standardwert ist.

8G ist ein gültiger innodb_buffer_pool_size Wert, da 8G ein Vielfaches von innodb_buffer_pool_instances=16 * innodb_buffer_pool_chunk_size=128M Ist, was 2G ist.

1
SHIVI