Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
1
Safe Harbour Statement
THE FOLLOWING IS INTENDED TO OUTLINE OUR GENERAL PRODUCT
DIRECTION. IT IS INTENDED FOR INFORMATION PURPOSES ONLY,
AND MAY NOT BE INCORPORATED INTO ANY CONTRACT. IT IS NOT A
COMMITMENT TO DELIVER ANY MATERIAL, CODE, OR
FUNCTIONALITY, AND SHOULD NOT BE RELIED UPON IN MAKING
PURCHASING DECISIONS. THE DEVELOPMENT, RELEASE, AND
TIMING OF ANY FEATURES O FUNCTIONALITY DESCRIBED FOR
ORACLE’S PRODUCTS REMAINS AT THE SOLE DISCRETION OF
ORACLE.
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
2
Insert Picture Here
Резервное копирование
MySQL в экстремальных
условиях
Света Смирнова
Ведущий инженер технической поддержки
Слайды подготовлены при участии
Matt Lord, MySQL Product Manager
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
3
Содержание
 Введение
 Что мы будем обсуждать
 Копирование при:
• Недостатке места
• Нехватке времени
• Ограниченных системных ресурсах
 Как минимизировать влияние блокировок
 Что делать при повреждении данных
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
4
Insert Picture Here
Введение
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
5
О себе
Света Смирнова
 Инженер технической поддержки MySQL
 Представитель поддержки в команде MySQL Enterprise Backup (MEB)
 Постоянно работаю со сложными случаями при резервном
копировании
• Большинству клиентов стандартные рекомендации не подходят
• Паттерны для сложных проблем
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
6
Зачем нужны бэкапы?
1. Это ваша страховка на случай:
 Поломки оборудования
 Ошибки пользователя
 Программной ошибки
2. Вы можете их использовать, чтобы создать новые инсталляции
3. Клонировать MySQL сервера для репликации
4. Данные -это наиболее важная часть вашей интеллектуальной
собственности. Вы должны их защищать от потерь.
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
7
Головоломка бэкапа
1. Инструменты, осуществляющие бэкап, гарантируют надёжность
при помощи:
 Табличных блокировок
 Долговременных транзакций
 Глобальных блокировок
2. Операции экспорта создают дополнительную нагрузку
3. Они требуют много свободного места на диске
Качественно, быстро и дёшево не бывает
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
8
Головоломка бэкапа
Как же осуществлять экспорт данных с рабочей системы, где
 Сервера постоянно выполняют критичные бизнес-операции
 Приложение нельзя остановить ни на секунду
 Любое замедление неприемлемо
 Данных настолько много, что сложно найти ещё столько же для бэкапа
?
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
9
Итак, как же осуществлять бэкап...
 при недостатке места на локальном диске?
 с минимальными ресурсозатратами?
 с минимальным влиянием на MySQL сервер, с которого нужно
скопировать данные?
 когда нет времени?
 без блокировки таблиц и всего MySQL сервера?
 когда данные уже повреждены?
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
10
О чём я не буду рассказывать
 Полные бэкапы
 Частичные бэкапы
 Инкрементные бэкапы
 Автоматизация бэкапов
 Обычные приёмы оптимизации бэкапов
Всё описано в официальной документации и white papers
Существуют стандартные best practices
Я уже рассказывала об этом
 На прошлой Devconf
 http://2013.devconf.ru/offers/12
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
11
Инструменты
 Только те, которые я сама использую
 Основной инструмент: MySQL Enterprise Backup
• Бинарный горячий бэкап
• Коммерческий, доступен как часть подписки MySQL Enterprise
 Можно заменить open source аналогом Percona Xtrabackup
• Но я с ним не работаю!
 Поэтому я всегда буду использовать MEB, а вы можете взять любой из
этих двух инструментов
 Я упомяну, если возможность недоступна для Xtrabackup
 Все остальные инструменты бесплатны
Только
MEB!
Только
MEB!
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
12
Insert Picture Here
Нехватка места на диске
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
13
Когда мало места на диске
 При очень большом размере data директории
 Когда осталось мало места на локальном диске
 Вы можете использовать mysqldump, но он слишком медленный.
 Можно просто скопировать файлы, но придётся остановить mysqld
 Процесс MEB должен быть запущен на той же машине, что и MySQL
сервер!
shell# mysqldump –host=remote.host.com –port=3306 –single-transaction 
–master-data=1 –all-databases >backup.sql
shell# mysqldump –host=remote.host.com –port=3306 –single-transaction 
–master-data=1 –all-databases >backup.sql
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
14
Опции экспорта
 Сжатые бэкапы: --compress, --compress-level=LEVEL, --compress-
method=ALGORITHM
 Стриминг при помощи SSH
 Бэкап на ленту, при использовании интерфейса SBT
 Частичные бэкапы:
• --include-tables, --exclude-tables, --with-tts
• --include, --databases
 Инкрементные бэкапы
 Не копируйте пустые и неиспользуемые страницы: --skip-unused-pages
Только
MEB!
Только
MEB!
Только
MEB!
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
15
Опции экспорта: XtraBackup аналоги
 Частичные бэкапы:
• --include, --databases, --tables-file
 Не копируйте secondary индексы: --compact
 TTS support
• Поддерживает на уровне restore: --apply-log + --export
• Вам придётся вручную импортировать таблицу при помощи ALTER
TABLE DISCARD TABLESPACE, с последующим копированием
файлов и ALTER TABLE IMPORT TABLESPACE
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
16
Опции экспорта: сжатие
 Возможность сжатия до 80% и больше!
shell# mysqlbackup --backup-dir=/opt/mysql/backups/uncompressed 
> backup 2>/dev/null && du -csh /opt/mysql/backups/uncompressed
334M /opt/mysql/backups/uncompressed
334M total
shell# mysqlbackup --backup-dir=/opt/mysql/backups/compressed 
> --compress --compress-level=9 backup 2>/dev/null && du –csh 
> /opt/mysql/backups/compressed
81M /opt/mysql/backups/compressed
81M total
shell# mysqlbackup --backup-dir=/opt/mysql/backups/uncompressed 
> backup 2>/dev/null && du -csh /opt/mysql/backups/uncompressed
334M /opt/mysql/backups/uncompressed
334M total
shell# mysqlbackup --backup-dir=/opt/mysql/backups/compressed 
> --compress --compress-level=9 backup 2>/dev/null && du –csh 
> /opt/mysql/backups/compressed
81M /opt/mysql/backups/compressed
81M total
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
17
Опции экспорта: сжатие
●
Три алгоритма
●
LZ4
●
Самый быстрый
●
По умолчанию
●
LZMA
●
Самый эффективный
●
ZLIB
●
По умолчанию <= 3.9
●
Девять уровней
●
Только ZLIB и LZMA
Только
MEB!
XtraBackup
использует
алгоритм
quicklz
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
18
Опции экспорта: стриминг
 Можно полностью отказаться от локального хранения
Просто укажите директорию для временных файлов на время бэкапа
Поддерживаются частичные бэкапы
 Должна быть достаточно большой, чтобы сохранить все изменеия,
случившиеся во время экспорта
 Но не нужно дополнительного места для данных
shell# mysqlbackup --backup-image=- --backup-dir=/tmp/backup 
> --disable-manifest backup-to-image 2>/dev/null | ssh matt@solo 
> "cat > /tmp/backup.img“
shell# ssh matt@solo "ls -lh /tmp/backup.img"
-rw-r--r-- 1 matt staff 333M Sep 10 15:54 /tmp/backup.img
shell# mysqlbackup --backup-image=- --backup-dir=/tmp/backup 
> --disable-manifest backup-to-image 2>/dev/null | ssh matt@solo 
> "cat > /tmp/backup.img“
shell# ssh matt@solo "ls -lh /tmp/backup.img"
-rw-r--r-- 1 matt staff 333M Sep 10 15:54 /tmp/backup.img
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
19
Опции экспорта: интерфейс SBT
 Можно полностью отказаться от локального хранения
 Просто передавайте бэкап MMS, что использует ваша компания
– Oracle Secure Backup (полностью поддерживается)
– IBM Tivoli Storage Manager
– Symantec NetBackup
– EMC NetWorker
shell-osb# mysqlbackup --backup-image=sbt:backup-mattprod-2013-09-08 
> --backup-dir=/tmp/backup backup-to-image
shell-tsm# mysqlbackup --backup-image=sbt:my-tsm–backup 
> --sbt-lib-path=/usr/lib/libobk.so 
> --sbt-environment=“TDPO_OPTFILE=/opt/ibm/tsm/tdpo.opt” 
> --backup-dir=/tmp/backup backup-to-image
shell-osb# mysqlbackup --backup-image=sbt:backup-mattprod-2013-09-08 
> --backup-dir=/tmp/backup backup-to-image
shell-tsm# mysqlbackup --backup-image=sbt:my-tsm–backup 
> --sbt-lib-path=/usr/lib/libobk.so 
> --sbt-environment=“TDPO_OPTFILE=/opt/ibm/tsm/tdpo.opt” 
> --backup-dir=/tmp/backup backup-to-image
Только
MEB!
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
20
Опции экспорта: частичный бэкап
 Копируйте только важные базы и таблицы
 MEB поддерживает InnoDB transportable tablespaces во время
бэкапа
shell# mysqlbackup --include=sakila.* --only-innodb-with-frm=related 
> --backup-dir=/opt/mysql/backups backup
shell# mysqlbackup --use-tts=with-minimum-locking 
> --include=employees.* --backup-dir=/opt/mysql/backups backup
shell# mysqlbackup --include=sakila.* --only-innodb-with-frm=related 
> --backup-dir=/opt/mysql/backups backup
shell# mysqlbackup --use-tts=with-minimum-locking 
> --include=employees.* --backup-dir=/opt/mysql/backups backup
Только
MEB!
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
21
Опции экспорта: инкрементный бэкап
 Копируйте только то, что изменилось с момента последнего
бэкапа
shell# mysqlbackup --incremental 
> --incremental-base=dir:/opt/mysql/backup/monday 
> --incremental-backup-dir=/opt/mysql/backup/tuesday backup
shell# mysqlbackup --incremental 
> --incremental-base=history:last_backup --with-timestamp 
> --incremental-backup-dir=/opt/mysql/backup backup
shell# mysqlbackup --incremental 
> --incremental-base=dir:/opt/mysql/backup/monday 
> --incremental-backup-dir=/opt/mysql/backup/tuesday backup
shell# mysqlbackup --incremental 
> --incremental-base=history:last_backup --with-timestamp 
> --incremental-backup-dir=/opt/mysql/backup backup
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
22
Опции экспорта: не копируйте пустые и
неиспользуемые страницы
 Укажите, что вы не хотитет копировать пустые и неиспользуемые
страницы
 Используйте эту опцию в сочетании с компрессией для большей
эффективности
shell# mysqlbackup --backup-dir=/opt/mysql/backups/compressed 
> --compress --compress-level=9 --skip-unused-pages backup
shell# mysqlbackup --backup-dir=/opt/mysql/backups/compressed 
> --compress --compress-level=9 --skip-unused-pages backup
Только
MEB!
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
23
Опции восстановления
 В MEB 3.9+ возможно восстановление за один шаг
– Даже для сжатого бэкапа и бэкапа в виде файла
 Эта возможность позволяет избежать ненужного дублирования
данных во время восстановления
shell# ssh matt@solo "cat /opt/mysql/backups/backup.img" | mysqlbackup 
> --backup-dir=/tmp/backup --uncompress --backup-image=- 
> --datadir=/var/lib/mysql --innodb_log_group_home_dir=. 
> --innodb_log_files_in_group=4 --innodb_log_file_size=2G 
> --innodb_data_file_path="ibdata1:1G:autoextend"
> copy-back-and-apply-log
shell# ssh matt@solo "cat /opt/mysql/backups/backup.img" | mysqlbackup 
> --backup-dir=/tmp/backup --uncompress --backup-image=- 
> --datadir=/var/lib/mysql --innodb_log_group_home_dir=. 
> --innodb_log_files_in_group=4 --innodb_log_file_size=2G 
> --innodb_data_file_path="ibdata1:1G:autoextend"
> copy-back-and-apply-log
Только
MEB!
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
24
Insert Picture Here
Недостаток времени
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
25
Мне нужен бэкап сию минуту!
 Невозможно установить время для проведения административных
работ более 30 минут или даже меньшего срока
 Бэкап может срочно потребоваться для установки дополнительного
сервера
 Требуется срочно переместить на другой сервер одну или несколько
баз данных
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
26
Методы экспорта
 Бэкап файловой системы
– Требует полностью остановить mysqld или, в лучшем случае, блокировать
глобально
 Логические бэкапы (mysqldump)
– ОЧЕНЬ медленные, требуют много места на диске и используют слишком
много блокировок
 MySQL Enterprise Backup (MEB)
– Горячие бэкапы транзакционного табличного движка InnoDB
– Поддерживает много опций, регулирующих производительность и контроль
ресурсов
– Поддерживает частичные бэкапы и transportable tablespaces
– Поддерживает инкрементные бэкапы
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
27
MySQL Enterprise Backup
В 49 раз быстрее mysqldump
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
28
MySQL Enterprise Backup
В 80 раз быстрее mysqldump
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
29
MEB: опции производительности
 Увеличьте количество буферов для CPU-интенсивных многопоточных
операций: --number-of-buffers
 Увеличьте количество нитей, используемых для чтения: --read-threads
 Увеличьте количество нитей, используемых для записи: --write-threads
 Увеличьте количестов CPU нитей: --process-threads
 Увеличьте максимальное количество памяти, используемой для
кэширования: --limit-memory
 Не копируйте неиспользуемые страницы InnoDB: --skip-unused-pages
Только
MEB!
Только
MEB!
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
30
Опции производительности:
XtraBackup аналоги
 Количество нитей, осуществляющих компрессию
• --compress-threads
 Количество нитей, используемых для копирования файлов *.ibd
• --parallel
 Ограничить количество операций IO в секунду
• --throttle
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
31
Пример: сколько времени?
 2G datadir, 1 7.2K HDD, 4 vCPUs , 16G of RAM
shell# time mysqlbackup --backup-dir=/opt/mysql/backups --with-timestamp
backup 2>/tmp/log.txt
real 0m34.403s
user 0m3.069s
sys 0m2.043s
shell# time mysqlbackup --backup-dir=/opt/mysql/backups 
> --process-threads=4 --limit-memory=1000 --skip-unused-pages 
> --with-timestamp backup 2>/tmp/log.txt
real 0m29.883s
user 0m3.121s
sys 0m1.889s
shell# time mysqlbackup --backup-dir=/opt/mysql/backups --with-timestamp
backup 2>/tmp/log.txt
real 0m34.403s
user 0m3.069s
sys 0m2.043s
shell# time mysqlbackup --backup-dir=/opt/mysql/backups 
> --process-threads=4 --limit-memory=1000 --skip-unused-pages 
> --with-timestamp backup 2>/tmp/log.txt
real 0m29.883s
user 0m3.121s
sys 0m1.889s
 Грамотное использование опций сокращает время бэкапа до 50% на
машинах с большими наборами данных, используемых крупными
предприятиями
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
32
Insert Picture Here
Нехватка системных ресурсов
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
33
Почему приложение вдруг стало работать
медленно?
 Бэкапы могут сильно загружать процессор (CPU intensive)
 Бэкапы могут нагружать диск (быть I/O intensive), что, в свою очередь,
увеличивает CPU cycles в IO_Wait
 Бэкапы могут захватывать различные блокировки MySQL сервера
 Так как же экспортировать данные и при этом не переживать
значительных замедлений в работе приложения…
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
34
Опции бэкапа
 Ограничить использование памяти: --limit-memory
 Ограничить использование CPU: --process-threads
 Ждать X ms после копирования каждого блока данных: --sleep
 Не использовать блокировки: --no-locking, --innodb-only
 Ограничить операции ввода-вывода: --read-threads, --write-threads
 Не копировать неиспользуемые страницы: --skip-unused-pages
 Ограничить использование ресурсов на уровне операционной
системы: cgroups, taskset, cpulimit, etc.
Только
MEB!
Только
MEB!
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
35
Пример: использование ресурсов
 2G datadir, 1 7.2K HDD, 4 vCPUs , 16G of RAM
shell# /usr/bin/time -f 'Exec Time: %E, CPU: %P, MEM: %MKB, IO: %O' 
> mysqlbackup --backup-dir=/opt/mysql/backups --with-timestamp 
> backup 2>&1 | tail -1
Exec Time: 0:23.11, CPU: 21%, MEM: 951648KB, IO: 4229360
shell# taskset -c 1 /usr/bin/time -f 
> 'Exec Time: %E, CPU: %P, MEM: %MKB, IO: %O' mysqlbackup 
> --backup-dir=/opt/mysql/backups --limit-memory=50 
> --process-threads=1 --skip-unused-pages --no-locking --sleep=2000 
> --with-timestamp backup 2>&1 | tail -1
Exec Time: 4:22.06, CPU: 1%, MEM: 222096KB, IO: 3384064
shell# /usr/bin/time -f 'Exec Time: %E, CPU: %P, MEM: %MKB, IO: %O' 
> mysqlbackup --backup-dir=/opt/mysql/backups --with-timestamp 
> backup 2>&1 | tail -1
Exec Time: 0:23.11, CPU: 21%, MEM: 951648KB, IO: 4229360
shell# taskset -c 1 /usr/bin/time -f 
> 'Exec Time: %E, CPU: %P, MEM: %MKB, IO: %O' mysqlbackup 
> --backup-dir=/opt/mysql/backups --limit-memory=50 
> --process-threads=1 --skip-unused-pages --no-locking --sleep=2000 
> --with-timestamp backup 2>&1 | tail -1
Exec Time: 4:22.06, CPU: 1%, MEM: 222096KB, IO: 3384064
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
36
Insert Picture Here
Минимизация блокировок
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
37
MEB: опции, регулирующие блокировки
 Исключить ЛЮБЫЕ блокировки: --no-locking (небезопасно, если у вас
есть нетранзакционные таблицы)
 Экспортировать только транзакционные данные: --innodb-only
 Инкрементный бэкап, используя только redo log: --incremental-with-
redo-log-only
 Частичные бэкапы с минимальными блокировками: --use-tts=with-
minimum-locking Только
MEB!
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
38
Разве бэкапы MEB не “горячи”?
 FLUSH TABLES WITH READ LOCK используется при окончании
работы
– Необходимо, чтобы получить снапшот нетранзакционных данных
 Можно избежать при помощи опций:
– Не брать никаких локов: --no-locking
– Экспортировать только таблицы InnoDB: --only-innodb[-with-frm]
Только
MEB!
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
39
Что делать с нетранзакционными данными?
 mysqlhotcopy – блокирует и копирует файлы таблиц по одной
 mysqldump – блокирует и экспортирует каждую таблицу в SQL, XML
или CSV файл
 FS snapshots – скопируйте файлы таблиц
 Используйте MySQL Replication Slave для бэкапов
 mysqlbinlog –read-from-remote-server --raww
 Количество нетранзакционных данных будет продолжать уменьшаться
в MySQL 5.7
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
40
Итоги: экспорт с минимальными затратами
Ограничьте количество используемой памяти:
 MEB: --limit-memory, --sleep, --[read|write|process]-threads
 Перенаправьте бэкап на удалённую машину
Копируйте столько данных, сколько необходимо:
 MEB: частичные бэкапы с опцией --use-tts=with-minimum-locking
 MEB: не копируйте неиспользуемые страницы --skip-unused-pages
(только InnoDB)
 MEB: инкрементные бэкапы, использующие только redo log (только
InnoDB)
Используйте полностью неблокирующие бэкапы:
 MEB: --only-innodb, --only-innodb-with-frm, --no-locking
– Небезопасно для файлов .frm и нетранзакционных данных
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
41
Insert Picture Here
Повреждённые данные
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
42
Бэкапы и повреждённые данные
Иногда таблицы повреждаются!
Если данные на рабочей машине повреждены, но бэкап в
порядке:
 Полностью или частично (--with-tts) восстановите данные
 Накатите изменения и бинарных логов
Если данные повреждены и на рабочей машине, и в бэкапе
(бэкапа нет):
 InnoDB
– --innodb_force_recovery
– SELECT INTO OUTFILE
 MyISAM
– myisamchk
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
43
Бэкапы и повреждённые данные
Что делать если:
 У вас есть только полный бэкап, сделанный MEB, но вам нужно
восстановить одну таблицу
 Вы не можете запустить ещё один MySQL сервер
 Ваша версия MySQL не поддерживает TTS
MyISAM
 Просто скопируйте файлы .frm, .MYI, и .MYD
InnoDB
 Так просто не получится
 Потому что каждая таблица должна иметь одинаковый ID в shared
tablespace и на бэкапе, и на рабочем сервере
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
44
Бэкапы и повреждённые данные:
полный Backup и InnoDB
Если вы можете развернуть новую инсталляцию MySQL на
отдельном сервере
 Сделайте это!
 Если ваша версия MySQL поддерживает TTS
– Скопируйте таблицу при помощи MEB и опции --use-tts
– Восстановите её
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
45
Бэкапы и повреждённые данные:
полный бэкап и InnoDB
Если вы не можете!
 Задачка
 Каждая InnoDB таблица должна иметь одинаковый ID в shared
tablespace и на бэкапе, и на рабочем сервере
– Они могу совпадать, если:
– Это бэкап того самого сервера
– Вы изначально клонировали этот сервер из данного бэкапа
– и
– Вы используете опцию –innodb-file-per-table
– Просто скопируйте файл .ibd
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
46
Бэкапы и повреждённые данные:
полный бэкап и InnoDB
Если ID не одинаково, но вы используете опцию
–innodb-file_per_table
 Восстановите вручную
– Имитируйте внутренний InnoDB table counter
– Запустите новый MySQL сервер
– Создавайте, затем удаляйте (drop) таблицы с той же структурой,
что и оригинальная до тех пор, пока counter не достигнет
нужного значения
– Импортируйте таблицу из бэкапа на подготовленный MySQL сервер
– Скопируйте и восстановите таблицу на рабочем сервере
• mysqlbackup –use-tts –include-tables=dbname.tablename backup
• mysqldump dbname tablename
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
47
Бэкапы и повреждённые данные:
полный бэкап и InnoDB
Как узнать, что набирать в команде CREATE TABLE ?
 mysqlfrm, the FRM reader придёт на помощь
$ mysqlfrm --basedir=/usr/local/bin/mysql test1:city.frm --port=3333
# Starting the spawned server on port 3333 ... done.
# Reading .frm files
#
# Reading the city.frm file.
#
# CREATE statement for city.frm:
#
CREATE TABLE `test1`.`city` (
…
$ mysqlfrm --basedir=/usr/local/bin/mysql test1:city.frm --port=3333
# Starting the spawned server on port 3333 ... done.
# Reading .frm files
#
# Reading the city.frm file.
#
# CREATE statement for city.frm:
#
CREATE TABLE `test1`.`city` (
…
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
48
Insert Picture Here
Заключение
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
49
Заключение
 Бэкапы необходимы
 Ограничения, налагаемые работой приложений, - это жизненный факт
 Сложные проблемы могут быть решены при помощи MySQL Enterprise
Backup
 MySQL Support поможет, если вы столкнётесь с проблемой
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
50
Ссылки
Документация:
 http://dev.mysql.com/doc/mysql-enterprise-backup/3.10/en/index.html
 http://dev.mysql.com/doc/mysql-utilities/1.4/en/mysqlfrm.html
 https://blogs.oracle.com/mysqlenterprisebackup/
30-дневная пробная версия MySQL Enterprise Backup:
 https://edelivery.oracle.com/
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
51
Insert Picture HereСПАСИБО!

Резервное копирование MySQL в экстремальных условиях

  • 1.
    Copyright © 2014,Oracle and/or its affiliates. All rights reserved. 1 Safe Harbour Statement THE FOLLOWING IS INTENDED TO OUTLINE OUR GENERAL PRODUCT DIRECTION. IT IS INTENDED FOR INFORMATION PURPOSES ONLY, AND MAY NOT BE INCORPORATED INTO ANY CONTRACT. IT IS NOT A COMMITMENT TO DELIVER ANY MATERIAL, CODE, OR FUNCTIONALITY, AND SHOULD NOT BE RELIED UPON IN MAKING PURCHASING DECISIONS. THE DEVELOPMENT, RELEASE, AND TIMING OF ANY FEATURES O FUNCTIONALITY DESCRIBED FOR ORACLE’S PRODUCTS REMAINS AT THE SOLE DISCRETION OF ORACLE.
  • 2.
    Copyright © 2013,Oracle and/or its affiliates. All rights reserved. 2 Insert Picture Here Резервное копирование MySQL в экстремальных условиях Света Смирнова Ведущий инженер технической поддержки Слайды подготовлены при участии Matt Lord, MySQL Product Manager
  • 3.
    Copyright © 2014,Oracle and/or its affiliates. All rights reserved. 3 Содержание  Введение  Что мы будем обсуждать  Копирование при: • Недостатке места • Нехватке времени • Ограниченных системных ресурсах  Как минимизировать влияние блокировок  Что делать при повреждении данных
  • 4.
    Copyright © 2014,Oracle and/or its affiliates. All rights reserved. 4 Insert Picture Here Введение
  • 5.
    Copyright © 2014,Oracle and/or its affiliates. All rights reserved. 5 О себе Света Смирнова  Инженер технической поддержки MySQL  Представитель поддержки в команде MySQL Enterprise Backup (MEB)  Постоянно работаю со сложными случаями при резервном копировании • Большинству клиентов стандартные рекомендации не подходят • Паттерны для сложных проблем
  • 6.
    Copyright © 2014,Oracle and/or its affiliates. All rights reserved. 6 Зачем нужны бэкапы? 1. Это ваша страховка на случай:  Поломки оборудования  Ошибки пользователя  Программной ошибки 2. Вы можете их использовать, чтобы создать новые инсталляции 3. Клонировать MySQL сервера для репликации 4. Данные -это наиболее важная часть вашей интеллектуальной собственности. Вы должны их защищать от потерь.
  • 7.
    Copyright © 2014,Oracle and/or its affiliates. All rights reserved. 7 Головоломка бэкапа 1. Инструменты, осуществляющие бэкап, гарантируют надёжность при помощи:  Табличных блокировок  Долговременных транзакций  Глобальных блокировок 2. Операции экспорта создают дополнительную нагрузку 3. Они требуют много свободного места на диске Качественно, быстро и дёшево не бывает
  • 8.
    Copyright © 2014,Oracle and/or its affiliates. All rights reserved. 8 Головоломка бэкапа Как же осуществлять экспорт данных с рабочей системы, где  Сервера постоянно выполняют критичные бизнес-операции  Приложение нельзя остановить ни на секунду  Любое замедление неприемлемо  Данных настолько много, что сложно найти ещё столько же для бэкапа ?
  • 9.
    Copyright © 2014,Oracle and/or its affiliates. All rights reserved. 9 Итак, как же осуществлять бэкап...  при недостатке места на локальном диске?  с минимальными ресурсозатратами?  с минимальным влиянием на MySQL сервер, с которого нужно скопировать данные?  когда нет времени?  без блокировки таблиц и всего MySQL сервера?  когда данные уже повреждены?
  • 10.
    Copyright © 2014,Oracle and/or its affiliates. All rights reserved. 10 О чём я не буду рассказывать  Полные бэкапы  Частичные бэкапы  Инкрементные бэкапы  Автоматизация бэкапов  Обычные приёмы оптимизации бэкапов Всё описано в официальной документации и white papers Существуют стандартные best practices Я уже рассказывала об этом  На прошлой Devconf  http://2013.devconf.ru/offers/12
  • 11.
    Copyright © 2014,Oracle and/or its affiliates. All rights reserved. 11 Инструменты  Только те, которые я сама использую  Основной инструмент: MySQL Enterprise Backup • Бинарный горячий бэкап • Коммерческий, доступен как часть подписки MySQL Enterprise  Можно заменить open source аналогом Percona Xtrabackup • Но я с ним не работаю!  Поэтому я всегда буду использовать MEB, а вы можете взять любой из этих двух инструментов  Я упомяну, если возможность недоступна для Xtrabackup  Все остальные инструменты бесплатны Только MEB! Только MEB!
  • 12.
    Copyright © 2014,Oracle and/or its affiliates. All rights reserved. 12 Insert Picture Here Нехватка места на диске
  • 13.
    Copyright © 2014,Oracle and/or its affiliates. All rights reserved. 13 Когда мало места на диске  При очень большом размере data директории  Когда осталось мало места на локальном диске  Вы можете использовать mysqldump, но он слишком медленный.  Можно просто скопировать файлы, но придётся остановить mysqld  Процесс MEB должен быть запущен на той же машине, что и MySQL сервер! shell# mysqldump –host=remote.host.com –port=3306 –single-transaction –master-data=1 –all-databases >backup.sql shell# mysqldump –host=remote.host.com –port=3306 –single-transaction –master-data=1 –all-databases >backup.sql
  • 14.
    Copyright © 2014,Oracle and/or its affiliates. All rights reserved. 14 Опции экспорта  Сжатые бэкапы: --compress, --compress-level=LEVEL, --compress- method=ALGORITHM  Стриминг при помощи SSH  Бэкап на ленту, при использовании интерфейса SBT  Частичные бэкапы: • --include-tables, --exclude-tables, --with-tts • --include, --databases  Инкрементные бэкапы  Не копируйте пустые и неиспользуемые страницы: --skip-unused-pages Только MEB! Только MEB! Только MEB!
  • 15.
    Copyright © 2014,Oracle and/or its affiliates. All rights reserved. 15 Опции экспорта: XtraBackup аналоги  Частичные бэкапы: • --include, --databases, --tables-file  Не копируйте secondary индексы: --compact  TTS support • Поддерживает на уровне restore: --apply-log + --export • Вам придётся вручную импортировать таблицу при помощи ALTER TABLE DISCARD TABLESPACE, с последующим копированием файлов и ALTER TABLE IMPORT TABLESPACE
  • 16.
    Copyright © 2014,Oracle and/or its affiliates. All rights reserved. 16 Опции экспорта: сжатие  Возможность сжатия до 80% и больше! shell# mysqlbackup --backup-dir=/opt/mysql/backups/uncompressed > backup 2>/dev/null && du -csh /opt/mysql/backups/uncompressed 334M /opt/mysql/backups/uncompressed 334M total shell# mysqlbackup --backup-dir=/opt/mysql/backups/compressed > --compress --compress-level=9 backup 2>/dev/null && du –csh > /opt/mysql/backups/compressed 81M /opt/mysql/backups/compressed 81M total shell# mysqlbackup --backup-dir=/opt/mysql/backups/uncompressed > backup 2>/dev/null && du -csh /opt/mysql/backups/uncompressed 334M /opt/mysql/backups/uncompressed 334M total shell# mysqlbackup --backup-dir=/opt/mysql/backups/compressed > --compress --compress-level=9 backup 2>/dev/null && du –csh > /opt/mysql/backups/compressed 81M /opt/mysql/backups/compressed 81M total
  • 17.
    Copyright © 2014,Oracle and/or its affiliates. All rights reserved. 17 Опции экспорта: сжатие ● Три алгоритма ● LZ4 ● Самый быстрый ● По умолчанию ● LZMA ● Самый эффективный ● ZLIB ● По умолчанию <= 3.9 ● Девять уровней ● Только ZLIB и LZMA Только MEB! XtraBackup использует алгоритм quicklz
  • 18.
    Copyright © 2014,Oracle and/or its affiliates. All rights reserved. 18 Опции экспорта: стриминг  Можно полностью отказаться от локального хранения Просто укажите директорию для временных файлов на время бэкапа Поддерживаются частичные бэкапы  Должна быть достаточно большой, чтобы сохранить все изменеия, случившиеся во время экспорта  Но не нужно дополнительного места для данных shell# mysqlbackup --backup-image=- --backup-dir=/tmp/backup > --disable-manifest backup-to-image 2>/dev/null | ssh matt@solo > "cat > /tmp/backup.img“ shell# ssh matt@solo "ls -lh /tmp/backup.img" -rw-r--r-- 1 matt staff 333M Sep 10 15:54 /tmp/backup.img shell# mysqlbackup --backup-image=- --backup-dir=/tmp/backup > --disable-manifest backup-to-image 2>/dev/null | ssh matt@solo > "cat > /tmp/backup.img“ shell# ssh matt@solo "ls -lh /tmp/backup.img" -rw-r--r-- 1 matt staff 333M Sep 10 15:54 /tmp/backup.img
  • 19.
    Copyright © 2014,Oracle and/or its affiliates. All rights reserved. 19 Опции экспорта: интерфейс SBT  Можно полностью отказаться от локального хранения  Просто передавайте бэкап MMS, что использует ваша компания – Oracle Secure Backup (полностью поддерживается) – IBM Tivoli Storage Manager – Symantec NetBackup – EMC NetWorker shell-osb# mysqlbackup --backup-image=sbt:backup-mattprod-2013-09-08 > --backup-dir=/tmp/backup backup-to-image shell-tsm# mysqlbackup --backup-image=sbt:my-tsm–backup > --sbt-lib-path=/usr/lib/libobk.so > --sbt-environment=“TDPO_OPTFILE=/opt/ibm/tsm/tdpo.opt” > --backup-dir=/tmp/backup backup-to-image shell-osb# mysqlbackup --backup-image=sbt:backup-mattprod-2013-09-08 > --backup-dir=/tmp/backup backup-to-image shell-tsm# mysqlbackup --backup-image=sbt:my-tsm–backup > --sbt-lib-path=/usr/lib/libobk.so > --sbt-environment=“TDPO_OPTFILE=/opt/ibm/tsm/tdpo.opt” > --backup-dir=/tmp/backup backup-to-image Только MEB!
  • 20.
    Copyright © 2014,Oracle and/or its affiliates. All rights reserved. 20 Опции экспорта: частичный бэкап  Копируйте только важные базы и таблицы  MEB поддерживает InnoDB transportable tablespaces во время бэкапа shell# mysqlbackup --include=sakila.* --only-innodb-with-frm=related > --backup-dir=/opt/mysql/backups backup shell# mysqlbackup --use-tts=with-minimum-locking > --include=employees.* --backup-dir=/opt/mysql/backups backup shell# mysqlbackup --include=sakila.* --only-innodb-with-frm=related > --backup-dir=/opt/mysql/backups backup shell# mysqlbackup --use-tts=with-minimum-locking > --include=employees.* --backup-dir=/opt/mysql/backups backup Только MEB!
  • 21.
    Copyright © 2014,Oracle and/or its affiliates. All rights reserved. 21 Опции экспорта: инкрементный бэкап  Копируйте только то, что изменилось с момента последнего бэкапа shell# mysqlbackup --incremental > --incremental-base=dir:/opt/mysql/backup/monday > --incremental-backup-dir=/opt/mysql/backup/tuesday backup shell# mysqlbackup --incremental > --incremental-base=history:last_backup --with-timestamp > --incremental-backup-dir=/opt/mysql/backup backup shell# mysqlbackup --incremental > --incremental-base=dir:/opt/mysql/backup/monday > --incremental-backup-dir=/opt/mysql/backup/tuesday backup shell# mysqlbackup --incremental > --incremental-base=history:last_backup --with-timestamp > --incremental-backup-dir=/opt/mysql/backup backup
  • 22.
    Copyright © 2014,Oracle and/or its affiliates. All rights reserved. 22 Опции экспорта: не копируйте пустые и неиспользуемые страницы  Укажите, что вы не хотитет копировать пустые и неиспользуемые страницы  Используйте эту опцию в сочетании с компрессией для большей эффективности shell# mysqlbackup --backup-dir=/opt/mysql/backups/compressed > --compress --compress-level=9 --skip-unused-pages backup shell# mysqlbackup --backup-dir=/opt/mysql/backups/compressed > --compress --compress-level=9 --skip-unused-pages backup Только MEB!
  • 23.
    Copyright © 2014,Oracle and/or its affiliates. All rights reserved. 23 Опции восстановления  В MEB 3.9+ возможно восстановление за один шаг – Даже для сжатого бэкапа и бэкапа в виде файла  Эта возможность позволяет избежать ненужного дублирования данных во время восстановления shell# ssh matt@solo "cat /opt/mysql/backups/backup.img" | mysqlbackup > --backup-dir=/tmp/backup --uncompress --backup-image=- > --datadir=/var/lib/mysql --innodb_log_group_home_dir=. > --innodb_log_files_in_group=4 --innodb_log_file_size=2G > --innodb_data_file_path="ibdata1:1G:autoextend" > copy-back-and-apply-log shell# ssh matt@solo "cat /opt/mysql/backups/backup.img" | mysqlbackup > --backup-dir=/tmp/backup --uncompress --backup-image=- > --datadir=/var/lib/mysql --innodb_log_group_home_dir=. > --innodb_log_files_in_group=4 --innodb_log_file_size=2G > --innodb_data_file_path="ibdata1:1G:autoextend" > copy-back-and-apply-log Только MEB!
  • 24.
    Copyright © 2014,Oracle and/or its affiliates. All rights reserved. 24 Insert Picture Here Недостаток времени
  • 25.
    Copyright © 2014,Oracle and/or its affiliates. All rights reserved. 25 Мне нужен бэкап сию минуту!  Невозможно установить время для проведения административных работ более 30 минут или даже меньшего срока  Бэкап может срочно потребоваться для установки дополнительного сервера  Требуется срочно переместить на другой сервер одну или несколько баз данных
  • 26.
    Copyright © 2014,Oracle and/or its affiliates. All rights reserved. 26 Методы экспорта  Бэкап файловой системы – Требует полностью остановить mysqld или, в лучшем случае, блокировать глобально  Логические бэкапы (mysqldump) – ОЧЕНЬ медленные, требуют много места на диске и используют слишком много блокировок  MySQL Enterprise Backup (MEB) – Горячие бэкапы транзакционного табличного движка InnoDB – Поддерживает много опций, регулирующих производительность и контроль ресурсов – Поддерживает частичные бэкапы и transportable tablespaces – Поддерживает инкрементные бэкапы
  • 27.
    Copyright © 2014,Oracle and/or its affiliates. All rights reserved. 27 MySQL Enterprise Backup В 49 раз быстрее mysqldump
  • 28.
    Copyright © 2014,Oracle and/or its affiliates. All rights reserved. 28 MySQL Enterprise Backup В 80 раз быстрее mysqldump
  • 29.
    Copyright © 2014,Oracle and/or its affiliates. All rights reserved. 29 MEB: опции производительности  Увеличьте количество буферов для CPU-интенсивных многопоточных операций: --number-of-buffers  Увеличьте количество нитей, используемых для чтения: --read-threads  Увеличьте количество нитей, используемых для записи: --write-threads  Увеличьте количестов CPU нитей: --process-threads  Увеличьте максимальное количество памяти, используемой для кэширования: --limit-memory  Не копируйте неиспользуемые страницы InnoDB: --skip-unused-pages Только MEB! Только MEB!
  • 30.
    Copyright © 2014,Oracle and/or its affiliates. All rights reserved. 30 Опции производительности: XtraBackup аналоги  Количество нитей, осуществляющих компрессию • --compress-threads  Количество нитей, используемых для копирования файлов *.ibd • --parallel  Ограничить количество операций IO в секунду • --throttle
  • 31.
    Copyright © 2014,Oracle and/or its affiliates. All rights reserved. 31 Пример: сколько времени?  2G datadir, 1 7.2K HDD, 4 vCPUs , 16G of RAM shell# time mysqlbackup --backup-dir=/opt/mysql/backups --with-timestamp backup 2>/tmp/log.txt real 0m34.403s user 0m3.069s sys 0m2.043s shell# time mysqlbackup --backup-dir=/opt/mysql/backups > --process-threads=4 --limit-memory=1000 --skip-unused-pages > --with-timestamp backup 2>/tmp/log.txt real 0m29.883s user 0m3.121s sys 0m1.889s shell# time mysqlbackup --backup-dir=/opt/mysql/backups --with-timestamp backup 2>/tmp/log.txt real 0m34.403s user 0m3.069s sys 0m2.043s shell# time mysqlbackup --backup-dir=/opt/mysql/backups > --process-threads=4 --limit-memory=1000 --skip-unused-pages > --with-timestamp backup 2>/tmp/log.txt real 0m29.883s user 0m3.121s sys 0m1.889s  Грамотное использование опций сокращает время бэкапа до 50% на машинах с большими наборами данных, используемых крупными предприятиями
  • 32.
    Copyright © 2014,Oracle and/or its affiliates. All rights reserved. 32 Insert Picture Here Нехватка системных ресурсов
  • 33.
    Copyright © 2014,Oracle and/or its affiliates. All rights reserved. 33 Почему приложение вдруг стало работать медленно?  Бэкапы могут сильно загружать процессор (CPU intensive)  Бэкапы могут нагружать диск (быть I/O intensive), что, в свою очередь, увеличивает CPU cycles в IO_Wait  Бэкапы могут захватывать различные блокировки MySQL сервера  Так как же экспортировать данные и при этом не переживать значительных замедлений в работе приложения…
  • 34.
    Copyright © 2014,Oracle and/or its affiliates. All rights reserved. 34 Опции бэкапа  Ограничить использование памяти: --limit-memory  Ограничить использование CPU: --process-threads  Ждать X ms после копирования каждого блока данных: --sleep  Не использовать блокировки: --no-locking, --innodb-only  Ограничить операции ввода-вывода: --read-threads, --write-threads  Не копировать неиспользуемые страницы: --skip-unused-pages  Ограничить использование ресурсов на уровне операционной системы: cgroups, taskset, cpulimit, etc. Только MEB! Только MEB!
  • 35.
    Copyright © 2014,Oracle and/or its affiliates. All rights reserved. 35 Пример: использование ресурсов  2G datadir, 1 7.2K HDD, 4 vCPUs , 16G of RAM shell# /usr/bin/time -f 'Exec Time: %E, CPU: %P, MEM: %MKB, IO: %O' > mysqlbackup --backup-dir=/opt/mysql/backups --with-timestamp > backup 2>&1 | tail -1 Exec Time: 0:23.11, CPU: 21%, MEM: 951648KB, IO: 4229360 shell# taskset -c 1 /usr/bin/time -f > 'Exec Time: %E, CPU: %P, MEM: %MKB, IO: %O' mysqlbackup > --backup-dir=/opt/mysql/backups --limit-memory=50 > --process-threads=1 --skip-unused-pages --no-locking --sleep=2000 > --with-timestamp backup 2>&1 | tail -1 Exec Time: 4:22.06, CPU: 1%, MEM: 222096KB, IO: 3384064 shell# /usr/bin/time -f 'Exec Time: %E, CPU: %P, MEM: %MKB, IO: %O' > mysqlbackup --backup-dir=/opt/mysql/backups --with-timestamp > backup 2>&1 | tail -1 Exec Time: 0:23.11, CPU: 21%, MEM: 951648KB, IO: 4229360 shell# taskset -c 1 /usr/bin/time -f > 'Exec Time: %E, CPU: %P, MEM: %MKB, IO: %O' mysqlbackup > --backup-dir=/opt/mysql/backups --limit-memory=50 > --process-threads=1 --skip-unused-pages --no-locking --sleep=2000 > --with-timestamp backup 2>&1 | tail -1 Exec Time: 4:22.06, CPU: 1%, MEM: 222096KB, IO: 3384064
  • 36.
    Copyright © 2014,Oracle and/or its affiliates. All rights reserved. 36 Insert Picture Here Минимизация блокировок
  • 37.
    Copyright © 2014,Oracle and/or its affiliates. All rights reserved. 37 MEB: опции, регулирующие блокировки  Исключить ЛЮБЫЕ блокировки: --no-locking (небезопасно, если у вас есть нетранзакционные таблицы)  Экспортировать только транзакционные данные: --innodb-only  Инкрементный бэкап, используя только redo log: --incremental-with- redo-log-only  Частичные бэкапы с минимальными блокировками: --use-tts=with- minimum-locking Только MEB!
  • 38.
    Copyright © 2014,Oracle and/or its affiliates. All rights reserved. 38 Разве бэкапы MEB не “горячи”?  FLUSH TABLES WITH READ LOCK используется при окончании работы – Необходимо, чтобы получить снапшот нетранзакционных данных  Можно избежать при помощи опций: – Не брать никаких локов: --no-locking – Экспортировать только таблицы InnoDB: --only-innodb[-with-frm] Только MEB!
  • 39.
    Copyright © 2014,Oracle and/or its affiliates. All rights reserved. 39 Что делать с нетранзакционными данными?  mysqlhotcopy – блокирует и копирует файлы таблиц по одной  mysqldump – блокирует и экспортирует каждую таблицу в SQL, XML или CSV файл  FS snapshots – скопируйте файлы таблиц  Используйте MySQL Replication Slave для бэкапов  mysqlbinlog –read-from-remote-server --raww  Количество нетранзакционных данных будет продолжать уменьшаться в MySQL 5.7
  • 40.
    Copyright © 2014,Oracle and/or its affiliates. All rights reserved. 40 Итоги: экспорт с минимальными затратами Ограничьте количество используемой памяти:  MEB: --limit-memory, --sleep, --[read|write|process]-threads  Перенаправьте бэкап на удалённую машину Копируйте столько данных, сколько необходимо:  MEB: частичные бэкапы с опцией --use-tts=with-minimum-locking  MEB: не копируйте неиспользуемые страницы --skip-unused-pages (только InnoDB)  MEB: инкрементные бэкапы, использующие только redo log (только InnoDB) Используйте полностью неблокирующие бэкапы:  MEB: --only-innodb, --only-innodb-with-frm, --no-locking – Небезопасно для файлов .frm и нетранзакционных данных
  • 41.
    Copyright © 2014,Oracle and/or its affiliates. All rights reserved. 41 Insert Picture Here Повреждённые данные
  • 42.
    Copyright © 2014,Oracle and/or its affiliates. All rights reserved. 42 Бэкапы и повреждённые данные Иногда таблицы повреждаются! Если данные на рабочей машине повреждены, но бэкап в порядке:  Полностью или частично (--with-tts) восстановите данные  Накатите изменения и бинарных логов Если данные повреждены и на рабочей машине, и в бэкапе (бэкапа нет):  InnoDB – --innodb_force_recovery – SELECT INTO OUTFILE  MyISAM – myisamchk
  • 43.
    Copyright © 2014,Oracle and/or its affiliates. All rights reserved. 43 Бэкапы и повреждённые данные Что делать если:  У вас есть только полный бэкап, сделанный MEB, но вам нужно восстановить одну таблицу  Вы не можете запустить ещё один MySQL сервер  Ваша версия MySQL не поддерживает TTS MyISAM  Просто скопируйте файлы .frm, .MYI, и .MYD InnoDB  Так просто не получится  Потому что каждая таблица должна иметь одинаковый ID в shared tablespace и на бэкапе, и на рабочем сервере
  • 44.
    Copyright © 2014,Oracle and/or its affiliates. All rights reserved. 44 Бэкапы и повреждённые данные: полный Backup и InnoDB Если вы можете развернуть новую инсталляцию MySQL на отдельном сервере  Сделайте это!  Если ваша версия MySQL поддерживает TTS – Скопируйте таблицу при помощи MEB и опции --use-tts – Восстановите её
  • 45.
    Copyright © 2014,Oracle and/or its affiliates. All rights reserved. 45 Бэкапы и повреждённые данные: полный бэкап и InnoDB Если вы не можете!  Задачка  Каждая InnoDB таблица должна иметь одинаковый ID в shared tablespace и на бэкапе, и на рабочем сервере – Они могу совпадать, если: – Это бэкап того самого сервера – Вы изначально клонировали этот сервер из данного бэкапа – и – Вы используете опцию –innodb-file-per-table – Просто скопируйте файл .ibd
  • 46.
    Copyright © 2014,Oracle and/or its affiliates. All rights reserved. 46 Бэкапы и повреждённые данные: полный бэкап и InnoDB Если ID не одинаково, но вы используете опцию –innodb-file_per_table  Восстановите вручную – Имитируйте внутренний InnoDB table counter – Запустите новый MySQL сервер – Создавайте, затем удаляйте (drop) таблицы с той же структурой, что и оригинальная до тех пор, пока counter не достигнет нужного значения – Импортируйте таблицу из бэкапа на подготовленный MySQL сервер – Скопируйте и восстановите таблицу на рабочем сервере • mysqlbackup –use-tts –include-tables=dbname.tablename backup • mysqldump dbname tablename
  • 47.
    Copyright © 2014,Oracle and/or its affiliates. All rights reserved. 47 Бэкапы и повреждённые данные: полный бэкап и InnoDB Как узнать, что набирать в команде CREATE TABLE ?  mysqlfrm, the FRM reader придёт на помощь $ mysqlfrm --basedir=/usr/local/bin/mysql test1:city.frm --port=3333 # Starting the spawned server on port 3333 ... done. # Reading .frm files # # Reading the city.frm file. # # CREATE statement for city.frm: # CREATE TABLE `test1`.`city` ( … $ mysqlfrm --basedir=/usr/local/bin/mysql test1:city.frm --port=3333 # Starting the spawned server on port 3333 ... done. # Reading .frm files # # Reading the city.frm file. # # CREATE statement for city.frm: # CREATE TABLE `test1`.`city` ( …
  • 48.
    Copyright © 2014,Oracle and/or its affiliates. All rights reserved. 48 Insert Picture Here Заключение
  • 49.
    Copyright © 2014,Oracle and/or its affiliates. All rights reserved. 49 Заключение  Бэкапы необходимы  Ограничения, налагаемые работой приложений, - это жизненный факт  Сложные проблемы могут быть решены при помощи MySQL Enterprise Backup  MySQL Support поможет, если вы столкнётесь с проблемой
  • 50.
    Copyright © 2014,Oracle and/or its affiliates. All rights reserved. 50 Ссылки Документация:  http://dev.mysql.com/doc/mysql-enterprise-backup/3.10/en/index.html  http://dev.mysql.com/doc/mysql-utilities/1.4/en/mysqlfrm.html  https://blogs.oracle.com/mysqlenterprisebackup/ 30-дневная пробная версия MySQL Enterprise Backup:  https://edelivery.oracle.com/
  • 51.
    Copyright © 2013,Oracle and/or its affiliates. All rights reserved. 51 Insert Picture HereСПАСИБО!