Dieser Artikel beschreibt, was zu tun ist, wenn Sie MySQL verwenden und Ihre Festplatte aufgrund von Binärprotokollen leer ist.
Der von MySQL verwendete Datenbereich war erschöpft, die Festplattennutzung wurde zu 100% und MySQL konnte nicht gestartet werden.
Nach Untersuchung der Ursache wurde bestätigt, dass eine große Anzahl von 1.1G-Binärprotokollen in das Verzeichnis unter "/ data / mysql /" ausgegeben wurde, das als Datenbereich verwendet wurde.
Ich möchte das Binärprotokoll "puge" und löschen, kann mich aber nicht einmal bei mysql anmelden, da ich MySQL auch nicht starten kann. Wir werden die vorläufige und dauerhafte Unterstützung für solche Fälle beschreiben.
Löschen Sie zuerst das älteste binäre Protokoll mit dem Befehl rm und führen Sie den Befehl df
aus, um zu bestätigen, dass der freie Speicherplatz gesichert wurde.
# rm /data/mysql/binlog.000169
/dev/sdb1 50G 49G 1.1G 98% /data
Dann starten Sie MySQL. Bestätigen Sie, dass es normal gestartet wurde, und melden Sie sich bei MySQL an.
# systemctl start mysql
# systemctl status mysql
# mysql -u root -p
Führen Sie den folgenden Befehl aus, um den Status des Binärprotokolls zu überprüfen.
--Nächstes binäres Protokoll
mysql> SHOW MASTER STATUS\g;
+---------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000215 | 155 | | | |
+---------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
mysql> SHOW MASTER LOGS;
+---------------+------------+-----------+
| Log_name | File_size | Encrypted |
+---------------+------------+-----------+
| binlog.000170 | 1073742751 | No |
| binlog.000171 | 1073751257 | No |
| binlog.000172 | 1073757631 | No |
| binlog.000173 | 1073755121 | No |
| binlog.000174 | 1073752838 | No |
| binlog.000175 | 1073743951 | No |
| binlog.000176 | 1073748347 | No |
| binlog.000177 | 1073751179 | No |
| binlog.000178 | 1073763386 | No |
| binlog.000179 | 1073765359 | No |
| binlog.000180 | 1073745938 | No |
| binlog.000181 | 1073763697 | No |
| binlog.000182 | 1073744490 | No |
| binlog.000183 | 1073761859 | No |
| binlog.000184 | 1073775954 | No |
| binlog.000185 | 1073757908 | No |
| binlog.000186 | 1073773373 | No |
| binlog.000187 | 1073755666 | No |
| binlog.000188 | 1073743518 | No |
| binlog.000189 | 1073782889 | No |
| binlog.000190 | 1073756995 | No |
| binlog.000191 | 1073770640 | No |
| binlog.000192 | 1073743582 | No |
| binlog.000193 | 1073757032 | No |
| binlog.000194 | 1073754014 | No |
| binlog.000195 | 1073757718 | No |
| binlog.000196 | 1073746065 | No |
| binlog.000197 | 1073745350 | No |
| binlog.000198 | 1073751875 | No |
| binlog.000199 | 1073745702 | No |
| binlog.000200 | 1073754484 | No |
| binlog.000201 | 1073762857 | No |
| binlog.000202 | 1073761196 | No |
| binlog.000203 | 1073755084 | No |
| binlog.000204 | 1073836164 | No |
| binlog.000205 | 1073745617 | No |
| binlog.000206 | 1073753921 | No |
| binlog.000207 | 1073771413 | No |
| binlog.000208 | 1073764906 | No |
| binlog.000209 | 1073767754 | No |
| binlog.000210 | 1073781899 | No |
| binlog.000211 | 1073744615 | No |
| binlog.000212 | 1073744221 | No |
| binlog.000213 | 1073770872 | No |
| binlog.000214 | 323286661 | No |
| binlog.000215 | 398814 | No |
| binlog.000216 | 896660 | No |
+---------------+------------+-----------+
47 rows in set (0.03 sec)
Löschen Sie unnötige Binärprotokolle, die als temporäre Maßnahme gesammelt wurden. um die Datei vor dem angegebenen Binlog zu löschen.
mysql> PURGE MASTER LOGS TO 'binlog.000212';
Query OK, 0 rows affected, 1 warning (0.00 sec)
Führen Sie den Befehl df
erneut aus und bestätigen Sie, dass die Festplattennutzung abgenommen hat.
/dev/sdb1 50G 4.0G 46G 8% /data
Die direkte Ursache des Ereignisses liegt in MySQL Spezifikationen mit den Standardeinstellungen des Binärprotokolls. Binäre Protokolle sammelten sich weiter an, da die Ausgabe gültig war.
In früheren Versionen von MySQL war die binäre Protokollierung standardmäßig deaktiviert und aktiviert, wenn Sie die Option --log-bin angegeben haben. Ab MySQL 8.0 ist die binäre Protokollierung standardmäßig aktiviert, unabhängig davon, ob Sie die Option --log-bin angeben.
Stellen Sie die Protokollrotation als permanente Antwort ein und ändern Sie die Einstellung, damit keine binären Protokolle akkumuliert werden. Starten Sie MySQL nach dem Ändern der Einstellungen neu.
# vi /etc/mysql/mysql.conf.d/mysqld.cnf
# binlog rotation
expire_logs_days = 7
In diesem Fall erfolgt die Protokollrotation in 7 Tagen.
Die Hauptursache ist eine unzureichende Berücksichtigung zum Zeitpunkt des Entwurfs.
Recommended Posts