- Вопрос или проблема
- Ответ или решение
- Как очистить журналы Linux и освободить место на диске
- 1. Исследование дискового пространства
- 2. Выявление больших файлов
- 3. Очистка журналов MySQL
- 4. Обработка медленных запросов
- 5. Использование logrotate
- 6. Использование утилит для анализа дискового пространства
- Заключение
Вопрос или проблема
Диск почти полон, как исследовать, какие файлы занимают больше всего места?
ИЗМЕНЕНИЕ
Я нашел, что больше всего места занимает mysql bin log:
/var/lib/mysql/jiaoyou-slow.log: 53M
/var/lib/mysql/mysql-bin.000005: 68M
/var/lib/mysql/mysql-bin.000003: 1.1G
/var/lib/mysql/mysql-bin.000007: 34M
/var/lib/mysql/mysql-bin.000004: 225M
Безопасно ли удалять эти файлы?
Что-то вроде этого должно помочь вам:
find / -type f -size +20000k -exec ls -lh {} \; | awk '{ print $9 ": " $5 }'
Это ищет любой файл в /
(корень), который в основном превышает 20 МБ по размеру. Возможно, вам потребуется настроить переменные $9/$5, но в большинстве случаев это не обязательно. Я также рекомендую изменить /
на /var/log/
, если вы просто хотите просмотреть вашу стандартную папку логов.
Если вы используете графическую среду, вы можете использовать что-то вроде Disk Usage Analyser (или Baobab), который может создать красивую круговую диаграмму, как показано ниже:
(источник: marzocca.net)
Командная строка все еще является вашим лучшим оружием, но я нахожу это очень удобным. Есть некоторые альтернативы здесь.
Хорошая идея использовать logrotate(8) для сжатия и удаления старых логов, чтобы какой-то болтливый демон не заполнил весь диск.
ИЗМЕНЕНИЕ: Также большинство логов будет находиться в /var/log. Простая команда ls -lh покажет, какие из них становятся слишком большими.
Команда du
в командной строке скажет вам, какие директории/папки занимают больше всего места. Вы можете выяснить, где находятся самые большие файлы.
$ du -h /
Опция -h заставляет du выводить размеры в «читаемом формате»: Кб, Мб, Гб и так далее.
Если вы попробуете это как обычный пользователь, вы увидите сообщения об ошибках о директориях, к которым у вас нет разрешения для доступа.
Если вы сделаете это как root, ошибок не должно быть.
# du -h /
Пропустите вывод через sort -n
, чтобы последние строки показали самые большие директории (или используйте обратную сортировку и head).
# du -h | sort -n
Другой подход – использовать find
с параметрами, которые указывают «найти файлы больше определенного размера», но этот метод требует практики, чтобы его правильно использовать.
# find / -size +10M
выведет файлы больше 10Mbyte
Если у вас разумные разделы, вам следует искать большие файлы вне директории логов. Логи вряд ли являются вашей проблемой, они редко превышают 200 МиБ на среднем сервере.
Вам следует воздержаться от удаления логов, пока вы не уверены, что на самом деле делаете. Многие демоны реагируют довольно нестабильно, если их лог-файлы внезапно исчезают – последствия могут варьироваться от неработающих сервисов до невозможности перезапуска данного сервиса.
Вы можете быть в безопасности, если удалите файлы в /var/log/*, которые архивированы (например, заканчиваются на .gz). Тем не менее, я сомневаюсь, что это действительно решит вашу главную проблему (например, жесткий диск слишком полон)
Топ 25 директорий и/или файлов:
du -m / | sort -rn | head -25
Хорошо, я схитрил и посмотрел на DBA…. 🙂
https://dba.stackexchange.com/questions/41050/is-it-safe-to-delete-mysql-bin-files
(Два лучших ответа от ‘RolandoMySQLDBA’ и ‘Derek Downey’ являются актуальными и проницательными.)
Здесь есть два типа «лог-файлов», к сожалению. Один – это логи транзакций, применяемых к вашим базам данных MySQL. Эти файлы могут использоваться для синхронизации подчиненного MySQL с главным MySQL или восстановления базы данных. Как показывает наилучший ответ, на который ссылаются на странице выше, вам следует использовать только команды MySQL (или мета-инструменты, такие как Percona Toolkit), чтобы «очистить» эти логи.
Другой файл, ‘jaioyou-slow.log’, скорее всего, просто журнал медленных запросов, регистрирующий запросы, которые требуют больше времени для выполнения. Это лог-файл, наиболее похожий на типичный лог-файл *NIX, и, следовательно, может быть усечен, если это необходимо (хотя вы, очевидно, потеряете доступную в этом файле статистику производительности).
Вы можете использовать полезный инструмент, такой как ‘logrotate’, для управления этим (и только этим) файлом, или, в экстренной ситуации, просто сделать:
$ echo "" > /var/log/jaioyou-slow.log
Некоторые наблюдения:
- Ваша конфигурация mysql должна помещать журнал медленных запросов MySQL в более подходящее место для логов *NIX, например, /var/log/mysql/, а не в дерево /var/lib, чтобы избежать путаницы и, возможно, повысить производительность, если эти директории находятся на отдельных дисках.
- Вам нужно будет иметь какую-то автоматизацию для очистки бинарных логов из MySQL (или сторонних инструментов). Я не рекомендую просто удалять их с помощью команд операционной системы.
Ссылки:
Удобная консольная утилита для сбора статистики использования дискового пространства, по моему мнению, это ncdu
. Она доступна в репозиториях всех популярных ОС, и установка не должна вызвать никаких проблем. Пример запуска утилиты для сканирования всего пространства:
ncdu /
Вы можете использовать флаги:
-x
, чтобы не сканировать другие файловые системы-r
(только для чтения), чтобы не позволять удалять файлы из интерфейса
Больше флагов можно найти в выводе --help
и в страницах мануала.
Ответ или решение
Как очистить журналы Linux и освободить место на диске
Когда диск почти заполнен, важно не только уметь очистить журналы, но и правильно диагностировать, какие файлы занимают больше всего места. Этот процесс состоит из нескольких шагов:
1. Исследование дискового пространства
Первым делом вам необходимо выяснить, какие файлы занимают больше всего места. Для этого можно использовать команду du
(disk usage):
du -ah / | sort -rh | head -n 20
Эта команда выведет 20 крупнейших файлов и каталогов в доступном объеме. Чтобы просмотреть использование места в каталоге /var/log
, можно выполнить:
du -ah /var/log | sort -rh | head -n 20
С помощью -h
вы получите размеры в удобочитаемом формате, например, M (МБ) и G (ГБ).
2. Выявление больших файлов
Другим способом является использование команды find
, которая позволяет искать файлы больших размеров. Например:
find / -type f -size +100M
Эта команда покажет все файлы, которые превышают 100 МБ. Вы можете настроить размер по своему усмотрению.
3. Очистка журналов MySQL
Вы упомянули, что большая часть дискового пространства занимает бинарный журнал MySQL. Важно помнить, что удаление этих файлов напрямую с помощью команды удаления не рекомендуется. Для безопасного удаления бинарных журналов воспользуйтесь встроенной командой MySQL:
PURGE BINARY LOGS TO 'mysql-bin.000005';
Это удалит все бинарные журналы до указанного файла. Вы также можете использовать:
PURGE BINARY LOGS BEFORE NOW() - INTERVAL 1 DAY;
Чтобы удалить журналы старше одного дня.
4. Обработка медленных запросов
Что касается файла jiaoyou-slow.log
, представляющего собой журнал медленных запросов, его можно очищать, если это необходимо. Используйте следующую команду для его обнуления:
echo "" > /var/lib/mysql/jiaoyou-slow.log
Но имейте в виду, что это приведет к потере всех данных о медленных запросах.
5. Использование logrotate
Для автоматизации очистки и архивирования журналов рекомендуется использовать утилиту logrotate
. Она позволяет настроить правила для сжатия, удаления или перемещения старых журналов. Пример конфигурации для logrotate
:
/var/log/jiaoyou-slow.log {
daily
rotate 7
compress
missingok
notifempty
}
Этот конфиг будет каждый день архивировать и хранить 7 последних журналов, сжимая их для экономии места.
6. Использование утилит для анализа дискового пространства
Вы также можете использовать интерфейсные утилиты, такие как Disk Usage Analyzer или ncdu
, для анализа использования дискового пространства. Просто запустите ncdu
с корневого каталога:
ncdu /
Это позволяет быстро и удобно визуализировать, какие файлы и каталоги занимают больше всего места на вашем диске.
Заключение
Удаление журналов в Linux требует осторожности, так как это может повредить работу системных процессов. Использование правильных инструментов, таких как purge
в MySQL и logrotate
, а также периодическая проверка дискового пространства помогут поддерживать систему в хорошем состоянии. Всегда делайте резервные копии важных данных перед выполнением операций, связанных с удалением файлов.