mysqld startet nicht mehr, da die Festplatte voll ist

mysqld startet nicht mehr, da die Festplatte voll ist

Wie bereinige ich Protokolle oder finde die größten Dateien und reduziere den Speicherplatz? Außerdem verstehe ich nicht, dass in diesem kritischen Moment nicht einmal 1,7 T verwendet werden.

Mysqld läuft nicht, da es zu 99 % genutzt wird.

# df -h
Filesystem      Size  Used Avail Use% Mounted on
rootfs           20G   19G  279M  99% /
/dev/root        20G   19G  279M  99% /
devtmpfs         32G  268K   32G   1% /dev
/dev/md3        1.8T  196M  1.7T   1% /home
tmpfs            32G     0   32G   0% /dev/shm
/dev/root        20G   19G  279M  99% /var/named/chroot/etc/named
/dev/root        20G   19G  279M  99% /var/named/chroot/var/named
/dev/root        20G   19G  279M  99% /var/named/chroot/etc/named.conf
/dev/root        20G   19G  279M  99% /var/named/chroot/etc/named.rfc1912.zones
/dev/root        20G   19G  279M  99% /var/named/chroot/etc/rndc.key
/dev/root        20G   19G  279M  99% /var/named/chroot/usr/lib64/bind
/dev/root        20G   19G  279M  99% /var/named/chroot/etc/named.iscdlv.key
/dev/root        20G   19G  279M  99% /var/named/chroot/etc/named.root.key

Antwort1

MySQL-Daten sind in gespeichert /var/lib. In ist kein Platz mehr frei /var. MySQL startet nicht. Eigentlich ganz einfach. Schauen Sie sich das an /var/logund räumen Sie es auf. Ich würde etwas wie (alle gzDateien in löschen /var/log) empfehlen:

$ find /var/log -iname "*.gz" -delete

Natürlich möchten Sie vielleicht zuerst überprüfen, was gelöscht wird:

$ find /var/log -iname "*.gz"

1,7 TB sind zugewiesen /home. /varIst es jedoch nicht /home. /homeWird also nicht verwendet. Auch einfach.

Sie hätten /varbeim Einrichten Ihres Systems offensichtlich eine viel größere Partition erstellen sollen. Die beste Lösung, die mir einfällt, ist, das MySQL-Datenverzeichnis auf eine größere Partition zu verschieben ( /home):

$ mv /var/lib/mysql /home
$ ln -s /home/mysql /var/lib/mysql

Wenn Sie keinen Link verwenden möchten, sollten Sie MySQL so konfigurieren, dass das neue Datenverzeichnis verwendet wird, das in gespeichert ist /home. Bearbeiten /etc/mysql/my.cnfund ändern Sie Folgendes:

datadir = /var/lib/mysql

dazu:

datadir = /home/mysql

Da MySQL nun über freien Speicherplatz verfügt, sollte es problemlos starten. Wenn Sie jedoch eine so wichtige Datenbank hosten, sollten Sie Ihr Partitionsschema wirklich überdenken.

Möglicherweise möchten Sie auch den Inhalt Ihrer Protokolle untersuchen, da Anwendungen nicht so viel in diese Protokolle schreiben sollten, wenn alles gut läuft. Möglicherweise funktioniert irgendwo etwas nicht richtig.

Antwort2

Dies ist ein nützlicher Befehl, um die größten Dateien zu finden:

du -ak /var | sort -nr | less

Verwendung:

du -akfasst die Festplattennutzung aller ( -a) Dateien in der /varPartition zusammen und druckt die Größe in Kilobyte ( -k) aus.

sort -nrVerkettet die Liste der Dateien und sortiert sie in umgekehrter ( -r) numerischer ( -n) Reihenfolge.

lessDie Ausgabe wird paginiert, sodass Sie die größten Übeltäter oben sehen und in der Liste vor- und zurückblättern können.

Antwort3

Ich möchte darauf hinweisen, dass es auch ein Problem mit den binären MySQL-Protokollen und nicht mit den Datenbankdateien selbst sein könnte. Binärprotokolle werden in vielen Fällen standardmäßig im Verzeichnis /var/log/mysql abgelegt und verbrauchen tendenziell ein paar Mal mehr Speicherplatz als Datenbankdateien. Das liegt daran, dass Binärprotokolle alle SQL-Datenänderungsabfragen (UPDATEs, INSERTs usw.) speichern, um die Änderungen an den Datenbankdaten zu verfolgen. Binärprotokolle sollten nicht direkt mit dem Shell-RM-Befehl entfernt werden, sondern nur mit dem MySQL-Befehl auf einer laufenden Datenbank-Engine. Dazu muss der MySQL-Server aktiv sein. Ich denke, dass das Verschieben des Verzeichnisses /var/lib/mysql in die /home-Partition ausreichend Speicherplatz auf der /-Partition freigeben sollte, damit der MySQL-Server gestartet werden kann. Das Verfahren sollte also wie folgt aussehen:

  1. Verschieben Sie MySQL-Daten in die /home-Partition, wie von @John WH Smith beschrieben.
  2. Ändern Sie die Datadir-Variable wie von @John WH Smith beschrieben und führen Sie den MySQL-Server aus.
  3. Stellen Sie über einen PMA, einen MySQL- oder einen anderen Client als Root-Benutzer eine Verbindung zum MySQL-Server her.
  4. Bereinigen Sie Binärprotokolle mit den Befehlen RESET MASTER oder PURGE BINARY LOGS TO (Einzelheiten finden Sie in der MySQL-Dokumentation).
  5. Stoppen Sie den MySQL-Server. Bearbeiten Sie die MySQL-Konfigurationsdatei. Merken Sie sich den Wert der Variable „log_bin“. Sie enthält einen Pfad und einen Namen der binären Protokolldateien.
  6. Verschieben Sie alle Binlog-Dateien einschließlich eines Binlog-Index in das Verzeichnis /home/mysql/.
  7. Ändern Sie den Wert der Variablen „log_bin“ in „log_bin = /home/mysql/mysql-bin.log“ und starten Sie dann die MySQL-Datenbank.

verwandte Informationen