Довольно часто встречается ситуация когда MySQL разросся до размеров в десятки и сотни гигабайт, место для резервной копии на сервере уже нет, а нужно создать копию всех баз и переместить ее на удаленный сервер. Иногда встречается ситуация, когда нужно развернуть полную копию MySQL на другом сервере.
В данной статье я расскажу как при помощи Percona Xtrabackup можно легко и быстро делать горячие резервные копии MySQL (горячие — значит без остановки MySQL) с одновременным перемещением копии на удаленный сервер, при этом на локальном сервере резервная копия не оседает и не занимает место, что очень удобно.
Исходные данные: Ubuntu 18.04 (bionic), Oracle MySQL 5.7.29
Задача: Создать горячую (hotbackup) резервную копию MySQL и переместить ее на удаленный сервер, при этом не сохраняя ее на текущем сервере, чтобы не занимать драгоценное место.
Для начала нам нужно установить Percona Xtrabackup и набор утилит qpress, socat, nc на оба сервера. Если все утилиты у Вас уже установлены, то пропустите этот шаг.
1. Скачиваем и устанавливаем пакет percona-release_latest, включаем репозитарий percona tools (release) и устанавливаем набор полезных утилит от Percona Toolkit, устанавливаем Percona Xtrabackup и вспомогательные утилиты qpress, socat
wget https://repo.percona.com/apt/percona-release_latest.$(lsb_release -sc)_all.deb dpkg -i percona-release_latest.$(lsb_release -sc)_all.deb && rm -f percona-release_latest.$(lsb_release -sc)_all.deb percona-release enable-only tools release apt-get update apt-get install -y percona-toolkit percona-xtrabackup-24 qpress socat screen
2. На сервере приемнике (куда будем копировать резервную копию) создаем каталог, куда будет загружаться резервная копия и запускаем socat + xbstream. Все действия выполняем находясь под пользователем root. Перед запуском Вы должны проверить, что на сервере-приемнике достаточно места на файловой системе для приема бэкапа. Запускать socat желательно в screen чтобы в случае обрыва ssh сессии процесс приема не прервался.
mkdir /root/mysqlbackup screen socat -u tcp-listen:9999,reuseaddr stdout 2>/tmp/socat.log | xbstream -x -C /root/mysqlbackup
на что следует обратить внимание:
а) Директива tcp-listen:9999 указывает, что мы будем принимать входящие подключения по протоколу TCP на порт 9999, не забудьте открыть порт на межсетевом экране;
б) Принятый поток будет передаваться xbstream, а тот будет сохранять данные в каталог /root/mysqlbackup, проверьте чтобы на диске было достаточно места для данных. Сколько необходимо? Столько, сколько на источнике занимает каталог с данными MySQL, как правило это /var/lib/mysql, но он может меняться, смотрите на источнике в MySQL настройку datadir, она покажет каталог хранения данных.
3. На источнике запускаем xtrabackup в формат потокового резервного копирования xbstream. Запускать xtrabackup желательно в screen чтобы в случае обрыва ssh сессии процесс создания и передачи резервной копии не прервался.
screen ulimit -n 256000 && /usr/bin/xtrabackup --defaults-file=/etc/mysql/my.cnf --host=127.0.0.1 --port 3306 --user=root --password=mysqlrootpasswd --backup --no-backup-locks --no-lock --parallel=4 --stream=xbstream | socat - TCP4:172.16.0.1:9999
на что следует обратить внимание:
а) Директива —defaults-file указывает местоположение файла конфигурации MySQL, это директива должна быть самой первой в списке;
б) Директивы —host, —port, —user и —password указывают соответствующие опции подключения к работающему MySQL, это у Вас они будут своими, как минимум пароль пользователя root;
в) Директива —no-backup-locks указывает, что не нужно делать блокировок при резервном копировании;
г) Директива —no-lock указывает, что не нужно делать блокировок таблиц при резервном копировании;
д) Директива —parallel указывает, во сколько потоков будет идти резервное копирование;
е) Директива —stream указывает формат потокового резервного копирования;
ж) Директива для socat — TCP4:172.16.0.1:9999 — указывают протокол, IP адрес и порт приемника, это адрес сервера из п.2;
После запуска xtrabackup начнется процесс создания горячей резервной копии и одновременной передачи её на сервер-приемник.
В следующей статье я расскажу как можно восстановить полностью рабочий экземпляр MySQL из созданное нами резервной копии.
На этом все, до скорых встреч. Если у Вас возникли вопросы или Вы хотите чтобы я помог Вам, то Вы всегда можете связаться со мной разными доступными способами.
Профессионально занимаюсь системным администрированием Linux -серверов и баз данных (MySQL, PostgreSQL) на протяжении последних 24 лет.
Добрый день! Подскажите с какого размера базы Mysql нужно использовать percona, вроде как если размер базы менее 10 гб то ещё используется mysqldump
Добрый день! Размер не имеет значения, я использую Percona Xtrabackup на базах размером и 500 MB и 150 GB. Хочу напомнить, что Percona Xtrabackup — это средство для создания горячих резервных копии баз данных MySQL, MariaDB, а также Percona Server for MySQL. Под горячей резервной копией подразумевается способ резервного копирования, в процессе которого база не блокируется и полностью открыта для входящих запросов (чтение и запись). Использование mysqldump, во-первых, приводит к блокировкам, во-вторых, на больших базах длиться десятки минут и даже часы (десятки часов). Единственный плюс mysqldump — это возможность сделать копию баз(ы) в «человеко-читаемом» формате или сделать копию только определенных… Подробнее »
xtrabackup(innobackupex) поддерживает копию одиночных таблиц, но по мимо них он всегда копирует ibdata+стандартную схему mysql и грязные журналы для соглосования). Все завист от того, включен ли innodb_file_per_table(в percona включен по умолчанию). Дальше можно сделать xtrabackup prepare и импортировать таблицу на другой сервер.
—no-backup-locks —no-lock
Это весьма опастные операции когда используется myisam + нужна согласованная точка бинлога для реплики. Я бы лучше перевел таблицы на innodb(если это возможно) чем ставил данные опции.
Добрый день, спасибо за статью. При создании бэкапа, получаю такую ошибку PXB will not be able to make a consistent backup. Retry the backup operation.
Добрый день, попробуйте использовать доп. опцию
И почитайте статью
https://www.percona.com/blog/2020/12/22/redesign-of-lock-ddl-per-table-in-percona-xtrabackup/