====== Percona XtraBackup: Бэкап и создание отдельной базы ====== Не всегда восстановление базы данных происходит на новом сервере, как было описано в [[:db:backup_database_only|Percona XtraBackup базы или таблицы]]. Иногда необходимо развернуть копию базы данных на сервере, где уже есть несколько баз. Например, на тестовых серверах, где проходит разработка. Да и возможность создать просто копию базы данных под другим именем тоже иногда требуется. Xtrabackup позволяет и это сделать. Не забываем проверить, чтобы был установлен параметр **innodb_file_per_table** в настройка сервера баз данных. ===== На сервер-источнике ===== создаем какталог для бэкапирования mkdir -p /var/lib/mysql/xtradb запускаем бэкапирование базы данных: innobackupex --databases=sitedb /var/lib/mysql/xtradb делаем бэкапирование структуры БД без данных cd /var/lib/mysql/xtradb mysqldump --no-data --set-gtid-purged=off sitedb> sitedb_schema.sql генерируем команды для переноса табличного пространства cd /var/lib/mysql/xtradb mysql -ssre "select concat('ALTER TABLE ',TABLE_SCHEMA,'.',TABLE_NAME,' DISCARD TABLESPACE;') from information_schema.tables where TABLE_SCHEMA='sitedb';"> discard_tbs.sql mysql -ssre "select concat('ALTER TABLE ',TABLE_SCHEMA,'.',TABLE_NAME,' IMPORT TABLESPACE;') from information_schema.tables where TABLE_SCHEMA='sitedb';"> import_tbs.sql архивируем всю эту папку и переносим на сервер-назначение через scp. ===== На сервере-назначении ===== создаем какталог для разворота бэкапа mkdir -p /var/lib/mysql/backup разворачиваем из архива всё, что получили, в каталог /var/lib/mysql/backup\\ подготавливаем наш бэкап для работы innobackupex --apply-log --export /var/lib/mysql/backup/2022-07-21/ **далее самый важный пункт** обязательно проверяем, что вновь создаваемой базы не существует и каталог с ней пустой. на всякий случай удалем базу, а затем содаем новую и пустую cd /var/lib/mysql/backup mysql -e "drop database sitedb;" mysql -e "create database sitedb;" импортируем в неё схему cd /var/lib/mysql/backup mysql sitedb и тут же проверяем, что всё создалось cd /var/lib/mysql/backup mysql -e "show tables from sitedb;" работаем с табличным пространством cd /var/lib/mysql/backup mysql Начинаем копирование с бэкапа файлов для восстановления # копируем IBD cp /var/lib/mysql/backup/2022-07-21/sitedb/*.ibd /var/lib/mysql/sitedb/ # копируем CFG cp /var/lib/mysql/backup/2022-07-21/sitedb/*.cfg /var/lib/mysql/sitedb/ # исправлем пользователя chown -R mysql:mysql /var/lib/mysql/sitedb/ начинаем работать с табличным пространством, импортитуем его cd /var/lib/mysql/backup mysql проверяем логи, что всё в порядке less /var/log/mysql/mysql-error.log Всё, база данных восстановлена. ==== Как обычно, несколько уточнений из-за которых постоянно возникают частые проблемы. ==== если вы используете foreign_key, то перед DISCARD необходимо установить SET GLOBAL foreign_key_checks=0 если объем базы большой, и соединение постоянно рвется с " Can't connect to MySQL server " то необходимо установить max_allowed_packet=256M и перезапустить mysql