IT-инфраструктура для бизнеса и творчества

Создание резервной копии MySQL при помощи утилиты XtraBackup

Percona XtraBackup — это утилита для горячего резервного копирования баз данных MySQL.

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

XtraBackup 2.4 может создавать резервные копии таблиц InnoDB, XtraDB и MyISAM на серверах MySQL 5.11, 5.5, 5.6 и 5.7, а также на сервере Percona для MySQL с XtraDB.

Для работы с MySQL 8.x следует использовать версию XtraBackup 8.x. В данной статье речь пойдёт о только о XtraBackup 2.4.

Главное преимущество XtraBackup заключается в том, что эта утилита подходит как для создания резервных копий высоко нагруженных серверов, так и для систем с небольшим количеством транзакций.

Если общий размер ваших баз данных MySQL значительный (например, более 10 Гб), то стандартная утилита mysqldump не позволит быстро выполнить создание резервной копии, а восстановление дампа потребует много времени.

Установка

Установка XtraBackup из репозитория apt Percona.

1. Выполните последовательно следующие команды:

wget https://repo.percona.com/apt/percona-release_latest.$(lsb_release -sc)_all.deb sudo dpkg -i percona-release_latest.$(lsb_release -sc)_all.deb sudo apt-get update sudo apt-get install percona-xtrabackup-24

2. После установки выполните команду xtrabackup -v. Так как, важно убедиться, что утилита корректно работает на сервере. В результате на экране отобразится что-то подобное:

xtrabackup: recognized server arguments: — datadir=/var/lib/mysql — tmpdir=/tmp — server-id=1 — log_bin=/var/log/mysql/mysql-bin.log — innodb_buffer_pool_size=16384M — innodb_file_per_table=1 — innodb_flush_method=O_direct — innodb_flush_log_at_trx_commit=0xtrabackup version 2.4.20 based on MySQL server 5.7.26 Linux (x86_64) (revision id: c8b4056)

Права доступа, разрешения и привилегии

XtraBackup должна иметь возможность:

  • Подключиться к вашему серверу MySQL.
  • Обладать правами доступа к каталогу datadir.
  • Во время создания резервной копии иметь права на запись в указанный через параметр target-dir каталог.

Что такое datadir?

datadir — это каталог, в котором сервер баз данных MySQL хранит данные. Все базы данных, все таблицы находятся там. В большинстве дистрибутивов Linux по умолчанию таким каталогом является /var/lib/ mysql.

Что такое target-dir каталог?

target-dir — это каталог, в который будет сохранена резервная копия.

Пользователю базы данных необходимы следующие права доступа к таблицам и базам данных, подлежащих резервному копированию:

  • RELOAD и LOCK TABLES
  • REPLICATION CLIENT
  • CREATE TABLESPACE
  • PROCESS
  • SUPER
  • CREATE
  • INSERT
  • SELECT

Конфигурация

Конфигурация XtraBackup выполняется с помощью опций, которые ведут себя так же, как и стандартные параметры MySQL.

Что это значит?

Конфигурационные параметры могут быть указаны либо в командной строке, либо в файле конфигурации СУБД, например в /etc/my.cnf.

Утилита XtraBackup после запуска считывает разделы [mysqld] и [xtrabackup] из конфигурационных файлов MySQL. Это делается для того, чтобы утилита могла использовать настройки вашей СУБД без необходимости ручного параметров.

Например значение datadir и некоторые параметры InnoDB XtraBackup получаем из конфигурации вашей СУБД.

Если вы хотите переопределить параметры, которые находятся в [mysqld], то просто укажите их в разделе конфигурационном файле в секции [xtrabackup]. Поскольку они будут прочитаны позже, их приоритет будут выше.

Вам можете не добавлять никаких параметров в my.cnf. Все требуемые параметры допустимо указывать в командной строке. Обычно единственное, что может быть удобно разместить в разделе [xtrabackup] вашего my.cnf — это параметр target_dir, который по умолчанию определяет каталог, в который будут помещены резервные копии. Но это не обязательно.

Пример указания пути к каталогу с резервной копией в my.cnf:

[xtrabackup] target_dir = /data/backups/mysql/

Сценарий создания резервной копии

Для создания резервной копии можно использовать следующий сценарий:

#!/bin/bash # Удаляем данные в каталоге бекапа rm -rf /mysql/backup # Cоздаём бекап xtrabackup --user=xtrabackup \ --password=xxxx_SECRET_xxxx \ --backup \ --target-dir=/mysql/backup # Выполняем подготовку бекапа для развёртывания xtrabackup --prepare --target-dir=/mysql/backup # Создаём архив tar -zcvf /home/developer/dumps/xtrabackup-all-dbs-"$(date +%F-%H:%M:%S)".gz /mysql/backup

Что происходит во время выполнения сценария?

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

rm -rf /mysql/backup.

Затем, при помощи утилиты XtraBackup создаём резервную копию и сохраняем её в /mysql/backup/:

xtrabackup --user=xtrabackup --password=xxxxz1cYf95550Gc6xxxxxxxpE3rB03xxxx --backup --target-dir=/mysql/backup

Предварительно в MySQL мы создали пользователя xtrabackup с требуемыми привилегиями. При помощи параметра target-dir мы указываем каталог, в который следует сохранить резервную копию.

Важный момент!

Обратите внимание строку сценария:

xtrabackup --prepare --target-dir=/mysql/backup

Данные в каталоге /mysql/backup не консистентны до тех пор, пока они не будут подготовлены.

Дело в том, что во время копирования файлов могли произойти изменения. Операция xtrabackup --prepare --target-dir=/mysql/backup делает данные резервной копии идеально согласованными во времени.

Выполнить операцию подготовки данных можно на любой машине. Нет необходимости это делать на сервере, где находится исходная СУБД. Вы можете скопировать резервную копию на целевой сервер и подготовить ее там.

Последнее, что мы делаем — создаём архив, в который помещаем нашу резервную копию:

tar -zcvf /home/developer/dumps/xtrabackup-all-dbs-«$(date % F% H% M% S)».gz /mysql/backup

Восстановление резервной копии

Прежде чем приступить к восстановлению резервной копии на целевом сервере данные должны пройти этап подготовки. Как это сделать смотрите выше.

Процесс восстановления копии прост. Вам нужно извлечь резервную копию из архива и заменить данные в datadir.

Как заменить данные в datadir?

Рассмотрим два варианта.

Вариант 1.

Воспользоваться утилитой XtraBackup. Нужно указать опцию --copy-baсk.

Команда ниже перенесёт резервную копию в datadir целевого сервера:

xtrabackup --copy-back --target-dir=/mysql/backup

Вариант 2.

Можно поступить иначе, обойтись без утилиты XtraBackup.

Всё, что вам нужно — это скопировать резервную копию в datadir. Вы можете сделать это при помощи cp или rsync.

Важно понимать, что процедура восстановления резервной копии сводится всего лишь к замене содержимого каталога datadir.

Перед тем, как начать восстановление резервной копии на целевом сервере необходимо:

  • Остановить MySQL сервер.
  • Очистить папку datadir или перенести её содержимое в другое место. Каталог datadir обязательно должен быть пустым.

После завершения переноса данных в datadir сервер MySQL можно запустить.

Подробнее о том, как создавать и восстанавливать резервные копии MySQL при помощи XtraBackup читайте в документации (): https://learn.percona.com/download-percona-xtrabackup-2-4-manual.

{ "author_name": "Игорь Драндин", "author_type": "self", "tags": ["selectel_\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f","mysql"], "comments": 0, "likes": 0, "favorites": 6, "is_advertisement": false, "subsite_label": "dev", "id": 158815, "is_wide": true, "is_ugc": true, "date": "Wed, 16 Sep 2020 13:00:59 +0300", "is_special": false }
(function () { let cdnUrl = `https://specialsf378ef5-a.akamaihd.net/SelectelBranding/images/` let previousArticleNumber = null let currentArticleNumber = 0 let platform = 'Desktop' let articles = [ // { // name: 'camera', // url: `${cdnUrl}CameraCat`, // text: 'умную камеру для\u00A0наблюдения за\u00A0котиками', // link: '1', // }, { name: 'chill', url: `${cdnUrl}ChillCat`, text: 'трекер, который подскажет, когда пора отдохнуть', link: 'https://vc.ru/promo/288561-eye-tracker', }, // { // name: 'cloud', // url: `${cdnUrl}CloudCat`, // text: 'котика: даёшь ему «пять», а\u00A0он делает бэкап в облако', // link: '3', // } ] let buttonCycle = document.querySelector('.button--cycle') let textField = document.querySelector('.selectel-footer-subtitle') let imageAgent = document.querySelector('.image--agent') let banner = document.querySelector('.selectel-footer') buttonCycle.addEventListener('click', cycleClick) let media = window.matchMedia("(max-width: 570px)") media.addEventListener('change', matchMedia) function matchMedia() { if (media.matches) { platform = 'Mobile' } else { platform = 'Desktop' } update() } matchMedia() function cycleClick(event) { if (event) { event.preventDefault() event.stopPropagation() } window.open('https://vc.ru/tag/selectelDIY', '_blank') //cycle(event) } function cycle(event) { // incrementArticleNumber() textField.innerHTML = generatedText() imageAgent.src = articles[currentArticleNumber].url + platform + '.svg?5' imageAgent.setAttribute("class", "") imageAgent.classList.add('image--agent', articles[currentArticleNumber].name) banner.href = articles[currentArticleNumber].link } function update() { banner.href = articles[currentArticleNumber].link imageAgent.src = articles[currentArticleNumber].url + platform + '.svg?5' textField.innerHTML = generatedText() } function incrementArticleNumber() { previousArticleNumber = currentArticleNumber if (currentArticleNumber >= articles.length - 1) { currentArticleNumber = 0 } else { currentArticleNumber++ } } function generatedText() { let defaultText if (platform === 'Desktop') { defaultText = `Мы тут собрали %text%. Хотите почитать?` } else { defaultText = `Мы тут собрали %text%.` } return defaultText.replace('%text%', articles[currentArticleNumber].text) } function getRandom(min, max) { min = Math.ceil(min) max = Math.floor(max) return Math.floor(Math.random() * (max - min + 1)) + min } (function create() { currentArticleNumber = getRandom(0, articles.length - 1) cycle() let page = document.querySelector('.page--entry') if (page) { function insertAfter() { let parents = page.querySelectorAll('[data-id="7"]') let referenceNode = parents[0] referenceNode.parentNode.insertBefore(banner, referenceNode.nextSibling); loaded() } setTimeout(() => insertAfter(), 0) } }()) function loaded() { banner.classList.add('loaded') } loadImages([ `${cdnUrl}CameraCatDesktop.svg`, `${cdnUrl}ChillCatDesktop.svg`, `${cdnUrl}CloudCatDesktop.svg`, `${cdnUrl}CameraCatMobile.svg`, `${cdnUrl}ChillCatMobile.svg`, `${cdnUrl}CloudCatMobile.svg`, ]) function loadImages(urls) { return Promise.all(urls.map(function (url) { return new Promise(function (resolve) { var img = document.createElement('img'); img.onload = resolve; img.onerror = resolve; img.src = url; }); })); } }())
0
0 комментариев
Популярные
По порядку
Читать все 0 комментариев
Я задолбался пропускать интересные статьи на vc.ru и создал Capitan

Это самый удобный рабочий стол для браузера

Почему не стоит заказывать товары 18+ на Озоне, если вы не готовы их потом нести в пункт самовывоза

Хочу поделиться неудачной историей заказа товара 18+ на Озоне. И как Озон не хочет помогать решить проблему. Текст могут читать только совершеннолетние пользователи сайта.

Как работать удалённо по московскому времени, если живёшь в Сибири

Команда ИТ-компании Southbridge — о преодолении трудностей часовых поясов: графике работы, планировании и отдыхе.

«Вам звонок из Циан»: зачем компания скупает номера телефонов и как call-tracking помогает клиентам сервиса

Подменные номера телефонов защищают от нежелательных звонков и упрощают аналитику продаж

«Яндекс» оставляет только положительные отзывы о своих сервисах

После ситуации с не доставленным заказом из Яндекс Лавки, я оставил отзыв на сервисе Карт. Его приняли и разместили, но доступен он только для аккаунта, с которого я его оставлял)))

Конференция GoGlobal! соберет ведущих маркетологов

29 сентября 2021 года впервые состоится GoGlobal! — однодневная онлайн-конференция для маркетологов, заинтересованных в ускорении глобального присутствия своих кампаний.

Выборы, выборы, кандидаты

Нет, не в рифму известной песни. "Всего лишь" педофилы... Делюсь своим негодованием после посещения избирательного участка.

«Сбербанк» через час после личного визита позвал 84-летнюю бабушку еще раз в прийти офис

Казалось бы удобно - оформил получение пенсии на карту и нет проблем. Но это не про историю со Сбербанком. Здесь через час после получения карты лично в отделении прилетело смс о блокировке онлайн сервисов банка.

Дайджест новостей Сбера: AR-экскурсия, распознавание животных и премия для учёных

Прогулки по Политехническому музею с роботом Сепулькой, чудеса компьютерного зрения, научная премия — начало сентября в Сбере выдалось насыщенным. Делимся с вами самыми интересными новостями компании во втором выпуске нашего дайджеста.

null