Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Percona XtraBackup:экспертные возможности  alexey.kopytov@percona.com
Свободная утилита для резервного копирования                       СУБД MySQL            5.0             5.0              ...
Бэкап — копия данныхЧем плох cp/scp/rsync/mc?
Как работает InnoDB?
Восстановление после сбоя
Идея реализации
Подготовка к восстановлению
Инкрементальные бэкапы
Инкрементальные бэкапы
Инкрементальные бэкапы:    плюсы и минусы
Нетранзакционные данные●   .frm файлы●   MyISAM, CSV, Archive, ...●   информация о master/slave в репликации    (исправлен...
Нетранзакционные данные   Требуют блокировки(FLUSH   TABLES WITH READ LOCK)
XtraBackupxtrabackup                 innobackupex ibdata1, *.ibd,            .frm, MyISAM, CSV,     логи                FL...
Основные команды:●   создать резервную копию    –   innobackupex /mnt/data/backup●   подготовить к восстановлению    –   i...
Потоковый режимКомпрессия innobackupex --stream=tar . | gzip - >              /data/backup/backup.tar.gz
Потоковый режимШифрование innobackupex --stream=tar . |   openssl des3 -salt -k “password” >   backup.tar.des3
Потоковый режимКопирование на другой хост innobackupex --stream=tar . |   ssh user@host "tar -xif - -C /data/backup"
Потоковый режимВсё сразу  innobackupex --stream=tar . |    gzip - |    openssl des3 -salt -k "password" |    ssh user@host...
Производительность(минимизация overhead)
Минимизация overhead                       РесурсыРесурсы          XtraBackup          Свободно               Свободно    ...
I/O throttling--throttle=N   Ограничить скорость копирования до N МБ/с          секунда 1                   секунда 2     ...
I/O throttling Ограничение:        --throttle работает только с таблицами InnoDB.Решение: потоковый режим + утилита pv:$ i...
Оптимизация кэша      Дисковый кэш                      XtraBackup                 Холодные                 данные        ...
Оптимизация кэшана Linux:–   posix_fadvise(POSIX_FADV_DONTNEED)–   данные не кэшируются–   работает автоматически
Параллельное копирование       Сервер        --parallel=4             Бэкап       ibdata1                               ib...
Параллельное копирование$ innobackupex --parallel=4 --no-timestamp /data/backup...[01] Copying ./ibdata1 to /data/backup/i...
Блокировка сервера
Что делаетFLUSH TABLES WITH READ LOCK?●   устанавливает глобальную блокировку на    запись    –   INSERT/UPDATE/DELETE/ALT...
Проблема №1●   при закрытии таблиц FTWRL ждёт, пока    завершаться все текущие запросы●   SELECT * FROM BIG_TABLE может   ...
Решение:Убивать длинные запросы до началакопирования
Проблема №2●   большие MyISAM таблицы●   блокируют запись на время их копирования●   пример: забытая временная таблица на ...
Решение №1:innobackupex --rsync–   использует rsync для копирования    нетранзакционных данных–   два этапа:    ●   копиру...
Пример --rsync$ innobackupex --rsync /mnt/backup...120926 15:23:44 Starting rsync as: rsync -t "/var/lib/mysql" --files-fr...
Решение №2:innobackupex --no-lock–   не выполняет FLUSH TABLES WITH READ LOCK
--no-lock●   убедитесь, что во время создания бэкапа НЕ    выполняются:    –   ALTER TABLE на любые таблицы;    –   INSERT...
Статистика
Последовательная вставка
Случайная вставка
Фрагментация
xtrabackup --statstable: tpcc/order_line, index: PRIMARY, space id: 25, rootpage: 3, zip size: 0  estimated statistics in ...
Что делать?●   перестроить фрагментированные индексы:    –   OPTIMIZE TABLE для PRIMARY KEY    –   DROP INDEX / CREATE IND...
Частичноекопирование/восстановление
Экспорт                                Полный бэкап     Сервер 1                      ibdata                       Сервер ...
Экспорт    Почему просто не скопировать .ibd файлы?●   метаданные:    –   InnoDB data dictionary (space ID, index ID, указ...
Экспорт$ innobackupex --apply-log --export  --target-dir=/data/backup...xtrabackup: export metadata of tablesakila/custome...
Импорт в Percona Server●   Percona Server:    –   поддерживает восстановление на другом хосте1. (на другом хосте)    CREAT...
Импорт в MySQL●   "обычный" MySQL:    –   можно восстановить только на том же хосте    –   не допускаются DROP/CREATE/TRUN...
Частичное копирование●   скопировать таблицы/базы, а не все данные●   InnoDB таблицы:    –   требуют innodb_file_per_table...
Как скопировать                отдельные таблицы?●   --databases=”database1[.table1] ...”,    пример: --databases=”employe...
Подготовка частичного бэкапа:$ innobackupex --apply-log --export /data/backup...120407 18:04:57 InnoDB: Error: table sakil...
Восстановление из                  частичного бэкапа●   Не-InnoDB таблицы    –   можно просто скопировать файлы●   InnoDB ...
Отдельные партиции             CREATE TABLE reports (d DATE, t TEXT)             PARTITION BY RANGE (YEAR(d))reports      ...
Как копировать               отдельные партиции?$ ls -1 /usr/local/mysql/data/test/reports*/usr/local/mysql/data/test/repo...
Как копировать отдельные               партиции?$ xtrabackup --backup  --datadir=/usr/local/mysql/data/  --tables=reports#...
Подготовка$ xtrabackup --prepare --export    --target-dir=./$ ls -1 test/reports#P#p_2010.expreports#P#p_2010.ibd
Восстановление●   в MySQL можно восстановить только    как отдельную таблицу:mysql> CREATE TABLE reports_2010(  d DATE, t ...
Восстановление$ cp /data/backup/test/reports#P#p_2010.exp  /usr/local/mysql/data/test/reports_2010.exp$ cp /data/backup/te...
Point-in-time recovery
Point-in-Time Recovery
Бинарный лог
Бинарный лог
Координаты и XtraBackup●   печатаются по завершении копирования:innobackupex: Backup created in directory /mnt/backup/full...
Point-in-Time Recoverymysqlbinlog для проигрывания бинарного логас момента последнего бэкапа до нужногомомента времени:$ m...
Клонирование узлов   в репликации
Копирование слейва
xtrabackup_slave_info●   innobackupex --slave-info    –   записывает позицию чтения бинарного лога на        мастере для т...
Клонирование слейва
Пример:клонирование в потоковом режиме1. innobackupex --stream=tar /tmp --slave-info |     ssh user@NEWSLAVE     "tar xfi ...
Добавление нового узлав Percona XtraDB Cluster:
Новые функции в XtraBackup 2.0
Новые функции в                XtraBackup 2.0●   потоковые инкрементальные бэкапы●   встроенная параллельная компрессия●  ...
Потоковые инкрементальные                 бэкапы●   проблема: потоковые инкрементальные бэкапы не    работали в XtraBackup...
Встроенная компрессия●   с дисковым местом всегда проблемы●   компрессия внешними утилитами имеет    ограничения
Компрессия внешними утилитами    innobackupex --stream=tar . |      gzip - > /data/backup.tar.gz●   gzip/bzip2 однопоточны...
Встроенная компрессия●   новая опция innobackupex --compress●   использует QuickLZ: http://quicklz.com/    –   “the worlds...
Встроенная компрессия●   многопоточная (компрессия и декомпрессия)●   можно использовать вместе с параллельным    копирова...
Проблемы с tar●   компрессия в потоковом режиме невозможна●   параллельное копирование невозможно●   инкрементальные бэкап...
Формат xbstream   chunk header           ●                              можно отправлять вactor.ibd.gz chunk #1         по...
Утилита xbstream●   используется для извлечения файлов из    потоков xbstream●   tar-подобный интерфейс:    –   xbstream -...
xbstream: пример$ innobackupex --parallel=8  --compress --compress-threads=4  --stream=xbstream ./ |  ssh user@host ”xbstr...
Восстановление InnoDB buffer pool●   Percona Server:                                 InnoDB buffer pool    most recently u...
Восстановление InnoDB buffer pool●   XtraBackup 2.0:    –   автоматически копирует ib_lru_dump    –   buffer pool в "горяч...
Новые функции в XtraBackup 2.x
Быстрые инкрементальные бэкапы
Быстрые инкрементальные бэкапы●   2 решения:    –   отслеживать модификации страниц        на стороне сервера    –   архив...
Отслеживание модификаций ●   changed page tracking     (новая функция в Percona Server):   datadir                   bitma...
Архивирование логов на сервере●    log archiving     (новая функция в Percona Server)      datadir              log_archiv...
Компактные бэкапы●   идея: исключать "несущественные" страницы    из бэкапа                   страницы в данных1      2   ...
Компактные бэкапы●   Плюсы:    –   меньше места на диске (иногда гораздо меньше)    –   высвобождают неиспользованные стра...
Встроенное шифрование●   многопоточное●   расшифровка/восстановление отдельных таблиц                      I/O threads    ...
Итоги●   Архитектура●   Базовые возможности    –   полные и инкрементальные бэкапы    –   потоковый режим●   Производитель...
Итоги●   Блокировка    –   --no-lock    –   --rsync●   Статистика●   Частичное копирование и восстановление●   Point-in-Ti...
Итоги●   Новые функции в XtraBackup 2.0:    –   встроенная параллельная компрессия    –   потоковые инкрементальные бэкапы...
Ссылки●    Документация:    http://www.percona.com/doc/percona-xtrabackup/●    Скачать:    http://www.percona.com/software...
Вопросы?Слайды:http://bit.ly/HL2012-XB
Upcoming SlideShare
Loading in …5
×

Percona XtraBackup: экспертные возможности (Алексей Копытов)

5,641 views

Published on

Percona XtraBackup: экспертные возможности (Алексей Копытов)

  1. 1. Percona XtraBackup:экспертные возможности alexey.kopytov@percona.com
  2. 2. Свободная утилита для резервного копирования СУБД MySQL 5.0 5.0 5.1, 5.55.1 + встроенная InnoDB (стандартные 5.1 + InnoDB плагин 5.1 storage engines) 5.5 5.5 5.2, 5.3, 10.0 (скоро)
  3. 3. Бэкап — копия данныхЧем плох cp/scp/rsync/mc?
  4. 4. Как работает InnoDB?
  5. 5. Восстановление после сбоя
  6. 6. Идея реализации
  7. 7. Подготовка к восстановлению
  8. 8. Инкрементальные бэкапы
  9. 9. Инкрементальные бэкапы
  10. 10. Инкрементальные бэкапы: плюсы и минусы
  11. 11. Нетранзакционные данные● .frm файлы● MyISAM, CSV, Archive, ...● информация о master/slave в репликации (исправлено в MySQL 5.6)
  12. 12. Нетранзакционные данные Требуют блокировки(FLUSH TABLES WITH READ LOCK)
  13. 13. XtraBackupxtrabackup innobackupex ibdata1, *.ibd, .frm, MyISAM, CSV, логи FLUSH TABLES WITH READ LOCK
  14. 14. Основные команды:● создать резервную копию – innobackupex /mnt/data/backup● подготовить к восстановлению – innobackupex --apply-log /mnt/data/backup● восстановить – innobackupex --copy-back /mnt/data/backup
  15. 15. Потоковый режимКомпрессия innobackupex --stream=tar . | gzip - > /data/backup/backup.tar.gz
  16. 16. Потоковый режимШифрование innobackupex --stream=tar . | openssl des3 -salt -k “password” > backup.tar.des3
  17. 17. Потоковый режимКопирование на другой хост innobackupex --stream=tar . | ssh user@host "tar -xif - -C /data/backup"
  18. 18. Потоковый режимВсё сразу innobackupex --stream=tar . | gzip - | openssl des3 -salt -k "password" | ssh user@host "cat - > /data/backup.tar.gz.des3"
  19. 19. Производительность(минимизация overhead)
  20. 20. Минимизация overhead РесурсыРесурсы XtraBackup Свободно Свободно Сервер Сервер XtraBackup
  21. 21. I/O throttling--throttle=N Ограничить скорость копирования до N МБ/с секунда 1 секунда 2 секунда 3 read write read write read write read write read write read write read write read write read write read write read write read write xtrabackup --throttle=1 ... секунда1 секунда 2 секунда 3 read write read write wait wait read write read write wait wait read write read write wait wait
  22. 22. I/O throttling Ограничение: --throttle работает только с таблицами InnoDB.Решение: потоковый режим + утилита pv:$ innobackupex --stream=tar /tmp | pv -q -L1m | tar -xvf - -C /data/backup
  23. 23. Оптимизация кэша Дисковый кэш XtraBackup Холодные данные Холодные Горячие данные данные Горячие данные● кэш заполняется "холодными" данными● "горячие" данные могут уйти в swap
  24. 24. Оптимизация кэшана Linux:– posix_fadvise(POSIX_FADV_DONTNEED)– данные не кэшируются– работает автоматически
  25. 25. Параллельное копирование Сервер --parallel=4 Бэкап ibdata1 ibdata1 actor.ibd actor.ibd customer.ibd customer.ibd film.ibd film.ibd● параллельное копирование в N потоков● эффективное использование диска● лучше всего заметно на SSD● может ускорить копирование с/на HDD
  26. 26. Параллельное копирование$ innobackupex --parallel=4 --no-timestamp /data/backup...[01] Copying ./ibdata1 to /data/backup/ibdata1[02] Copying ./sakila/actor.ibd to /data/backup/./sakila/actor.ibd[03] Copying ./sakila/customer.ibd to/data/backup/./sakila/customer.ibd[04] Copying ./sakila/film.ibd to /data/backup/./sakila/film.ibd● имеет смысл только с innodb_file_per_table=1● в XtraBackup 1.6 не работало в потоковом режиме● исправлено в XtraBackup 2.0
  27. 27. Блокировка сервера
  28. 28. Что делаетFLUSH TABLES WITH READ LOCK?● устанавливает глобальную блокировку на запись – INSERT/UPDATE/DELETE/ALTER блокируются● закрывает открытые таблицы – ждёт, пока все текущие запросы завершатся● блокирует COMMIT
  29. 29. Проблема №1● при закрытии таблиц FTWRL ждёт, пока завершаться все текущие запросы● SELECT * FROM BIG_TABLE может заблокировать XtraBackup
  30. 30. Решение:Убивать длинные запросы до началакопирования
  31. 31. Проблема №2● большие MyISAM таблицы● блокируют запись на время их копирования● пример: забытая временная таблица на 100GB
  32. 32. Решение №1:innobackupex --rsync– использует rsync для копирования нетранзакционных данных– два этапа: ● копирует основную часть до блокировки ● копирует "дельту" внутри блокировки– НЕ работает в потоковом режиме
  33. 33. Пример --rsync$ innobackupex --rsync /mnt/backup...120926 15:23:44 Starting rsync as: rsync -t "/var/lib/mysql" --files-from="/tmp/xtrabackup_rsyncfiles_pass1" "/mnt/backup/2012-09-26_15-23-36"120926 15:23:45 rsync finished successfully.120926 15:23:45 innobackupex: Finished a prep copy of .frm, .MRG,.MYD, .MYI, .TRG, .TRN, .ARM, .ARZ, .CSV, .CSM and .opt files...120926 15:23:55 innobackupex: All tables locked and flushed to disk120926 15:23:55 Starting rsync as: rsync -t "/var/lib/mysql" --files-from="/tmp/xtrabackup_rsyncfiles_pass2" "/mnt/backup/2012-09-26_15-23-36"120926 15:23:55 rsync finished successfully....120926 15:23:55 innobackupex: All tables unlocked
  34. 34. Решение №2:innobackupex --no-lock– не выполняет FLUSH TABLES WITH READ LOCK
  35. 35. --no-lock● убедитесь, что во время создания бэкапа НЕ выполняются: – ALTER TABLE на любые таблицы; – INSERT/UPDATE/DELETE на MyISAM таблицы
  36. 36. Статистика
  37. 37. Последовательная вставка
  38. 38. Случайная вставка
  39. 39. Фрагментация
  40. 40. xtrabackup --statstable: tpcc/order_line, index: PRIMARY, space id: 25, rootpage: 3, zip size: 0 estimated statistics in dictionary: key vals: 32471816, leaf pages: 264267, size pages: 302592 real statistics: level 2 pages: pages=1, data=8406 bytes, data/pages=51% level 1 pages: pages=467, data=4756806 bytes,data/pages=62% leaf pages: recs=35116662, pages=264267,data=2410713870 bytes, data/pages=55%
  41. 41. Что делать?● перестроить фрагментированные индексы: – OPTIMIZE TABLE для PRIMARY KEY – DROP INDEX / CREATE INDEX для вторичных индексов (fast index creation!)
  42. 42. Частичноекопирование/восстановление
  43. 43. Экспорт Полный бэкап Сервер 1 ibdata Сервер 2 ibdata ibdata Бэкап actor.ibd actor.ibd actor.ibd customer.ibd экспорт customer.ibd customer.ibd film.ibd film.ibd film.ibd● проблема: восстановить отдельные таблицы InnoDB из полного бэкапа● innobackupex --export для подготовки● использовать improved table import в Percona Server для восстановления● innodb_file_per_table=1
  44. 44. Экспорт Почему просто не скопировать .ibd файлы?● метаданные: – InnoDB data dictionary (space ID, index ID, указатели на корневые индексные страницы). Хранится в основном tablespace (ibdata1) – служебные записи в .ibd файлах (space ID, LSN, trx ID, index ID и т.д.)● innobackupex --export записывает метаданные в .exp файлы● Percona Server использует .exp файлы для импорта
  45. 45. Экспорт$ innobackupex --apply-log --export --target-dir=/data/backup...xtrabackup: export metadata of tablesakila/customer to file `./sakila/customer.exp`(4 indexes)xtrabackup: name=PRIMARY, id.low=23, page=3xtrabackup: name=idx_fk_store_id, id.low=24,page=4xtrabackup: name=idx_fk_address_id, id.low=25,page=5xtrabackup: name=idx_last_name, id.low=26,page=6...
  46. 46. Импорт в Percona Server● Percona Server: – поддерживает восстановление на другом хосте1. (на другом хосте) CREATE TABLE customer(...);2. SET FOREIGN_KEY_CHECKS=0;3. ALTER TABLE customer DISCARD TABLESPACE;4. копируем customer.ibd на другой хост5. SET GLOBAL innodb_import_table_from_xtrabackup=1;6. ALTER TABLE customer IMPORT TABLESPACE;7. SET FOREIGN_KEY_CHECKS=1;
  47. 47. Импорт в MySQL● "обычный" MySQL: – можно восстановить только на том же хосте – не допускаются DROP/CREATE/TRUNCATE/ALTER между копированием и импортом1. ALTER TABLE customer DISCARD TABLESPACE;2. <копируем customer.ibd в директорию данных>3. ALTER TABLE customer IMPORT TABLESPACE;
  48. 48. Частичное копирование● скопировать таблицы/базы, а не все данные● InnoDB таблицы: – требуют innodb_file_per_table=1 – процедура восстановления такая же (DISCARD TABLESPACE) – те же ограничения в "обычном" MySQL – нет ограничений в Percona Server innodb_import_table_from_xtrabackup=1
  49. 49. Как скопировать отдельные таблицы?● --databases=”database1[.table1] ...”, пример: --databases=”employees sales.orders”● --tables-file=filename, файл содержит database.table, по одной на строчку● --include=regexp, пример: --include=^database(1|2).reports.*
  50. 50. Подготовка частичного бэкапа:$ innobackupex --apply-log --export /data/backup...120407 18:04:57 InnoDB: Error: table sakila/storeInnoDB: in InnoDB data dictionary has tablespace id 24,InnoDB: but tablespace with that id or name does not exist.It will be removed from data dictionary....xtrabackup: export option is specified.xtrabackup: export metadata of table sakila/customer tofile `./sakila/customer.exp` (4 indexes)xtrabackup: name=PRIMARY, id.low=62, page=3xtrabackup: name=idx_fk_store_id, id.low=63, page=4xtrabackup: name=idx_fk_address_id, id.low=64, page=5xtrabackup: name=idx_last_name, id.low=65, page=6...
  51. 51. Восстановление из частичного бэкапа● Не-InnoDB таблицы – можно просто скопировать файлы● InnoDB (MySQL): – ALTER TABLE ... DISCARD/IMPORT TABLESPACE – те же ограничения (тот же сервер, без ALTER/DROP/TRUNCATE после копирования)● XtraDB (Percona Server): – xtrabackup --export при подготовке – innodb_import_table_from_xtrabackup=1; – ALTER TABLE ... DISCARD/IMPORT TABLESPACE – нет ограничений
  52. 52. Отдельные партиции CREATE TABLE reports (d DATE, t TEXT) PARTITION BY RANGE (YEAR(d))reports ( PARTITION p_2010 VALUES LESS THAN (2010), PARTITION p_2011 VALUES LESS THAN (2011),p_2010 PARTITION p_2012 VALUES LESS THAN (2012), PARTITION p_cur VALUES LESS THANp_2011 (MAXVALUE) );p_2012 Хочется:p_cur ● скопировать p_2010 ● удалить p_2010
  53. 53. Как копировать отдельные партиции?$ ls -1 /usr/local/mysql/data/test/reports*/usr/local/mysql/data/test/reports#P#p_2010.ibd/usr/local/mysql/data/test/reports#P#p_2011.ibd/usr/local/mysql/data/test/reports#P#p_2012.ibd/usr/local/mysql/data/test/reports#P#p_cur.ibd/usr/local/mysql/data/test/reports.frm/usr/local/mysql/data/test/reports.par
  54. 54. Как копировать отдельные партиции?$ xtrabackup --backup --datadir=/usr/local/mysql/data/ --tables=reports#P#p_2010...[01] Copying ./ibdata1 to /data/backup/ibdata1[01] ...done[01] Copying ./test/reports#P#p_2010.ibd to/data/backup/./test/reports#P#p_2010.ibd[01] ...done[01] Skipping ./test/reports#P#p_2011.ibd[01] Skipping ./test/reports#P#p_2012.ibd[01] Skipping ./test/reports#P#p_cur.ibd
  55. 55. Подготовка$ xtrabackup --prepare --export --target-dir=./$ ls -1 test/reports#P#p_2010.expreports#P#p_2010.ibd
  56. 56. Восстановление● в MySQL можно восстановить только как отдельную таблицу:mysql> CREATE TABLE reports_2010( d DATE, t TEXT);mysql> ALTER TABLE reports_2010 DISCARDTABLESPACE;
  57. 57. Восстановление$ cp /data/backup/test/reports#P#p_2010.exp /usr/local/mysql/data/test/reports_2010.exp$ cp /data/backup/test/reports#P#p_2010.ibd /usr/local/mysql/data/test/reports_2010.ibdmysql> SET GLOBAL innodb_import_table_from_xtrabackup=1;mysql> ALTER TABLE report_2010 IMPORT TABLESPACE;● та же процедура для MyISAM (только без ALTER TABLE)
  58. 58. Point-in-time recovery
  59. 59. Point-in-Time Recovery
  60. 60. Бинарный лог
  61. 61. Бинарный лог
  62. 62. Координаты и XtraBackup● печатаются по завершении копирования:innobackupex: Backup created in directory /mnt/backup/fullinnobackupex: MySQL binlog position:filename mysql-bin.000001, position 418155120925 17:22:16 innobackupex: completed OK!● сохраняются в директории бэкапа в файле xtrabackup_binlog_info:mysql-bin.000001 418155
  63. 63. Point-in-Time Recoverymysqlbinlog для проигрывания бинарного логас момента последнего бэкапа до нужногомомента времени:$ mysqlbinlog --start-position=418155 --stop-datetime="2012-10-21 13:50:00" mysql-bin.00001
  64. 64. Клонирование узлов в репликации
  65. 65. Копирование слейва
  66. 66. xtrabackup_slave_info● innobackupex --slave-info – записывает позицию чтения бинарного лога на мастере для текущего слейва – сохраняется в xtrabackup_binlog_info в виде команды CHANGE MASTER:CHANGE MASTER TOMASTER_LOG_FILE=mysql-bin.00001MASTER_LOG_POS=68212201;
  67. 67. Клонирование слейва
  68. 68. Пример:клонирование в потоковом режиме1. innobackupex --stream=tar /tmp --slave-info | ssh user@NEWSLAVE "tar xfi - -C /var/lib/mysql" На новом слейве:2. innobackupex --apply-log /var/lib/mysql3. выполнить CHANGE MASTER из xtrabackup_slave_info
  69. 69. Добавление нового узлав Percona XtraDB Cluster:
  70. 70. Новые функции в XtraBackup 2.0
  71. 71. Новые функции в XtraBackup 2.0● потоковые инкрементальные бэкапы● встроенная параллельная компрессия● xbstream● копирование/восстановление InnoDB buffer pool
  72. 72. Потоковые инкрементальные бэкапы● проблема: потоковые инкрементальные бэкапы не работали в XtraBackup 1.6 – innobackupex использовал внешнюю утилиту для отправки InnoDB файлов в поток – xtrabackup не мог быть использован для сканирования файлов и вычисления инкрементальных дельт● в XtraBackup 2.0: – xtrabackup сам умеет генерировать потоки в формате TAR или XBSTREAM. Теперь можно делать: innobackupex --stream=tar --incremental ... | ssh user@host
  73. 73. Встроенная компрессия● с дисковым местом всегда проблемы● компрессия внешними утилитами имеет ограничения
  74. 74. Компрессия внешними утилитами innobackupex --stream=tar . | gzip - > /data/backup.tar.gz● gzip/bzip2 однопоточны (1 ядро CPU!)● pigz (многопоточный вариант gzip) умеет параллельную компрессию, но не декомпрессию● нужно декомпрессировать весь бэкап, даже если нужно восстановить 1 таблицу
  75. 75. Встроенная компрессия● новая опция innobackupex --compress● использует QuickLZ: http://quicklz.com/ – “the worlds fastest compression library, reaching 308 Mbyte/s per core” – сочетает скорость с неплохим сжатием● другие алгоритмы (gzip/bzip2/...) будут добавлены позже● каждый файл сжимается в отдельный "архив" – не нужно декомпрессировать всё, если нужна только одна таблица
  76. 76. Встроенная компрессия● многопоточная (компрессия и декомпрессия)● можно использовать вместе с параллельным копированием: innobackupex --parallel=4 --compress --compress-threads=8 I/O threads Compression Файлы threads ibdata1 1 1 2 3 actor.ibd 2 4 5 customer.ibd 3 6 7 film.ibd 4 8
  77. 77. Проблемы с tar● компрессия в потоковом режиме невозможна● параллельное копирование невозможно● инкрементальные бэкапы невозможны .tar file formatheaderactor.ibd.gzheader customer.ibd.gz header film.ibd.gz ... File name File mode нужно знать размер файла до File size добавления нового => нужно Checksum сначала писать во временный файл ...
  78. 78. Формат xbstream chunk header ● можно отправлять вactor.ibd.gz chunk #1 поток динамические chunk header header данныеfilm.ibd.gz chunk #1 ● можно отправлять chunk header несколько файловactor.ibd.gz chunk #2 параллельно chunk headerfilm.ibd.gz chunk #2 ...
  79. 79. Утилита xbstream● используется для извлечения файлов из потоков xbstream● tar-подобный интерфейс: – xbstream -x [-C directory] прочитать поток со стандартного ввода и извлечь файлы в текущую или другую (-C) директорию
  80. 80. xbstream: пример$ innobackupex --parallel=8 --compress --compress-threads=4 --stream=xbstream ./ | ssh user@host ”xbstream -x -C /data/backup”...xtrabackup: Starting 8 threads for parallel data filestransfer[01] Compressing and streaming ./ibdata1[02] Compressing and streaming ./sakila/actor.ibd[03] Compressing and streaming ./sakila/address.ibd[04] Compressing and streaming ./sakila/category.ibd[05] Compressing and streaming ./sakila/city.ibd[06] Compressing and streaming ./sakila/country.ibd[07] Compressing and streaming ./sakila/customer.ibd
  81. 81. Восстановление InnoDB buffer pool● Percona Server: InnoDB buffer pool most recently used least recently used page1 page2 page3 ... id id id id ib_lru_dump
  82. 82. Восстановление InnoDB buffer pool● XtraBackup 2.0: – автоматически копирует ib_lru_dump – buffer pool в "горячем" состоянии после восстановления из бэкапа! – innodb_buffer_pool_restore_at_startup=1
  83. 83. Новые функции в XtraBackup 2.x
  84. 84. Быстрые инкрементальные бэкапы
  85. 85. Быстрые инкрементальные бэкапы● 2 решения: – отслеживать модификации страниц на стороне сервера – архивировать транзакционные логи на сервере
  86. 86. Отслеживание модификаций ● changed page tracking (новая функция в Percona Server): datadir bitmap изменений инкр. бэкап ibdata1 ibdata1.delta actor.ibd actor.ibd.deltacustomer.ibd customer.ibd.delta xtrabackup film.ibd отслеживаем film.ibd.delta --backup запись --incremental-lsn ib_logfile0 ib_modified_log.* ib_logfile1
  87. 87. Архивирование логов на сервере● log archiving (новая функция в Percona Server) datadir log_archive_dir full backup ibdata1 ib_log_archive_LSN1 ibdata1 actor.ibd ib_log_archive_LSN2 actor.ibdcustomer.ibd ib_log_archive_LSN3 customer.ibd film.ibd ... film.ibd копия ib_logfile0 ib_log_archive_LSN... ib_logfile1
  88. 88. Компактные бэкапы● идея: исключать "несущественные" страницы из бэкапа страницы в данных1 2 3 4 5 6 ... ibdata1 xtrabackup 1 2 4 page map file страницы в бэкапе страницы PK страницы secondary key свободные страницы
  89. 89. Компактные бэкапы● Плюсы: – меньше места на диске (иногда гораздо меньше) – высвобождают неиспользованные страницы● Минусы: – больше времени на --apply-log
  90. 90. Встроенное шифрование● многопоточное● расшифровка/восстановление отдельных таблиц I/O threads Encryption libgcrypt.so threads ibdata1 1 1 2 3 actor.ibd 2 4 5customer.ibd 3 6 7 film.ibd 4 8
  91. 91. Итоги● Архитектура● Базовые возможности – полные и инкрементальные бэкапы – потоковый режим● Производительность – I/O throttling – оптимизация кэша – паралелльное копирование
  92. 92. Итоги● Блокировка – --no-lock – --rsync● Статистика● Частичное копирование и восстановление● Point-in-Time Recovery● Клонирование узлов в репликации
  93. 93. Итоги● Новые функции в XtraBackup 2.0: – встроенная параллельная компрессия – потоковые инкрементальные бэкапы – xbstream – копирование/восстановление состояния InnoDB buffer pool● Новые функции в разработке: – быстрые инкрементальные бэкапы – компактные бэкапы – встроенное шифрование
  94. 94. Ссылки● Документация: http://www.percona.com/doc/percona-xtrabackup/● Скачать: http://www.percona.com/software/percona-xtrabackup/downloads/● Обсудить: http://groups.google.com/group/percona-discussion● #percona IRC channel on Freenode● Посмотреть в код: https://launchpad.net/percona-xtrabackup● Баги: https://bugs.launchpad.net/percona-xtrabackup
  95. 95. Вопросы?Слайды:http://bit.ly/HL2012-XB

×