Авг 11

XtraBackup — резервное копирование для innoDB

Опубликовано в InnoDB

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

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

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

XtraBackup — это программа от компании Percona Labs, которая используется для резервного копирования таблиц InnoDB и XtraDB.

Для начала нужно скачать последнюю версию утилиты с сайта разработчиков и установить её:

wget http://www.percona.com/mysql/xtrabackup/0.9/deb/xtrabackup_0.9_amd64.deb
dpkg —install xtrabackup_0.9_amd64.deb

XtraBackup готова к работе.

Сохранение данных

Программа делает бэкап файлов данных таблиц innoDB (xtraDB) и бинлог файла. Создаем папку для бекапов:

mkdir /home/backup/db

Эта команда активирует деятельность программы:

xtrabackup —defaults-file=/etc/mysql/my.cnf —datadir=/var/lib/mysql \
—target-dir=/home/backup/db —backup

Некоторые пояснения:

–defaults-file — прямой путь к конфигурационному файлу базы данных MySQL
–datadir — прямой путь к директории базы данных MySQL
–target-dir — созданная нами папка для бекапов

После завершения работы утилиты получаем копию базы данных.

xtrabackup Ver 0.9 Rev 83 for 5.0.84 pc-linux-gnu (x86_64)
xtrabackup: uses posix_fadvise().
xtrabackup: cd to /var/lib/mysql
xtrabackup: Target instance is assumed as followings.
xtrabackup: innodb_data_home_dir = ./
xtrabackup: innodb_data_file_path = ibdata1:10M:autoextend
xtrabackup: innodb_log_group_home_dir = ./
xtrabackup: innodb_log_files_in_group = 2
xtrabackup: innodb_log_file_size = 134217728
xtrabackup: use O_DIRECT
>> log scanned up to (0 1283875749)
Copying ./ibdata1
to /home/backup/db/ibdata1
>> log scanned up to (0 1283877656)
>> log scanned up to (0 1283878467)
>> log scanned up to (0 1283880148)
>> log scanned up to (0 1283881355)
>> log scanned up to (0 1283883263)
>> log scanned up to (0 1283885187)
>> log scanned up to (0 1283887688)
…done
xtrabackup: The latest check point (for incremental): ‘0:1283888607′
>> log scanned up to (0 1283890956)
xtrabackup: Stopping log copying thread.
xtrabackup: Transaction log of lsn (0 1283872324) to (0 1283890956) was copied.

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

Для восстановления базы данных нужно выполнить команду с опцией “–prepare”:

xtrabackup —prepare —target-dir=/home/backup/db/ —datadir=/var/lib/mysql

xtrabackup Ver 0.9 Rev 83 for 5.0.84 pc-linux-gnu (x86_64)
xtrabackup: cd to /home/backup/db
xtrabackup: This target seems to be not prepared yet.
xtrabackup: xtrabackup_logfile detected: size=2097152, start_lsn=(0 1284705008)
xtrabackup: Temporary instance for recovery is set as followings.
xtrabackup: innodb_data_home_dir = ./
xtrabackup: innodb_data_file_path = ibdata1:10M:autoextend
xtrabackup: innodb_log_group_home_dir = ./
xtrabackup: innodb_log_files_in_group = 1
xtrabackup: innodb_log_file_size = 2097152
xtrabackup: Starting InnoDB instance for recovery.
xtrabackup: Using 104857600 bytes for buffer pool (set by —use-memory parameter)
InnoDB: Log scan progressed past the checkpoint lsn 0 1284705008
090914 20:18:59 InnoDB: Database was not shut down normally!
InnoDB: Starting crash recovery.
InnoDB: Reading tablespace information from the .ibd files…
InnoDB: Doing recovery: scanned up to log sequence number 0 1284717711 (0 %)
090914 20:18:59 InnoDB: Starting an apply batch of log records to the database…
InnoDB: Progress in percents: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
InnoDB: Apply batch completed
090914 20:19:00 InnoDB: Started; log sequence number 0 1284717711

[notice (again)]
If you use binary log and don’t use any hack of group commit,
the binary log position seems to be:

xtrabackup: starting shutdown with innodb_fast_shutdown = 1
090914 20:19:00 InnoDB: Starting shutdown…
090914 20:19:01 InnoDB: Shutdown completed; log sequence number 0 1284717711

Восстановление из бэкапа необходимо выполнить дважды, в конце будут показаны лог файлы. Полученный лог файл и файл данных нужно скопировать в папку MySQL (по умолчанию — /var/lib/mysql).

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

Для работы с большими базами данных в XtraBackup встроены инкрементальные бекапы. Сначала нужно сделать полное сохранение данных, после чего (дополнительно) дельта бэкап:

xtrabackup —defaults-file=/etc/mysql/my.cnf —target-dir=/home/backup/dbdelta \
—incremental-basedir=/home/backup/db —backup

Для восстановления базы данных выполните команду:

xtrabackup —target-dir=/home/backup/dbdelta \
—incremental-basedir=/home/backup/db —prepare

Комментарии: 0 » Метки: , , , , ,

You must be logged in to post a comment.