mysql startet nicht, nachdem innodb_buffer_pool_size und innodb_log_file_size erhöht wurden

18

Ich verfolge diese Lösung hier /programming/3927690/howto-clean-a-mysql-innodb-storage-engine/4056261#comment14041132_4056261 und habe versucht, meine innodb_buffer_pool_sizeauf 4G und später 1G (auch 1024M) in zu erhöhen Zusätzlich zur Größe der Protokolldatei, aber MySQL startet nicht mit diesen Werten. Wenn ich es auf 512M zurücksetze, fängt mysql gut an.

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 Startet den mysqld-Daemon 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: Linux native AIO verwenden

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

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

InnoDB: Fehler: Protokolldatei ./ib_logfile0 ist unterschiedlich groß. 0 134217728 Bytes

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

giorgio79
quelle
Können Sie bitte die Fehlerprotokolle für das teilen ...
Abdul Manaf
Danke, ich habe es geschafft, es zu finden. Ich denke das wird einfacher. Ich hätte auch anfänglich hinzufügen sollen, dass ich die Größe der Protokolldatei ebenfalls vergrößert habe, um mit der Vergrößerung des Pufferpools übereinzustimmen (ich habe diese Informationen jetzt hinzugefügt).
giorgio79
Ok @ giorgio79 ...
Abdul Manaf
Versuchen Sie, die Protokolldatei (en) zu löschen.
Dezso
Haben Sie zuerst die Größe der Protokolldatei gelöscht? Haben Sie zuerst alle Datenbanken gelöscht? Bitte geben Sie weitere Informationen darüber an, was Sie genau getan haben.
ALH

Antworten:

19

Die beiden Antworten von @RickJames und @drogart sind im Wesentlichen die Mittel. (Jeweils +1).

Aus dem angezeigten Fehlerprotokoll geht hervor, dass in den letzten beiden Zeilen Folgendes steht:

InnoDB: Fehler: Protokolldatei ./ib_logfile0 ist unterschiedlich groß. 0 134217728 Bytes

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

Zu diesem Zeitpunkt war es offensichtlich, dass Sie innodb_log_file_size auf 256 MB (268435456) festgelegt haben, my.cnfwährend die InnoDB-Transaktionsprotokolle ( ib_logfile0, ib_logfile1) jeweils 128 MB (134217728 ) betrugen. Wenn Sie auf den Link zu meiner StackOverflow-Antwort in Ihrer Frage zurückblicken , mussten Sie Folgendes tun:

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

[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 -fdas Fehlerprotokoll aus, um sicherzugehen, was gerade passiert . Sie erhalten eine Meldung, die Sie darüber informiert, wann die einzelnen innodb-Protokolldateien erstellt werden.

RolandoMySQLDBA
quelle
Danke, ja, ich habe sie nicht zuerst gelöscht. Ich wollte nur sehen, wie sich Mysql verhält. Nach dem Ausführen von Schritt 3 Neustart funktioniert.
giorgio79
1
Ich denke, man sollte die Protokolldateien nicht löschen, sondern an einen anderen Ort verschieben und sie eine Weile später löschen, wenn Sie die Größe der Protokolldatei erfolgreich geändert haben. Andernfalls wären Sie in Schwierigkeiten, wenn MySQL abstürzt, bevor Sie ausgeführt werden service mysqld stop.
KajMagnus
4

Aufgrund des Fehlers im Protokoll schätze ich, dass Sie dies getan haben:

  • Fahren Sie MySQL herunter
  • hat my.cnf bearbeitet, um die Größe der Innodb-Protokolldatei zu ändern
  • versucht, mysql zu starten (dann ist es fehlgeschlagen)

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 in der Konfigurationsdatei angegebenen Größe 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 läuft und alles in Ordnung aussieht.

Drogart
quelle
3

Der buffer_pool sollte auf ungefähr 70% des verfügbaren RAM eingestellt sein, wenn Sie nur InnoDB ausführen .

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

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

  1. Fahren Sie mysqld sauber herunter
  2. lösche den Wert in my.cnf (my.ini)
  3. Löschen Sie die Protokolldateien
  4. Retstart - Neue Protokolldateien werden neu erstellt.
Rick James
quelle
Danke, ja das ist auch eine richtige Antwort. Ich konnte nur einen akzeptieren. + 1d das auch.
giorgio79
1

Möglicherweise liegt auch ein Problem bei Ihrem Wert für die Pufferpoolgröße vor . wie es in meinem Fall passiert ist ...

Beim Erhöhen oder Verringern innodb_buffer_pool_sizewird die Operation in Abschnitten ausgeführt. Die Blockgröße wird durch die innodb_buffer_pool_chunk_sizeKonfigurationsoption definiert , die standardmäßig 128 MB hat. Weitere Informationen finden Sie unter Konfigurieren der Blockgröße des InnoDB-Pufferpools .

Die Pufferpoolgröße muss immer gleich oder ein Vielfaches von sein innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances. Wenn Sie innodb_buffer_pool_sizeeinen Wert konfigurieren , der nicht gleich oder ein Vielfaches von ist innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances, wird die Pufferpoolgröße automatisch an einen Wert angepasst, der gleich oder ein Vielfaches von innodb_buffer_pool_chunk_size * innodb_buffer_pool_instancesder angegebenen Pufferpoolgröße ist.

In diesem Beispiel innodb_buffer_pool_sizeist 8G und innodb_buffer_pool_instances16 festgelegt. innodb_buffer_pool_chunk_sizeDies ist der Standardwert 128M.

8G ist ein gültiger innodb_buffer_pool_sizeWert, da 8G ein Vielfaches von innodb_buffer_pool_instances=16 * innodb_buffer_pool_chunk_size=128M2G ist.

SHIVI
quelle