MySQL Binlog - содержит "события", описывающие изменения в базе данных, такие как операции создания таблицы или изменения данных таблицы. Он также содержит события для операторов, которые потенциально могли бы внести изменения (например, DELETE, который не сопоставил ни одной строки), если не используется протоколирование на основе строк. Двоичный журнал также содержит информацию о том, сколько времени занял каждый оператор, который обновил данные.
Binlog имеет два важных назначения:
- При репликации журнал на первичном сервере репликации обеспечивает запись изменений данных, которые должны быть отправлены на вторичные серверы. Первичный сервер отправляет события, содержащиеся в его двоичном журнале, на вторичные серверы, которые выполняют эти события для внесения тех же изменений данных, которые были сделаны на первичном сервере.
- Некоторые операции по восстановлению данных требуют использования Binlog. После восстановления резервной копии повторно выполняются события в Binlog, которые были записаны после создания резервной копии. Эти события приводят базы данных в актуальное состояние с момента создания резервной копии.
Не рекомендуется удалять файлы журналов вручную с диска.
При этом binlog могут занимать значительное место на диске
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | ls -l -h /var/lib/mysql total 13G -rw-r----- 1 mysql mysql 1.1G Feb 21 14:02 binlog.000024 -rw-r----- 1 mysql mysql 1.1G Feb 26 00:25 binlog.000025 -rw-r----- 1 mysql mysql 1.1G Mar 3 07:44 binlog.000026 -rw-r----- 1 mysql mysql 75M Mar 3 14:46 binlog.000027 -rw-r----- 1 mysql mysql 156 Mar 3 14:48 binlog.000028 -rw-r----- 1 mysql mysql 82M Mar 4 03:41 binlog.000029 -rw-r----- 1 mysql mysql 896M Mar 5 23:02 binlog.000030 -rw-r----- 1 mysql mysql 56M Mar 6 03:34 binlog.000031 -rw-r----- 1 mysql mysql 701M Mar 8 08:36 binlog.000032 -rw-r----- 1 mysql mysql 417M Mar 9 03:14 binlog.000033 -rw-r----- 1 mysql mysql 1.1G Mar 12 18:15 binlog.000034 -rw-r----- 1 mysql mysql 1.1G Mar 13 15:20 binlog.000035 -rw-r----- 1 mysql mysql 1.1G Mar 13 15:28 binlog.000036 -rw-r----- 1 mysql mysql 1.1G Mar 13 15:46 binlog.000037 -rw-r----- 1 mysql mysql 1.1G Mar 14 17:30 binlog.000038 -rw-r----- 1 mysql mysql 392M Mar 16 06:17 binlog.000039 -rw-r----- 1 mysql mysql 267M Mar 17 03:20 binlog.000040 -rw-r----- 1 mysql mysql 1.1G Mar 21 11:12 binlog.000041 -rw-r----- 1 mysql mysql 812M Mar 25 10:59 binlog.000042 |
Для настройки автоматического удаления устаревших журналов, открываем на редактирование файл конфигурации
1 | nano /etc/my.cnf.d/mysql-server.cnf |
и в секцию [mysqld] добавляем параметр
1 | expire_logs_days = <days> |
К примеру, настраиваем удаление журналов через 3 дня
1 | expire_logs_days = 3 |
и перезапускаем MySQL
1 | systemctl restart mysqld |