Xtrabackup

提供: ArchWiki
ナビゲーションに移動 検索に移動

Percona XtraBackup は高性能・ロープロファイル・ノンブロッキングな InnoDB や XtraDB データベースのオープンソースのバックアップユーティリティです。

データベースをロックしないで MySQL ベースのサーバー (MySQL, MariaDB, Percona Server) をバックアップできる唯一のオープンソースツールです。データベースが動作している状態のままバックアップを行うことができ、クエリやトランザクションに影響を与えません (ホットバックアップ)。

MySQL 5.0 や 5.1 サーバーの InnoDB, XtraDB, MyISAM テーブルからデータをバックアップすることが可能で、部分的なバックアップ・リモートバックアップ・圧縮バックアップ・差分バックアップなどの高度な機能を備えていて、さらにマルチスレッドによる高速なファイルコピーを活用してバックアップ時点までリカバリすることができます。

ノート: MyISAM テーブルの場合、バックアップ中は読み取り専用になります。

インストール

公式リポジトリから xtrabackup パッケージをインストールしてください。

使用方法

XtraBackup には3つのツールが存在します:

xtrabackup
InnoDB と XtraDB のデータだけをコピーするコンパイル済みの C バイナリ。
innobackupex
MyISAM, InnoDB, XtraDB テーブルが保存されている MySQL データベースインスタンス全体をバックアップするためのラッパースクリプト。
tar4ibd
InnoDB のデータを安全に扱うために tar にパッチを適用した派生版。

下のセクションでは、以下のことを前提にコマンドを記載しています:

  • バックアップするサーバーのデータが /var/lib/mysql/ に保存されていること。Arch Linux におけるデフォルトの保存場所です。
  • 作成したバックアップを /data/backups/mysql に保存すること。
  • my.cnf がデフォルトの /etc/my.cnf にあり、以下の設定がされていること:
[mysqld]
datadir=/var/lib/mysql/
[xtrabackup]
target_dir=/data/backups/mysql/

xtrabackup

InnoDB のデータとログファイルのバックアップを作成して、バックアップからデータファイルが使える状態にします。

バックアップを作成:

# xtrabackup --backup

バックアップの準備:

# xtrabackup --prepare

再度実行して InnoDB のログファイルを新しく作成:

# xtrabackup --prepare

xtrabackup の実行が成功すると終了ステータス 0 が返ってきます。2回目の --prepare では、InnoDB によって “Log file ./ib_logfile0 did not exist: new to be created” というメッセージが出力され、ログファイルが作成されたことが確認できるはずです。

空きメモリが豊富に存在するデータベース専用サーバーの場合、--use-memory オプションでバッファプールと同じサイズを設定すると良いでしょう。ツールの完全なドキュメントは こちら にあります。

innobackupex

my.cnf で指定したディレクトリから MySQL のデータを全てコピーします。デフォルトでは /data/backups/ のタイムスタンプが名前のサブディレクトリにバックアップが作成されます (例: /data/backups/2010-03-13_02-42-44):

# innobackupex /data/backups
ノート: 大量に出力が流れますが、バックアップが終わるまで眺めてください。以下のような出力がされなかった場合、バックアップは失敗です:
# 100313 02:43:07  innobackupex: completed OK!

レプリカ (スレーブ) からバックアップを作成したい場合、バックアップする際にプライマリ (マスター) の相対パスを確認してください:

# innobackupex --slave-info /data/backups

ツールの完全なドキュメントは こちら にあります。

tar4ibd

tar4ibd バイナリは InnoDB/XtraDB のデータファイルを適切に扱えるように tar に特殊なパッチをあてています。

使用方法は tar と同じです。GNU tar でファイルを抽出する場合は -i オプションを指定する必要があるので注意してください。指定しないとデータの一部だけが抽出されます。

ヒントとテクニック

Xtrabackup でスレーブを設定

Xtrabackup を使うことでスレーブを別のスレーブに複製したり、マスターから新しくスレーブを設定することができます。サーバーの複製によって動作がブロックされることはありません (MyISAM は除く)。

上記と同じ想定の場合、まずは以下のコマンドを実行:

# innobackupex --stream=tar /tmp/ --slave-info | ssh user@DESTSERVER "tar xfi - -C /var/lib/mysql"

完了したら、複製先のサーバーで以下のコマンドを実行:

# innobackupex --apply-log --use-memory=2G  /var/lib/mysql

これでデータベースディレクトリの準備ができます。

オリジナルのサーバーから新しいスレーブに my.cnf をコピーして mysqld を起動してください。

スレーブに作成される xtrabackup_slave_info ファイルの中身を確認:

# cat /var/lib/mysql/xtrabackup_slave_info
CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000834', MASTER_LOG_POS=50743116

mysql コンソールで以下のコマンドを実行してスレーブを起動:

mysql> CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000834', MASTER_LOG_POS=50743116;
mysql> START SLAVE;

以下のコマンドで設定が上手くいったことを確認できます:

mysql> SHOW SLAVE STATUS \G
...
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
...
Seconds_Behind_Master: 1643
...
ノート: 同じコマンドでスレーブとして設定済みのインスタンスを複製できます。マスターの設定 ('CHANGE MASTER TO') をする前に以下のコマンドを実行してください:
mysql> STOP SLAVE;

参照