Εάν ξαφνικά το site σας δεν μπορεί να συνδεθεί με τη βάση δεδομένων, υπάρχει ενδεχόμενο αυτό να οφείλεται στην έλλειψη διαθέσιμου χώρου στον server εξαιτίας του οποίου, το service MySQL δε μπορεί να ξεκινήσει.
Αφού συνδεθούμε στον σέρβερ, ελέγχουμε την κατάσταση της MySQL με την εντολή:
1 |
sudo service mysql status |
Θα δούμε ότι είναι «Inactive».
Στη συνέχεια, ελέγχουμε το διαθέσιμο χώρο με την εντολή:
1 |
df -H |
Η εντολή θα επιστρέψει κάτι σαν το παρακάτω:
1 2 3 4 5 |
Filesystem Size Used Avail Use% Mounted on /dev/root 26G 25G 12M 100% / devtmpfs 498M 0 498M 0% /dev tmpfs 503M 7.0M 496M 2% /run tmpfs 5.3M 0 5.3M 0% /run/lock |
Βλέπουμε ότι στον server έχουν μείνει διαθέσιμα 12Mb και ότι χρησιμοποιείται το 100% του χώρου. Θα πρέπει να διαγράψουμε αρχεία από τον server που δε χρειαζόμαστε. Αν δε μπορούμε άμεσα να σβήσουμε αρχεία στον σέρβερ, μία καλή λύση είναι να ελέγξουμε το χώρο που καταλαμβάνουν τα logs και να τα διαγράψουμε.
Αφού κάνουμε sudo su, ελέγχουμε το χώρο που καταλαμβάνουν τα logs με την εντολή:
1 |
du -hs /var/log |
Θα δούμε ότι τα logs, μπορεί να φτάσουν να καταλαμβάνουν αρκετά gigabyte του δίσκου!
Για να βρούμε ποια logs έχουν μέγεθος πάνω από π.χ. 200MB, χρησιμοποιούμε την παρακάτω εντολή:
1 |
find /var/log -type f -size +200M |
Αν υπάρχουν αρχεία με μέγεθος πάνω από 200MB τότε θα εμφανιστούν σε μία λίστα ως εξής:
1 2 3 4 5 |
/var/log/kern.log /var/log/mysql/error.log /var/log/ufw.log /var/log/apache2/example.com/access.log /var/log/apache2/example.com/error.log |
Εφόσον είστε απόλυτα σίγουροι ότι οι πληροφορίες μέσα στα logs δε σας χρειάζονται, μπορείτε να τα «αδειάσετε» με την εντολή:
1 |
> /var/log/apache2/example.com/access.log |
Το >
δε διαγράφει το αρχείο αλλά διαγράφει τα περιεχόμενά του.
Μπορείτε να συνεχίσετε την ίδια διαδικασία με μικρότερα αρχεία, π.χ. 50Mb
1 |
find /var/log -type f -size +50M |
Για να αποφύγετε στο μέλλον την εμφάνιση του προβλήματος, θα μπορούσατε να χρησιμοποιήσετε το logrotate ή να χρησιμοποιήσετε κάποιο script που θα σας στέλνει email όταν π.χ. το 90% του χώρου του σέρβερ χρησιμοποιείται.
Στη συνέχεια κάντε έναν έλεγχο για να δείτε πόσο χώρο καταλαμβάνουν τα journal logs του systemd
με την εντολή:
1 |
journalctl --disk-usage |
Θα εμφανιστεί ένα μήνυμα παρόμοιο με το εξής:
1 |
Archived and active journals take up 1.5G in the file system. |
Με την εντολή:
1 |
sudo journalctl --vacuum-time=2d |
θα διαγραφούν τα logs που είνα παλαιότερα από 2 ημέρες (2d
). Μπορείτε να αλλάξετε την τιμή αυτή σε άλλη της προτίμησής σας.
Κάνοντας έναν έλεγχο (πάλι με την εντολή journalctl --disk-usage
) θα δούμε ότι πλέον τα systemd journal logs καταλαμβάνουν πολύ λιγότερο χώρο:
1 |
Archived and active journals take up 248.0M in the file system. |
Στη συνέχεια μπορείτε να καθαρίστε την cache του apt
:
1 |
apt clean |
Τέλος, ελέγξτε τον διαθέσιμο χώρο στον server με dh -H
και κάντε εκκίνηση του mysql server με:
1 |
service mysql start |