Как очистить диск от binlogs в папке /var/lib/mysql ?

СУБД MySQL или MariaDB ведёт специальное логирование всех запросов к базам данных, которое пишется в файлы приведённые на скриншоте ниже.

binlogs

Как можно заметить их число и размер может отжирать приличное пространство на вашем диске, в моём случае это примерно 20Гб! Это случилось потому, что в MySQL 8 срок действия этого журнала изменений в базе по умолчанию составляет 30 дней.

Эти файлы играют важную роль и необходимы для правильной работы репликации данных или восстановления информации.

Если у вас не настроено никакой репликации ии никакое сторонне приложение не читает эти логи, не отслеживает их, то в принципе не вижу смысла отдавать дисковое пространство для этих файлов.

В моём случае моя СУБД используется просто для хранения данных разных сайтов — то есть ничего хитрого, поэтому я и задался вопросом удаления этих файлов.

Очистка логов самостоятельно (ручной вариант)

Первым делом нам нужно зайти в оболочку нашей СУБД, например, сделать это можно так:

mysql -u root -p

Если вы всё сделали правило, то непременно должны увидеть в консоли следующее:

консоль

Теперь введите в консоли следующую команду для просмотра бинарных логов:

SHOW BINARY LOGS;

Также можно воспользоваться командой-синонимом SHOW MASTER LOGS.

Я отключил ведение логов, поэтому в моём случае вывод такой:

You are not using binary logging

Вероятно, что в вашем случае будет отображаться тот самый список файлов из /var/lib/mysql

Пример вывода:

mysql> SHOW BINARY LOGS;
+---------------+-----------+-----------+
| Log_name      | File_size | Encrypted |
+---------------+-----------+-----------+
| binlog.000015 |    724935 |       Yes |
| binlog.000016 |    733481 |       Yes |
+---------------+-----------+-----------+

Официальная документация

Как очистить двоичные файлы до определённого?

Обратите внимание на их нумерацию, для того чтобы удалить файлы до определённого можно воспользоваться командой:

PURGE BINARY LOGS TO 'binlog.000015';

Изменить срок автоматической очистки с 30 дней (по умолчанию) на 3 дня.

Изменения можно внести через консоль. Мы будем менять binlog_expire_logs_seconds — отвечает за установку срока действия двоичного журнала в секундах. По истечении срока файлы логов будут автоматически удалены.

Срок действия двоичного журнала по умолчанию составляет 2592000 секунд = 30 дней. Соответственно, мы можем это изменить:

SET GLOBAL binlog_expire_logs_seconds = (60*60*24*3);
SET PERSIST binlog_expire_logs_seconds = (60*60*24*3);

Как проверить изменения?

Сделайте в консоли запрос:

SHOW VARIABLES LIKE '%expire_logs%';

Вы должны увидеть значение системной переменной binlog_expire_logs_seconds.

mysql> SHOW VARIABLES LIKE '%expire_logs%';
+-------------------------------+--------+
| Variable_name                 | Value  |
+-------------------------------+--------+
| binlog_expire_logs_auto_purge | ON     |
| binlog_expire_logs_seconds    | 259200 |
| expire_logs_days              | 0      |
+-------------------------------+--------+
3 rows in set (0.01 sec)

Можно установить новое значение сразу в секундах (выше мы делали это путём умножения сек*мин*часы*дни),а могли бы указать сразу числом.

Как совсем отключить логирование (binlog)?

Откройте в редакторе файл /etc/mysql/my.cnf

sudo nano /etc/mysql/my.cnf

и добавьте пару строчек:

[mysqld]
skip-log-bin

Чтобы изменения вступили в силу перезапустите MySQL сервер:

sudo service mysql restart

так же через этот файл можно ограничить размер файлов логов и задать автоматическую очистку (ограничение)

[mysqld]
binlog_expire_logs_seconds = 86400  # 1 day
max_binlog_size = 104857600         # 100M

P.S. не забывайте перезагружать сервер вашей СУБД

systemctl restart mysql или systemctl restart mariadb