Бинарные логи (binlog) MySQL записывают каждое изменение данных. Это позволяет «проиграть» изменения от момента бэкапа до нужной секунды — Point-in-Time Recovery (PITR).
# Включаем бинарные логи в my.cnf
[mysqld]
log-bin = /var/log/mysql/mysql-bin
binlog_format = ROW # Записывать изменённые строки, не SQL
binlog_row_image = FULL # Полные образы строк (до и после)
expire_logs_days = 14 # Хранить бинлоги 14 дней
max_binlog_size = 256M # Ротация файла при достижении 256 МБ
sync_binlog = 1 # Синхронная запись на диск
gtid_mode = ON # Глобальные ID транзакций
enforce_gtid_consistency = ON
# Проверяем текущие бинлоги
mysql -e "SHOW BINARY LOGS;"
# +------------------+-----------+
# | Log_name | File_size |
# +------------------+-----------+
# | mysql-bin.000042 | 256000000 |
# | mysql-bin.000043 | 134217728 |
# +------------------+-----------+
Сценарий восстановления: разработчик выполнил деструктивный UPDATE 5 апреля в 14:32:15. Бэкап сделан ночью в 03:00. Нам нужно восстановить базу до 14:32:14 — за секунду до ошибки.
# Шаг 1: Восстанавливаем из ночного бэкапа XtraBackup
xtrabackup --prepare --target-dir=/backup/full/2026-04-05
xtrabackup --copy-back --target-dir=/backup/full/2026-04-05
# Шаг 2: Находим позицию бинлога на момент бэкапа
cat /backup/full/2026-04-05/xtrabackup_binlog_info
# mysql-bin.000042 156732890 uuid:1-58432
# Шаг 3: Применяем бинлоги до момента перед ошибкой
mysqlbinlog \
--start-position=156732890 \
--stop-datetime="2026-04-05 14:32:14" \
/var/log/mysql/mysql-bin.000042 \
/var/log/mysql/mysql-bin.000043 \
| mysql
# Результат: база восстановлена до состояния
# на 14:32:14 — за секунду до ошибки
Бинарные логи на SSD-накопителе при нагрузке «ШопРу» генерируют 5-15 ГБ в день. Мы настроили их копирование на отдельный сервер каждые 5 минут, обеспечивая RPO = 5 минут:
# /usr/local/bin/backup-binlogs.sh
#!/bin/bash
rsync -avz --progress \
/var/log/mysql/mysql-bin.* \
backup-server:/backup/binlogs/shopru/
# Cron: каждые 5 минут
*/5 * * * * /usr/local/bin/backup-binlogs.sh >> /var/log/binlog-backup.log 2>&1
Оставить комментарий