Подготовка окружения

Для бэкапирования и восстановления БД MySQL должен быть установлен пакет artixcs-mysql-dump на тот же сервер, где располагается MySQL, для этого необходимо:

  1. Прописать репозиторий для подтягивания зависимого пакета percona-xtrabackup:

    Для MySQL 5
    cd /tmp
    wget https://repo.percona.com/apt/percona-release_latest.generic_all.deb
    sudo dpkg -i percona-release_latest.generic_all.deb
    sudo apt-get update
    sudo apt-get install percona-xtrabackup
    Для MySQL 8.0.31
    cd /tmp
    wget https://repo.percona.com/apt/percona-release_latest.generic_all.deb
    sudo dpkg -i percona-release_latest.generic_all.deb
    sudo percona-release enable-only pdps-8.0.31 release
    sudo percona-release setup -y pdps-8.0.31
    sudo apt install percona-xtrabackup-80

    При установке pdps должен иметь ту же версию, что и MySQL (актуально только для версий MySQL 8).

    Например, если установлена MySQL версии 8.0.26, то необходимо установить pdps версии 8.0.26.

    Узнать установленную версию MySQL можно с помощью команды:

    mysql --version
  2. Установить пакет artixcs-mysql-dump командой:

    sudo apt-get install artixcs-mysql-dump
  3. Настроить конфигурационный файл /opt/artixcs-mysql-dump/artixcs-mysql-dump.conf.

    НаименованиеТип данныхВозможные значенияОписаниеПримечания
    userстроковый
    Логин для подключения к mysql

    По умолчанию netroot

    passwdстроковый
    Пароль для подключения к mysqlПо умолчанию netroot
    backupDirстроковый
    Директория, в которой будут храниться бэкапы
    useCompressлогический
    • true
    • false
    Использовать ли архивирование для бэкапов

    При использовании архивирования данные занимают меньше места, но бэкапирование/восстановление выполняется дольше.

    По умолчанию true

    incrementalDaysчисловой
    Сколько дней делать инкрементальные бэкапы

    При первом запуске будет создан полный бэкап всех баз, а затем в течение указанного времени будут создаваться инкрементальные бэкапы.

    По истечении указанного времени будет заново создан полный бэкап, а затем повторно будут осуществляться инкрементальные бэкапы

    По умолчанию 10

    Пример настройки
    # Логин для подключения к mysql
    user=netroot
    
    # Пароль для подключения к mysql
    passwd=netroot
    
    # Директория, в которой будут храниться бэкапы
    # Пример: backupDir=/tmp/mysql_dump
    backupDir=
    
    # Использовать ли архивирование для бэкапов. При использовании архивирования данные занимают меньше места, но бэкапирование/восстановление выполняется дольше
    useCompress=true
    
    # Сколько дней делать инкрементальные бэкапы. При первом запуске будет создан полный бэкап всех баз. Затем в течение указанного времени будут делаться инкрементальные бэкапы.
    # По истечении указанного времени будет заново сделан полный бэкап и затем опять будут делаться инкрементальные бэкапы.
    incrementalDays=10

Бэкапирование БД MySQL

Для бэкапирования всех баз необходимо запустить скрипт:

sudo /opt/artixcs-mysql-dump/dump.sh

При бэкапировании percona-xtrabackup может выдать ошибку для MySQL версий 8.0.29 - 8.0.32:

"Found tables with row versions due to INSTANT ADD/DROP columns".

Чтобы продолжать создавать бэкапы, необходимо:

  • Для всех таблиц, перечисленных в описании ошибки, выполнить одну из команд:

    OPTIMIZE TABLE
    ALTER TABLE ALGORITHM=COPY

    или

  • Выполнить оптимизацию всех баз данных командой:

    mysqlcheck -u netroot -p --auto-repair --optimize --all-databases

    (netroot – имя пользователя MySQL).

Процесс оптимизации может занять длительное время и потребует дополнительного пространства на диске на время выполнения (некоторые таблицы будут копироваться), в некоторых случаях может произойти блокировка таблицы до завершения её оптимизации.

Необходимо тщательно подбирать время для бэкапирования и оптимизации.
Запуск бэкапирования можно добавить в cron.

Бэкапы сохраняются в директорию $backupDir.

Восстановление БД MySQL

Для восстановления бэкапа необходимо запустить скрипт:

sudo /opt/artixcs-mysql-dump/restore.sh
  • No labels