Горячий бэкап MySQL с Percona XtraBackup

MySQL / MariaDB · 19.04.2026
Горячий бэкап MySQL с Percona XtraBackup

Горячий бэкап MySQL с Percona XtraBackup

В отличие от mysqldump, Percona XtraBackup создаёт резервные копии InnoDB без блокировки таблиц и остановки сервера. Незаменим для баз данных от 10 ГБ.

Установка XtraBackup

# Для Ubuntu/Debian (MySQL 8.0)
wget https://repo.percona.com/apt/percona-release_latest.generic_all.deb
dpkg -i percona-release_latest.generic_all.deb
percona-release setup pdps-80
apt update && apt install percona-xtrabackup-80

Полный бэкап

# Создание полного бэкапа
xtrabackup --backup \
  --user=root \
  --password='YourPass' \
  --target-dir=/backup/full

# Подготовка бэкапа к восстановлению
xtrabackup --prepare --target-dir=/backup/full

Инкрементальный бэкап

# Инкрементальный бэкап на основе полного
xtrabackup --backup \
  --user=root \
  --password='YourPass' \
  --target-dir=/backup/inc1 \
  --incremental-basedir=/backup/full

# Подготовка: сначала базовый, потом инкрементальный
xtrabackup --prepare --apply-log-only --target-dir=/backup/full
xtrabackup --prepare --apply-log-only \
  --target-dir=/backup/full \
  --incremental-dir=/backup/inc1

# Финальная подготовка
xtrabackup --prepare --target-dir=/backup/full

Восстановление из бэкапа

# Остановить MySQL
systemctl stop mysql

# Очистить datadir
rm -rf /var/lib/mysql/*

# Скопировать данные
xtrabackup --copy-back --target-dir=/backup/full

# Установить права
chown -R mysql:mysql /var/lib/mysql

# Запустить MySQL
systemctl start mysql

Автоматизация через cron

#!/bin/bash
# /etc/cron.d/xtrabackup — каждое воскресенье полный, остальные дни инкремент
DATE=$(date +%Y%m%d)
BACKUP_DIR=/backup

if [ $(date +%u) -eq 7 ]; then
  # Полный бэкап
  xtrabackup --backup --user=root --password='Pass' \
    --target-dir=$BACKUP_DIR/full_$DATE
else
  # Инкрементальный
  LAST_FULL=$(ls -td $BACKUP_DIR/full_* | head -1)
  xtrabackup --backup --user=root --password='Pass' \
    --target-dir=$BACKUP_DIR/inc_$DATE \
    --incremental-basedir=$LAST_FULL
fi
Совет: Сжимайте бэкапы флагом --compress и шифруйте с --encrypt=AES256 перед передачей на удалённое хранилище.
← Назад в базу знаний Задать вопрос поддержке