Размещено: 2024-04-18 13:55:25

Теги: настройки сервера, mysql

ЧТО ДЕЛАТЬ ЕСЛИ ЛОГИ BINLOG В MYSQL СТАЛИ ВЕСИТЬ СЛИШКОМ МНОГО

В один момент заметил, что свободное место на сервере начало уменьшаться.

В первую очередь следует найти директорию которая занимает больше всего места на диске. Зайдите на сервер по SSH и выполните команду, показывающую размер папок, для этого воспользуемся утилитой du.

Утилита du (от англ. disk usage) присутствует во всех UNIX-дистрибутивах по умолчанию и позволяет получить общую информацию о занятом месте.

При выполнении команды она выводит объем пространства, занимаемого каждым файлом и каталогом в текущем каталоге.

Для вывода занятого объема в читаемом виде (в килобайтах, мегабайтах и т.д.) требуется ключ -h, мы будем использовать его во всех командах ниже.

Например, можно начать с оценки размера всех директорий в корневой файловой системе. Для этого добавим ключи -s (для вывода итогового размера указанной директории) и -c (для вывода «итого»):

du -shc /*

В моем случае директория /var/lib/mysql весила крайне много. Я увидел, что имеется огромное количество файлов логов MySQL.

Такая причина может кроется в том, что у меня не было настроено время хранения логов, это можно узнать следующим образом.

  1. Зайдите в mysql
mysql -uroot -p'password'
  1. Выполните команду
show variables like 'binlog_expire_logs_seconds';
  1. Чтобы добавить время жизни логов допустим 3 дня (3х24х60х60=259200), используйте следующую команду:
set global binlog_expire_logs_seconds=259200;
  1. Чтобы их очистить следует ввести команду, где время и дата старше которой удалить:
PURGE BINARY LOGS BEFORE '2024-04-15 00:00:00';

либо так:

PURGE BINARY LOGS BEFORE DATE(NOW() - INTERVAL 3 DAY) + INTERVAL 0 SECOND
  1. После чего выйдите из mysql с помощью команды exit

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

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
Зайти в секцию [mysqld]:

binlog_expire_logs_seconds      = 2592000
max_binlog_size   = 200M
Или в этом же файле можно отключить binlog вовсе:

disable_log_bin

Если вы все сделали, то не забудьте перезагрузить движок MySQL:

systemctl restart mysql

Очистка бинлогов на php

Для очистки можно так же написать простой файлик на php, который будет запускаться кроном и чистить бинлоги, если вдруг ничего не получилось с настройкой времени их хранения

<?php

//очистка бинлогов
#/opt/php53/bin/php /binlog_clear.php

$link=mysql_connect('localhost','root','password');
mysql_query(" PURGE BINARY LOGS BEFORE DATE(NOW() - INTERVAL 3 DAY) + INTERVAL 0 SECOND ");
mysql_close($link);

На эту страницу чаще всего попадают по запросам: linux, размер папок, размер папки, binlog