web scale backups for mysql, Алексей Копытов (percona)
DESCRIPTION
Доклад Алексея Копытова на HighLoad++ 2014.TRANSCRIPT
Кто я?
Алексей Копытов <[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 + любые типы таблиц (теоретически)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