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/log
und räumen Sie es auf. Ich würde etwas wie (alle gz
Dateien 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
. /var
Ist es jedoch nicht /home
. /home
Wird also nicht verwendet. Auch einfach.
Sie hätten /var
beim 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.cnf
und ä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 -ak
fasst die Festplattennutzung aller ( -a
) Dateien in der /var
Partition zusammen und druckt die Größe in Kilobyte ( -k
) aus.
sort -nr
Verkettet die Liste der Dateien und sortiert sie in umgekehrter ( -r
) numerischer ( -n
) Reihenfolge.
less
Die 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:
- Verschieben Sie MySQL-Daten in die /home-Partition, wie von @John WH Smith beschrieben.
- Ändern Sie die Datadir-Variable wie von @John WH Smith beschrieben und führen Sie den MySQL-Server aus.
- Stellen Sie über einen PMA, einen MySQL- oder einen anderen Client als Root-Benutzer eine Verbindung zum MySQL-Server her.
- Bereinigen Sie Binärprotokolle mit den Befehlen RESET MASTER oder PURGE BINARY LOGS TO (Einzelheiten finden Sie in der MySQL-Dokumentation).
- 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.
- Verschieben Sie alle Binlog-Dateien einschließlich eines Binlog-Index in das Verzeichnis /home/mysql/.
- Ändern Sie den Wert der Variablen „log_bin“ in „log_bin = /home/mysql/mysql-bin.log“ und starten Sie dann die MySQL-Datenbank.