Создание горячей резервной копии MySQL с одновременным копированием на удаленный сервер

Довольно часто встречается ситуация когда 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 из созданное нами резервной копии.

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


5
Оставить комментарий

avatar
1000
3 Цепочка комментария
2 Ответы по цепочке
1 Последователи
 
Популярнейший комментарий
Цепочка актуального комментария
4 Авторы комментариев
МихаилВладимирГлебAndrew Авторы недавних комментариев

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

  Подписаться  
Уведомление о
Andrew
Гость
Andrew

Добрый день! Подскажите с какого размера базы Mysql нужно использовать percona, вроде как если размер базы менее 10 гб то ещё используется mysqldump

Владимир
Гость
Владимир

Добрый день, спасибо за статью. При создании бэкапа, получаю такую ошибку PXB will not be able to make a consistent backup. Retry the backup operation.