MySQL-Konfigurationsvariablen sind eine Reihe von Serversystemvariablen, die verwendet werden, um den Betrieb und das Verhalten des Servers zu konfigurieren. In diesem Blogbeitrag erläutern wir die Unterschiede bei der Verwaltung der Konfigurationsvariablen zwischen MySQL 5.7 und MySQL 8.0.
Wir werden drei verschiedene Möglichkeiten zum Festlegen der Konfigurationsvariablen basierend auf Ihrem Anwendungsfall erläutern. Konfigurationsvariablen, die zur Laufzeit gesetzt werden können, werden als dynamische Variablen bezeichnet, und diejenigen, die einen Neustart des MySQL-Servers benötigen, um wirksam zu werden, werden als nicht dynamische Variablen bezeichnet.
1:Legen Sie die Konfiguration für die aktuelle Lebensdauer eines laufenden MySQL-Servers fest
Die meisten MySQL-Konfigurationen sind dynamischer Natur und können zur Laufzeit mit dem SET-Befehl festgelegt werden. Das bedeutet, dass die Änderungen nicht dauerhaft sind und verloren gehen, wenn der MySQL-Server neu gestartet wird. Dies ist nützlich, um das Verhalten Ihrer Konfigurationsänderung zu testen, bevor Sie sie dauerhaft machen.
Für MySQL 5.7 und 8.0 können Sie dies mit dem Befehl SET GLOBAL
erreichenBeispiel:
mysql> set global max_connect_errors=10000;
2:Festlegen und Beibehalten der Konfigurationsänderung über MySQL-Neustarts hinweg
Sobald Sie mit den Konfigurationsänderungseinstellungen zufrieden sind, möchten Sie sie dauerhaft machen.
In MySQL 5.7 müssten Sie dies in zwei Schritten tun:
- Setzen Sie die Laufzeitkonfigurationseinstellung mit dem Befehl SET GLOBAL
mysql> set global max_connect_errors=10000;
- Speichern Sie diese Änderung in Ihrer my.cnf-Datei, indem Sie den vorhandenen Eintrag für max_connect_errors aktualisieren oder einen neuen hinzufügen.
Dies ist in MySQL 8.0 viel einfacher geworden. Dies können Sie in einem einzigen Schritt mit dem Befehl SET PERSIST
erledigenmysql> set persist max_connect_errors=10000;Festlegen von Konfigurationsvariablen – MySQL 5.7 vs. MySQL 8.0Click To Tweet
Dadurch wird der Laufzeitwert für die Konfiguration festgelegt und die Änderung auch beibehalten, indem sie in der Datei mysqld-auto.cnf gespeichert wird, die im Datenverzeichnis vorhanden ist. Dies ist eine JSON-Datei und Sie sehen nun die folgenden Einträge in der Datei.
{ "Version": 1, "mysql_server": { "max_connect_errors": { "Value": "10000", "Metadata": { "Timestamp": 1581135119397374, "User": "sgroot", "Host": "localhost" } } } }
Hinweis: Die in mysqld-auto.cnf vorhandenen Konfigurationseinstellungen überschreiben immer die in der Datei my.cnf vorhandenen Werte. Alle weiteren Änderungen, die Sie in der Datei my.cnf für die Variable „max_connect_errors“ vornehmen, werden also nicht wirksam. Dies kann für diejenigen verwirrend sein, die von MySQL 5.7 umsteigen, da sie möglicherweise daran gewöhnt sind, alle ihre Einstellungen in my.cnf
zu speichern3:Festlegen von Konfigurationsvariablen, die nicht dynamisch sind
Einige der Konfigurationsvariablen können nicht zur Laufzeit gesetzt werden und würden einen MySQL-Neustart erfordern, um wirksam zu werden.
In MySQL 5.7 würden Sie einen Eintrag für diese Variablen in Ihrer my.cnf-Datei vornehmen und den MySQL-Server neu starten, damit er wirksam wird. Ein Beispiel für eine solche Variable ist innodb_log_file_size.
In MySQL 8.0 können Sie einen Befehl namens SET PERSIST ONLY ausführen, der einen Eintrag in mysqld-auto.cnf erstellt.
Beispiel:
mysql> set persist_only innodb_log_file_size=134217728;
Es ist auch möglich, den MySQL-Server von der Kommandozeile aus mit dem RESTART-Befehl neu zu starten. Dadurch wird der geänderte Wert von innodb_log_file_size wirksam.
Hinweis: Der RESTART-Befehl funktioniert nur, wenn MySQL mit externen Programmen wie systemd oder mysqld_safe verwaltet wird. Weitere Einzelheiten hierzu finden Sie hier.
Andernfalls schlägt der RESTART-Befehl mit einer Meldung wie der folgenden fehl.
mysql> RESTART; ERROR 3707 (HY000): Restart server failed (mysqld is not managed by supervisor process).
MySQL-Konfigurationsverwaltung über mehrere Server hinweg
Das Verwalten der MySQL-Konfiguration in Quellreplikatumgebungen ist ein mühsamer Prozess, wenn Sie mehrere Cluster verwalten müssen, auf denen unterschiedliche MySQL-Versionen ausgeführt werden. Hier wäre eine verwaltete Lösung wie ScaleGrid von Vorteil.
Die ScaleGrid-UI-Konsole kann verwendet werden, um die aktuellen Einstellungen verschiedener Konfigurationsvariablen zu überprüfen oder ihre Werte festzulegen.
ScaleGrid kann erkennen, wenn eine Konfigurationseinstellung nicht dynamisch ist, und warnt den Benutzer, wenn ein MySQL-Neustart erforderlich ist, damit der Wert wirksam wird. ScaleGrid erstellt außerdem eine Sicherungskopie der aktuellen my.cnf-Datei, bevor neue Konfigurationsänderungen angewendet werden.
In Umgebungen mit Quellreplikaten ändert ScaleGrid die Konfigurationseinstellungen rollierend für einen Server nach dem anderen. Wenn eine nicht dynamische Variable gesetzt werden muss, führt ScaleGrid ein Failover des aktuellen Masters durch, um die damit verbundene Ausfallzeit zu minimieren, wenn MySQL anderweitig neu gestartet werden muss.
Besuchen Sie den Link unten, um mehr über die verschiedenen Funktionen der ScaleGrid-MySQL-Hosting-Lösung zu erfahren.