MySQL: database error Disk full и purge binary logs

Автор: | 23/03/2018

Упал блог, в логах NGINX видна ошибка:

2018/03/19 13:17:11 [error] 5992#5992: *3105079 FastCGI sent in stderr: “PHP message: WordPress database error Disk full (/tmp/#sql_7348_0.MAI); waiting for someone to free some space… (errno: 28 “No space left on device”)

ОК, идём на сервер баз данных, проверяем место:

[simterm]

root@ip-172-31-64-60:/home/admin# du -sh /var/log/
4.0G /var/log/

[/simterm]

А на диске всего 7.8 GB:

[simterm]

root@ip-172-31-64-60:/home/admin# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda2      7.8G  7.4G     0 100% /

[/simterm]

Проверяем бинлоги MariaDB:

[simterm]

root@ip-172-31-64-60:/home/admin# ls -lh /var/log/mysql
total 4.0G
-rw-rw---- 1 mysql adm  348 Dec 21 00:20 mariadb-bin.000279
-rw-rw---- 1 mysql adm 101M Mar 17 12:58 mariadb-bin.000728
-rw-rw---- 1 mysql adm 101M Mar 17 14:21 mariadb-bin.000729
-rw-rw---- 1 mysql adm 101M Mar 17 15:50 mariadb-bin.000730
...

[/simterm]

Удалим всё вплоть до “mariadb-bin.000766“, заходим в консоль MariaDB, выполняем purge binary logs:

[simterm]

MariaDB [(none)]> purge binary logs to 'mariadb-bin.000765';
Query OK, 0 rows affected, 3 warnings (11 min 0.08 sec)

[/simterm]

Выполнялась 11 минут, проверяем:

[simterm]

MariaDB [(none)]> \! ls -lh /var/log/mysql
total 405M
-rw-rw---- 1 mysql adm  348 Dec 21 00:20 mariadb-bin.000279
-rw-rw---- 1 mysql adm 101M Mar 19 11:01 mariadb-bin.000765
-rw-rw---- 1 mysql adm 101M Mar 19 11:51 mariadb-bin.000766
-rw-rw---- 1 mysql adm 101M Mar 19 12:33 mariadb-bin.000767
-rw-rw---- 1 mysql adm 101M Mar 19 13:39 mariadb-bin.000768
-rw-rw---- 1 mysql adm 4.7M Mar 19 13:40 mariadb-bin.000769
-rw-rw---- 1 mysql adm  170 Mar 19 13:39 mariadb-bin.index
-rw-r--r-- 1 mysql adm    0 Dec 21 00:07 mariadb-main.log
-rw-r--r-- 1 mysql adm 3.1K Mar 19 02:00 mysql_all_dbs_backups_to_s3.log

[/simterm]

400 метров занято теперь.

Для ротации логов – в /etc/mysql/my.cnf в блоке [mysqld] должно быть указание на размер файла лога и сколько дней хранить логи:

[simterm]

root@ip-172-31-64-60:/home/admin# cat /etc/mysql/my.cnf | grep 'expire_logs_days\|max_binlog_size'
expire_logs_days        = 2
max_binlog_size         = 100M

[/simterm]

Наверно много писал, много обновлений в базе было – вот и накопилось бинлогов за два дня на 4 гига. Хотя RTFM не единственный мой ресурс, кто пользует этот сервер БД.

Готово.