Размещено: 2024-04-18 13:55:25
Теги: настройки сервера, mysql
ЧТО ДЕЛАТЬ ЕСЛИ ЛОГИ BINLOG В MYSQL СТАЛИ ВЕСИТЬ СЛИШКОМ МНОГО
В один момент заметил, что свободное место на сервере начало уменьшаться.
В первую очередь следует найти директорию которая занимает больше всего места на диске. Зайдите на сервер по SSH и выполните команду, показывающую размер папок, для этого воспользуемся утилитой du.
Утилита du (от англ. disk usage) присутствует во всех UNIX-дистрибутивах по умолчанию и позволяет получить общую информацию о занятом месте.
При выполнении команды она выводит объем пространства, занимаемого каждым файлом и каталогом в текущем каталоге.
Для вывода занятого объема в читаемом виде (в килобайтах, мегабайтах и т.д.) требуется ключ -h, мы будем использовать его во всех командах ниже.
Например, можно начать с оценки размера всех директорий в корневой файловой системе. Для этого добавим ключи -s (для вывода итогового размера указанной директории) и -c (для вывода «итого»):
du -shc /*
В моем случае директория /var/lib/mysql весила крайне много. Я увидел, что имеется огромное количество файлов логов MySQL.
Такая причина может кроется в том, что у меня не было настроено время хранения логов, это можно узнать следующим образом.
- Зайдите в mysql
mysql -uroot -p'password'
- Выполните команду
show variables like 'binlog_expire_logs_seconds';
- Чтобы добавить время жизни логов допустим 3 дня (3х24х60х60=259200), используйте следующую команду:
set global binlog_expire_logs_seconds=259200;
- Чтобы их очистить следует ввести команду, где время и дата старше которой удалить:
PURGE BINARY LOGS BEFORE '2024-04-15 00:00:00';
либо так:
PURGE BINARY LOGS BEFORE DATE(NOW() - INTERVAL 3 DAY) + INTERVAL 0 SECOND
- После чего выйдите из 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