Wenn Du einen mysqldump im Speicher zippen möchtest, zum Beispiel weil er unkomprimiert zu groß ist, dann kannst Du Dich des folgenden einfachen Tricks bedienen:

Mein Problemszenario ist folgendes:

  • Zabbix-Server hat eine 34 GB große db.
  • jede Nacht wird per cron ein unkomprimierter dump der Zabbix-db mit dem Befehl mysqldump erzeugt.
    Die Platte gerät dabei in akute Atemnot und Zabbix meldet ein Problem, weil die Platte über 90% Füllstand gerät.
  • kurz darauf kommt logrotate vorbei und zippt den dump.
    Zabbix erkennt das und schickt ein OK, weil der Füllstand der Platte wieder unter 90% gesunken ist.

Um zu vermeiden, dass der Plattenfüllstand so schwankt und dass die täglichen Alarme kommen, habe ich den mysqldump-Befehl einfach durch ´ne Pipe gejagt. Dabei wird der Dump sofort gezippt. Das erzeugt zwar temporär hohe CPU-Auslastung durch das Komprimieren, führt aber (noch) nicht zu neuen Zabbix-Alarmen :-).

Hier zur allgemeinen Belustigung ein Screenshot des Zabbix-Graphen, der die Auslastung der Platte wiederspiegelt:

Zabbix mysqldump disk
Zabbix mysqldump disk
Die alte mysqldump Syntax war:
/usr/bin/mysqldump --all-databases -u root --password="RootPWHierRein" > /pfad/zum/Speicherort/all_databases.sql

Die neue mysqldump Syntax sieht wie folgt aus:
/usr/bin/mysqldump --all-databases -u root --password="RootPWHierRein"  | gzip  > /pfad/zum/Speicherort/all_databases.sql.gz

Es gäbe auch die Möglichkeit, eine andere Kompression einzusetzen, wie zum Beispiel bzip2 . Allerdings habe ich mich von Quellen im Internet davon überzeugen lassen, dass bzip2 5-6 mal so lange zum Komprimieren benötigt, dafür aber in meinem Fall nur eine Verkleinerung der Dateigröße um 20% erzielt. Der Befehl wird aber automatisiert per cron aufgerufen und soll schnellstmöglich durchlaufen und möglichst wenig CPU verbrauchen, um bestimmt keine Zabbix Trigger auszulösen!

Die Änderung in logrotate:

Die Änderung muss ich natürlich auch in logrotate vorhalten, jetzt um den gzip-Teil erleichtert:

logrotate mysqldump
mein logrotate mysqldump

Ob die logrotate Änderung funktioniert, teilt mir der folgende Befehl mit (f für force):

logrotate -f /etc/logrotate.d/mysqldump

dabei werden die mit dem geänderten Befehl zum Dump der mysql erzeugten Files mit dem Muster *.sql.gz zwangsweise rotiert.

Mit dieser simplen Vorgehensweise konnte das teilweise ernste (Platte könnte volllaufen!) und teilweise lästige Problem elegant und effektiv aus der Welt geschafft werden.

 

1 Stern2 Sterne3 Sterne4 Sterne5 Sterne (7 Bewertungen, Durchschnitt: 4,71 von 5)
Loading...

 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

sieben − sieben =