Percona XtraBackupインクリメンタルバックアップ

9150 ワード

innobackupexによるインクリメンタルバックアップ
各InnoDBのページにはLSN情報が含まれており,関連するデータが変化するたびに関連するページのLSNが自動的に増加する.これはInnoDBテーブルがインクリメンタルバックアップを行うことができる基礎であり,innobackupexは前回のフルバックアップ後に変更されたページをバックアップすることによって実現される.
最初のインクリメンタル・バックアップを実行するには、次のコマンドを使用します.
innobackupex --incremental /backup --incremental-basedir=BASEDIR

ここで、BASEDIRとは、完全なバックアップが存在するディレクトリを指します.このコマンドの実行が終了すると、innobackupexコマンドは、/backupディレクトリに時間で命名された新しいディレクトリを作成し、すべてのインクリメンタルバックアップデータを格納します.また、インクリメンタル・バックアップを実行した後にもう一度インクリメンタル・バックアップを行う場合、incremental-basedirは、前回のインクリメンタル・バックアップが存在するディレクトリを指す必要があります.
なお、インクリメンタルバックアップはInnoDBテーブルまたはXtraDBテーブルにのみ適用可能であり、MyISAMテーブルではインクリメンタルバックアップを実行する際に実際には完全バックアップが行われる.
「準備」(prepare)インクリメンタル・バックアップと完全バックアップの整理にはいくつかの違いがあります.特に、(1)コミットされたトランザクションを、完全および各インクリメンタル・バックアップを含む各バックアップで「再生」する必要があることに注意してください.「≪リプレイ|Replay|Emdb≫」を選択すると、すべてのバックアップ・データがフル・バックアップにマージされます.(2)コミットされていないトランザクションは、すべてのバックアップに基づいてロールバックされます.
すると、操作は次のようになります.
innobackupex --apply-log --redo-only BASE-DIR

次に、
innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-1

次に、2番目のインクリメンタルです.
innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-2

ここで、BASE-DIRは完全バックアップが存在するディレクトリを指し、INCREMENTAL-DIR-1は第1のインクリメンタルバックアップのディレクトリを指し、INCREMENTAL-DIR-2は第2のインクリメンタルバックアップのディレクトリを指し、その他の順次類推、すなわち複数回のインクリメンタルバックアップがある場合、毎回このような操作を実行する.
バックアッププロセス:
フル・バックアップ
mysql> create database week1;
Query OK, 1 row affected (0.00 sec)
mysql> use week1;
Database changed
mysql> create table test(name char(10) not null);
Query OK, 0 rows affected (0.06 sec)
mysql> insert into test (name) values ("kk01");
Query OK, 1 row affected (0.01 sec)
 
[root@bogon ~]# innobackupex --user=shiina --password=shiina /backup/
...
...
xtrabackup: The latest check point (for incremental): '2496292'
xtrabackup: Stopping log copying thread.
.160530 19:06:15 >> log scanned up to (2496301)
 
160530 19:06:15 Executing UNLOCK BINLOG
160530 19:06:15 Executing UNLOCK TABLES
160530 19:06:15 All tables unlocked
160530 19:06:15 [00] Copying ib_buffer_pool to /backup/2016-05-30_19-06-10/ib_buffer_pool
160530 19:06:15 [00]        ...done
160530 19:06:15 Backup created in directory '/backup/2016-05-30_19-06-10'
160530 19:06:15 [00] Writing backup-my.cnf
160530 19:06:15 [00]        ...done
160530 19:06:15 [00] Writing xtrabackup_info
160530 19:06:15 [00]        ...done
xtrabackup: Transaction log of lsn (2496292) to (2496301) was copied.
160530 19:06:15 completed OK!

初回インクリメンタルバックアップ
mysql> insert into test (name) values ("kk02");
Query OK, 1 row affected (0.02 sec)
[root@bogon ~]# innobackupex --user=shiina --password=shiina --incremental /backup/ --incremental-basedir=/backup/2016-05-30_07-04-31/
...
...
xtrabackup: Transaction log of lsn (2499531) to (2499540) was copied.
160530 19:08:27 completed OK!

2回目のインクリメンタル・バックアップ
mysql> insert into test (name) values ("kk03");
Query OK, 1 row affected (0.02 sec)
[root@bogon ~]# innobackupex --user=shiina --password=shiina --incremental /backup/ --incremental-basedir=/backup/2016-05-30_07-05-32/
...
...
xtrabackup: Transaction log of lsn (2499709) to (2499718) was copied.
160530 19:09:40 completed OK!

インクリメンタル・バックアップ・ログ・ファイルを表示するには、次の手順に従います.
[root@bogon backup]# cat 2016-05-30_19-06-10/xtrabackup_checkpoints
backup_type = full-prepared
from_lsn = 0 #        0
to_lsn = 2496292
last_lsn = 2496301
compact = 0
recover_binlog_info = 0
[root@bogon backup]# cat 2016-05-30_19-08-21/xtrabackup_checkpoints
backup_type = incremental
from_lsn = 2496292
to_lsn = 2499531
last_lsn = 2499540
compact = 0
recover_binlog_info = 0
[root@bogon backup]# cat 2016-05-30_19-09-35/xtrabackup_checkpoints
backup_type = incremental
from_lsn = 2499531
to_lsn = 2499709
last_lsn = 2499718
compact = 0
recover_binlog_info = 0

マージの準備:
[root@bogon ~]# innobackupex --apply-log --redo-only /backup/2016-05-30_19-06-10/
...
xtrabackup: starting shutdown with innodb_fast_shutdown = 1
InnoDB: Starting shutdown...
InnoDB: Shutdown completed; log sequence number 2496310
InnoDB: Number of pools: 1
160530 19:10:49 completed OK!
[root@bogon ~]# innobackupex --apply-log --redo-only --incremental /backup/2016-05-30_19-06-10/ --incremental-dir=/backup/2016-05-30_19-08-21/
...
160530 19:35:54 completed OK!
[root@bogon ~]# innobackupex --apply-log --redo-only --incremental /backup/2016-05-30_19-06-10/ --incremental-dir=/backup/2016-05-30_19-09-35/
...
160530 19:36:38 completed OK!

Percona XtraBackupは、次のようなコマンドを実行してバックアップを準備する場合、次のエラーを報告します.
[root@bogon ~]# innobackupex --apply-log --redo-only --incremental /backup/2016-05-30_19-06-10/ --incremental-dir=/backup/2016-05-30_19-08-21/
...
...
InnoDB: File (unknown): 'read' returned OS error 114. Cannot continue operation
InnoDB: Cannot continue operation.

mysqlサービスを停止したり、サーバを再起動したりすれば、解決できます.
バックアップ・ログ・ファイルを再度表示するには、次の手順に従います.
[root@bogon backup]# cat 2016-05-30_19-06-10/xtrabackup_checkpoints
backup_type = log-applied
from_lsn = 0
to_lsn = 2499709
last_lsn = 2499718 #          last_lsn           last_lsn    ,                     
compact = 0
recover_binlog_info = 0
[root@bogon backup]# cat 2016-05-30_19-08-21/xtrabackup_checkpoints
backup_type = incremental
from_lsn = 2496292
to_lsn = 2499531
last_lsn = 2499540
compact = 0
recover_binlog_info = 0
[root@bogon backup]# cat 2016-05-30_19-09-35/xtrabackup_checkpoints
backup_type = incremental
from_lsn = 2499531
to_lsn = 2499709
last_lsn = 2499718
compact = 0
recover_binlog_info = 0

データの復元:
[root@bogon backup]# service mysqld stop
Shutting down MySQL (Percona Server).. SUCCESS!
[root@bogon backup]# rm -rf /data/mysql/*
[root@bogon backup]# innobackupex --copy-back /backup/2016-05-30_19-06-10/
...
160530 19:42:31 completed OK
[root@bogon ~]# chown -R mysql:mysql /data/mysql/*
[root@bogon ~]# service mysqld start
Starting MySQL (Percona Server). SUCCESS!

データの完全性のテスト:
[root@bogon ~]# mysql -h127.0.0.1 -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.11-4 Percona Server (GPL), Release 4, Revision 5c940e1
 
Copyright (c) 2009-2016 Percona LLC and/or its affiliates
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
 
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
 
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
 
mysql> use week1;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
 
Database changed
mysql> select * from test;
+------+
| name |
+------+
| kk01 |
| kk02 |
| kk03 |
+------+
3 rows in set (0.00 sec)

補足:innobackup常用パラメータ説明(転載)
--defaults-fileとxtrabackupの--defaults-fileパラメータ
--apply-log対xtrabackupの--prepareパラメータのパッケージ
--copy-backデータ復旧時にバックアップデータファイルをMySQLサーバーのdatadirにコピーする.
--remote-host=HOSTNAMEは、sshを介してバックアップデータをプロセスサーバに格納します.
--stream=[tar]バックアップファイルの出力形式であり、tarの場合はtar 4 ibdを用いる、このファイルはXtarBackup binaryファイルで入手可能である.バックアップ時にstream=tarが指定されている場合、tar 4 ibdファイルのディレクトリは$PATHにある必要があります(tar 4 ibdを使用して圧縮されているため、XtraBackupのbinaryパッケージで入手できます).パラメータstream=tarバックアップを使用する場合、xtrabackup_logfileは/tmpディレクトリの下に一時的に置かれる可能性があります.バックアップ時に大きな書き込みを併発するとxtrabackup_logfileは大きいかもしれません(5 G+)、あなたの/tmpディレクトリを満たす可能性が高いので、パラメータ--tmpdirでディレクトリを指定することでこの問題を解決することができます.
--tmpdir=DIRECTORY--remote-host or--streamが指定されている場合、トランザクションログが一時的に格納されるディレクトリは、デフォルトではMySQLプロファイルで指定された一時ディレクトリtmpdirを使用します.
--redo-only--apply-logグループ、強制バックアップログ時にredoのみ、rollbackをスキップします.これは、インクリメンタルバックアップを行う際に非常に必要です.
--use-memory=#このパラメータはprepareの場合に使用され、prepareの場合innodbインスタンスのメモリ量を制御します.
--throttle=IOSとxtrabackupの--throttleパラメータ
--sleep=ibbackupに使用され、バックアップごとに1 Mデータを指定し、プロセスが何ミリ秒コピーを停止するかを指定します.バックアップ時に正常な業務への影響を最小限に抑えるためです.具体的にはibbackupのマニュアルを参照してください.
--compress[=LEVEL]バックアップデータを圧縮し、ibbackupのみをサポートし、xtrabackupはまだ実現していない.
--include=REGEXP対xtrabackupパラメータ--tablesのパッケージはibbackupもサポートされています.含むライブラリテーブルをバックアップします.たとえば、--include=「test.」、testライブラリ内のすべてのテーブルをバックアップするという意味です.フルバックアップが必要な場合は、このパラメータを省略します.testライブラリの下の2つのテーブル:test 1とtest 2をバックアップする必要がある場合は、--include=「test.test 1|test.test 2」と書きます.ワイルドカードも使用できます.たとえば、--include=「test.test」などです.
--databases=LISTはバックアップが必要なdatabasesをリストし、このパラメータが指定されていない場合、MyISAMとInnoDBテーブルを含むすべてのdatabaseがバックアップされます.
--uncompressはバックアップしたデータファイルを解凍し、ibbackupをサポートし、xtrabackupはまだこの機能を実現していない.
--slave-info、ライブラリからバックアップ、さらに--slave-infoバックアップディレクトリの下でxtrabackup_が生成されます.slave_infoファイル、ここではメインログファイルとオフセットが保存されます.ファイルの内容はCHANGE MASTER TO MASTER_と似ています.LOG_FILE='', MASTER_LOG_POS=0
--socket=SOCKET指定mysql.バックアッププロセスがmysqlにログインするようにsockが位置する.