Видалення застарілих бінарних логів MySQL

Тим, хто хоч раз мав справу з реплікацією даних з одного MySQL сервера на інший по будь-якому відомо поняття бінарних логів. Саме вони передаються на SLAVE сервер для синхронізації даних. Але потрібні вони не лише для цього. Вони дуже допомагають при збої сервера та раптовому його перезавантаженні, тоді по бінарних логах MySQL може відновити ті дані, які не встигли потрапити до харнилища. Не дивно, що вони включені за умовчанням скрізь, скрізь. Але найчастіше функція їхнього автоматичного видалення не налаштована взагалі. В результаті при інтенсивному користуванні MySQL сервера ви можете зіткнутися з проблемою нестачі місця на диску.

Логічно, що дуже давні логи змила зберігати ні, оскільки за статистикою вони вже давно занесені до сховища та передані на SLAVE сервери для реплікції. Тому є сенс сказати MySQL серверу, що старі логи таки треба пиляти. Це відповідає конфігураційний параметр expire_logs_days в серкції [mysqld] конфігураційного файлу my.cnf.

Тепер після перезапуску MySQL сервер вже буде знати який давнину логи вже варто видаляти (у наведеному прикладі період давнини становить 14 днів). Щоб не чекати, коли він перезапуститься, можна просто подати запит до сервера за допомогою phpMyAdmin або консольної програми mysql.

На налаштування MySQL може відреагувати не відразу. Тому якщо Ви кудись поспішайте, можна зробити ручне зачищення логів до певного часу, використовуючи такий запит:

У запиті вказується дата-час (у форматі datetime) до якого потрібно випилити логи. Якщо ліг накопичилося багато, то й місця можна звільнити багато (я собі звільнив близько 3 ГБ, що для розділу в 10 ГБ дуже суттєво).

На завершення скажу, що не варто захоплюватися цим на production сервері, а то мало. Івзагалі потрібно щодня бекапи робити:).