web scale backups for mysql, Алексей Копытов (percona)

33
Webscale backups for MySQL [email protected] October 29, 2014

Upload: ontico

Post on 21-Jun-2015

235 views

Category:

Internet


3 download

DESCRIPTION

Доклад Алексея Копытова на HighLoad++ 2014.

TRANSCRIPT

Webscale backups for MySQL

[email protected]

October 29, 2014

#BEAMERTHEME: Madrid

Кто я?

Алексей Копытов <[email protected]>I Percona ServerI Percona XtraBackup (руководитель проекта)I Percona XtraDB Cluster

Типы резервных копий

ЛогическиеI данные в виде SQL, полученные

от сервераI требуют импорт для

восстановления (медленно!)I восстановление повреждённых

данныхI upgrade/downgrade

ФизическиеI копия файлов данных с дискаI клонированиеI восстановление всей базы

целиком

Обычно используются одновременно

Утилиты для бэкапов MySQL

I mysqldumpI mydumperI mylvmbackupI TokuDB Hot BackupI MySQL Enterprise BackupI Percona XtraBackupI не считая «надстроек»

mysqldump

I логический бэкапI + входит в пакеты MySQL/MariaDB/Percona ServerI — нет инкрементальных бэкаповI — однопоточныйI — ОЧЕНЬ медленное восстановление

mydumper

“How MySQL DBA & support engineer would imagine mysqldump ”

I логический бэкапI + многопоточная версия mysqldumpI + одна таблица – один файлI — нет инкрементальных бэкаповI — только локальные бэкапы (нельзя сделать mydumper | sshremotehost)

I — медленное восстановление

mylvmbackup

I физический бэкапI + любые типы таблиц (InnoDB, TokuDB, etc.)I — нет инкрементальных бэкаповI — только локальные бэкапы

TokuDB Hot Backup

I библиотека, перехватывающая I/O вызовы

I фактически LVM snapshot в userspace

TokuDB Hot Backup

I физический бэкапI + любые типы таблиц (теоретически)I — нет инкрементальных бэкаповI — только локальные бэкапыI – вся запись в базу дублируется в процессе бэкапа

MySQL Enterprise Backup

I физический бэкапI проприетарное ПО, доступно по платной подпискеI + «горячий» бэкап для InnoDBI + инкрементальные бэкапыI + бэкапы на удалённые хостI + быстрое восстановление всей базыI - большой размер на дискеI - не поддерживает некоторые расширения XtraDB (Percona Server,

MariaDB)I - не поддерживает TokuDB

Percona XtraBackup

I физический бэкапI свободная, бесплатная альтернатива MySQL Enterprise BackupI практически 100% совместимость в функциональности (+/- нюансы

реализации)I поддерживает MySQL, MariaDB, Percona Server, WebscaleSQL, . . .

Что выбрать?

mydumper + Percona XtraBackup покрывают большинство случаев

I стадарт де-факто для Percona Managed Services

TokuDB? Тогда mylvmbackup !

I используется в Percona Cloud Tools

Есть подписка на MySQL Enterprise?

I MySQL Enterprise Backup — тоже вариант! :)

Большие объёмы данных

Большие объёмы данных: mysqldump

I mysqldump --innodb-optimize-keys в пакетах Percona Server5.1/5.5/5.6

I убирает вторичные индексы из InnoDB таблицI перестраивает после импорта данных “быстрым” методомI значительно ускоряет импортI пока не реализовано в MySQL (Bug #49120)I пока не реализовано в mydumper

Большие объёмы данных: PXB/MEB

«Компактные» бэкапы в Percona XtraBackupinnobackupex --compact /backup/dir/

«Skip unused pages» в MySQL Enterprise Backupmysqlbackup --skip-unused-pages /backupdir

Меньше размер на диске, но больше времени на восстановление!

Блокировки

Все утилиты обещают «горячий» бэкап.

На самом деле используют блокировки для:

I согласованности с нетранзакционными таблицамиI согласованности .frm с даннымиI согласованности master/slave координат с копией данных

Блокировки: FLUSH TABLES WITH READ LOCK

В чём проблема на высоконагруженных серверах?

1. Сбросить query cache2. Заблокировать все новые записи3. Дождаться завершения всех выполняющихся записей4. Дождаться завершения всех SELECT5. Заблокировать COMMIT

Блокировки: Backup locks в Percona Server 5.6

LOCK TABLES FOR BACKUP:I блокирует DDL и записи в нетранзакционные таблицы

LOCK BINLOG FOR BACKUP:I блокирует COMMIT

Блокировки: FTWRL vs. Backup locksPercona XtraBackup:

FLUSH TABLES WITH READ LOCK1. скопировать InnoDB таблицы2. FLUSH TABLES WITH READ LOCK;3. скопировать .frm, MyISAM, и т.д.4. получить master/slave

координаты5. завершить копирование REDO log6. UNLOCK TABLES;

Backup locks

1. скопировать InnoDB таблицы2. LOCK TABLES FOR BACKUP;3. скопировать .frm, MyISAM, и т.д.4. LOCK BINLOG FOR BACKUP;5. завершить копирование REDO log6. UNLOCK TABLES;7. получить master/slave

координаты8. UNLOCK BINLOG;

Блокировки: FTWRL vs. Backup locksmysqldump --single-transaction

I не блокирует серверI не работает, если есть MyISAM и/или DDL

mysqldump --lock-all-tables

I блокирует серверI работает с MyISAM и DDL

Percona Server: mysqldump —-single-transaction--lock-for-backup:

I не блокирует серверI работает с MyISAM и DDL

Частичные копии

Частичное восстановление

Инкрементальные бэкапы

Реализация инкрементальных бэкапов в Percona XtraBackup иMySQL Enterprise Backup:

I скопировать все страницы, для которых LSNобновления > LSNполного бэкапа

Проблема для больших объёмов данных:

I требует полного сканирования всех данных

Инкрементальные бэкапы

Percona Server: innodb_track_changed_pages=1

I сохраняет bitmap изменённых страниц в отдельных файлах

Percona XtraBackup:

I автоматически использует bitmap файлы вместо полного сканирования

Инкрементальные бэкапы

Percona Server: innodb_log_archive=1

I дублирует REDO лог в отдельных файлах

Percona XtraBackup:

I xtrabackup --prepare --log-arch-dir=/data/archived-logs/прикладывает изменения без полного сканирования

Проверка целостностиПроблема: как проверить, что с бэкапом «всё в порядке»?

I проверка контрольных сумм, списка файлов, и т.д. не гарантируетцелостность

I не с чем сравнивать:

Проверка целостности: решение

Предложено пользователем в списке рассылки:

1. Создать slave из бэкапа

1. pt-table-checksum для проверки целостности репликации2. profit!

Облака

Кто поддерживает cloud backups?

I mysqldump/mydumper+ сторонние утилиты (s3cmd)

I MySQL Enterprise Backup с версии 3.10.2I Percona XtraBackup 2.3 (пока alpha)

Облака

MySQL Enterprise Backup

I сейчас: Amazon S3I в планах: ?

Percona XtraBackup:

I сейчас: OpenStackI в планах: Amazon S3, Amazon Glacier

Облака: Percona XtraBackup

Создание бэкапа:

innobackupex --stream=xbstream /tmp |xbcloud put --storage=swift

--swift-container=testbackup--swift-user=user--swift-password=password--swift-url=http://my.cloud.com/--swift-key=testkey--parallel=10

Облака: Percona XtraBackup

Восстановление из бэкапа:

xbcloud get --storage=swift--swift-container=testbackup--swift-user=user--swift-key=testkey--swift-url=http://my.cloud.com/--parallel=10 | xbstream -x /data/backup

innobackupex --apply-log /data/backup

innobackupex --copy-back /data/backup

Вопросы!