Documentation Home
MySQL Enterprise Backup ユーザーズガイド (バージョン 3.11)
Download this Manual
PDF (US Ltr) - 1.3Mb
PDF (A4) - 1.3Mb
HTML Download (TGZ) - 164.6Kb
HTML Download (Zip) - 190.9Kb


3.3.4 部分バックアップの作成

注記

部分バックアップの作成を容易にするため、MySQL Enterprise Backup 3.10 では、--include-tables--exclude-tables という部分バックアップ用の 2 つの新しいオプションが導入されています。これらの新しいオプションは、--include--databases--databases-list-file、および --only-innodb-with-frm の古いオプションに置き換わるものです。これらの古いオプションは新しいオプションと互換性がなく、次回のリリースで非推奨になります。次の説明では、この新しいオプションが部分バックアップに使用されることを想定しています。参考のため、古いオプションに関する情報をこのセクションの最後の「レガシーオプションによる部分バックアップの作成」に記載しています。

デフォルトではデータディレクトリ内のすべてのファイルがバックアップに含まれるため、このディレクトリ内のすべての MySQL ストレージエンジン、サードパーティー製ストレージエンジン、さらにはデータベース以外のファイルからのデータも、バックアップに含まれます。このセクションでは、データをバックアップするか除外するか選択する場合に使用できるオプションについて説明します。

MySQL Enterprise Backup には、次のようなさまざまな部分バックアップを作成する複数の方法が用意されています。

  • 特定のテーブルをその名前で含めるまたは除外する。これは、--include-tables オプションまたは --exclude-tables オプションを使用します。

    --include-tables オプションまたは --exclude-tables オプションで指定された正規表現と照合して各テーブルがチェックされます。正規表現がテーブルの完全修飾名に一致すると (db_name.table_name の形式)、そのテーブルがバックアップに含められるか除外されます。使用される正規表現構文は、POSIX 1003.2 規格で指定された拡張形式です。これらのオプションは、Henry Spencer の正規表現ライブラリとともに実装されています。

  • InnoDB テーブルの一部またはすべてを含めるが、ほかのテーブルタイプは含めない。これは、--only-innodb オプションを使用します。

  • MySQL データディレクトリに存在するが、実際には MySQL インスタンスの一部ではないファイルを除外する。これは、--only-known-file-types オプションを使用します。

  • 前述のオプションの組み合わせを使用して、複数の選択結果を得る。

  • トランスポータブルテーブルスペース (TTS) を使用して選択した InnoDB テーブルをバックアップする。これは、--use-tts オプションと --include-tables オプションまたは --exclude-tables オプション (あるいは両方) を使用します。

関連するすべてのオプションの構文の詳細は、セクション5.1.9「部分バックアップとリストアオプション」を参照してください。

重要

通常、部分バックアップは、完全な MySQL インスタンスを構築するために必要な相互関連要素がバックアップデータに含まれていない場合があるため、完全バックアップよりもリストアが困難です。特に、InnoDB テーブルが保持する内部 ID とその他のデータ値は、同じインスタンスにのみリストアでき、別の MySQL Server ではリストアできません。必ず、関連した手順と制限について理解するために、どの部分バックアップでもリカバリ手順を十分にテストしてください。

重要

InnoDB システムテーブルスペースは、インスタンス内のすべてのデータベースからの InnoDB テーブルに関するメタデータを保持しているため、ほかのデータベースを含むサーバー上で部分バックアップをリストアすると、システムがほかのデータベース内のこれらの InnoDB テーブルを追跡できなくなる可能性があります。部分バックアップは必ず、維持する必要のあるほかの InnoDB テーブルを含まない、新規の MySQL Server インスタンスでリストアしてください。

次に、部分バックアップのコマンド例を示します。

emp で始まる名前のテーブルをすべてバックアップに含める場合:

$ mysqlbackup \
 --host=localhost --user=mysqluser --protocol=TCP --port=3306 \
 --backup-dir=$MEB_BACKUPS_DIR/backupdir \ --include-tables='\.emp' \
 backup

mysql データベースと performance_schema データベースからのテーブルを除き、すべてのテーブルのバックアップを取得する場合:

$ mysqlbackup \
 --host=localhost --user=mysqluser --protocol=TCP --port=3306 \
 --backup-dir=$MEB_BACKUPS_DIR/backupdir \
 --exclude-tables='^(mysql|performance_schema)\.' \
 backup

sales データベース内のすべてのテーブルのバックアップを取得するが、hardware という名前のテーブルを除く場合:

$ mysqlbackup \
 --host=localhost --user=mysqluser --protocol=TCP --port=3306 \
 --backup-dir=$MEB_BACKUPS_DIR/backupdir \
 --include-tables='^sales\.' --exclude-tables='^sales\.hardware$' \
 backup

すべての InnoDB テーブルをバックアップするが、.frm ファイルはバックアップしない場合:

$ mysqlbackup --defaults-file=/home/pekka/.my.cnf --only-innodb backup

適切なオプションを追加することにより、圧縮単一イメージ、およびほかの種類の選択的バックアップも作成できます。

次のステップ:

  • 完全バックアップと増分バックアップの終わりに表示される、mysqlbackup: Was able to parse the log up to lsn LSN_number などのメッセージ内の LSN 値を書き留めてください。この完全バックアップのあとに行われた変更の増分バックアップを実行するときに、この値を指定します。

  • いつでも完全バックアップをリストアできるよう、非圧縮バックアップファイルにログを適用します。最初にバックアップデータを別のサーバーに移動して、データベースサーバーでこの操作を実行する CPU および I/O オーバーヘッドを回避できます。

  • ログを適用したあと、定期的に増分バックアップを取得します。これらのような完全バックアップより非常に高速で、小さくなります。

レガシーオプションによる部分バックアップの作成

重要

このサブセクションの情報は、--include--databases--databases-list-file、および --only-innodb-with-frm のレガシーオプションを使用するためだけのもので、これらのオプションは次回の発行時に非推奨になります。部分バックアップの作成には、代わりに --include-tables--exclude-tables の新しいオプションを使用することを強くお勧めします。部分バックアップのレガシーオプションと新しいオプションを単一のコマンドで組み合わせることはできません。

MySQL Enterprise Backup では、部分バックアップのレガシーオプションを使用して、次のようなさまざまな部分バックアップを作成できます。

  • 特定の InnoDB テーブルを含めるが、ほかのテーブルは含めない。この操作には、--include--only-innodb、および --only-innodb-with-frm のオプションが含まれます。

  • 選択したデータベースからの特定の非 InnoDB テーブルを含めるが、それ以外は含めない。この操作には、--databases オプションと --databases-list-file オプションが含まれます。

これらのすべてのオプションに関する構文の詳細は、「レガシー部分バックアップオプション」を参照してください。

注記

通常、部分バックアップは、完全な MySQL インスタンスを構築するために必要な相互関連要素がバックアップデータに含まれていない場合があるため、完全バックアップよりもリストアが困難です。特に、InnoDB テーブルが保持する内部 ID とその他のデータ値は、同じインスタンスにのみリストアでき、別の MySQL Server ではリストアできません。必ず、関連した手順と制限について理解するために、どの部分バックアップでもリカバリ手順を十分にテストしてください。

mysqlbackup は、その --include オプションを使用して、一部の InnoDB テーブルを含み、ほかのテーブルは含まないバックアップを作成できます。

  • --include オプションによる部分バックアップには、常に、InnoDB システムテーブルスペースとその内部のすべてのテーブルが含まれます。

  • システムテーブルスペース外に格納された InnoDB テーブルの場合、部分バックアップには、その名前が、--include オプションで指定された正規表現に一致するテーブルだけが含まれます。

この操作には、除外されるテーブルが、個別の table_name.ibd ファイルに格納されることが必要です。InnoDB テーブルをシステムテーブルスペース外に置くには、innodb_file_per_table MySQL 構成オプションが有効な間に InnoDB テーブルを作成します。それぞれの .ibd ファイルには、1 つのテーブルのデータとインデックスだけが保持されます。

innodb_file_per_table をオフにして作成されたこれらの InnoDB テーブルは、InnoDB システムテーブルスペースに通常どおりに格納され、バックアップから除外できません。

per-table データファイルを含むテーブルごとに、db_name.table_name の形式の文字列が、--include オプションで指定された正規表現と照合してチェックされます。正規表現が文字列 db_name.table_name 全体に一致した場合、テーブルはバックアップに含められます。使用される正規表現構文は、POSIX 1003.2 規格で指定された拡張形式です。Unix のようなシステムでは、適宜、正規表現を引用符で囲んで、シェルメタキャラクタが解釈されないようにしてください。この機能は、Henry Spencer の正規表現ライブラリとともに実装されています。

生成されたバックアップディレクトリには、バックアップログファイルと InnoDB データファイルのコピーが含まれます。

重要: mysqlbackup コマンドは部分バックアップの取得をサポートしますが、部分バックアップからデータベースをリストアするときには注意してください。mysqlbackup は、たとえば --databases オプションを使用して部分バックアップを実行したときを除き、バックアップに含まれないテーブルの .frm ファイルもコピーします。--include オプションを付けて mysqlbackup を使用する場合は、データベースのリストア前に、バックアップに含まれないすべてのテーブルの .frm ファイルをバックアップデータから削除してください。

重要: InnoDB システムテーブルスペースは、インスタンス内のすべてのデータベースからの InnoDB テーブルに関するメタデータを保持しているため、ほかのデータベースを含むサーバー上で部分バックアップをリストアすると、システムがほかのデータベース内のこれらの InnoDB テーブルを追跡できなくなる可能性があります。部分バックアップは必ず、維持する必要のあるほかの InnoDB テーブルを含まない、新規の MySQL Server インスタンスでリストアしてください。

--only-innodb オプションと --only-innodb-with-frm オプションは、InnoDB テーブルだけをバックアップし、ほかのストレージエンジンのテーブルはスキップします。これらを --include オプションと一緒に使用して、ほかのストレージエンジンが作成したほかのすべてのファイルを除きながら、InnoDB テーブルの選択的バックアップを作成することもできます。

例 3.1 InnoDB テーブルの非圧縮部分バックアップの作成

この例では、一部の InnoDB テーブルが独自のテーブルスペースを持つように MySQL を構成しました。ib で始まる名前を持つ、test データベース内の InnoDB テーブルだけを含む部分バックアップを作成します。test データベースのデータベースディレクトリの内容を次に示します。このディレクトリには、データベースの各テーブル (alex1alex2alex3blobt3ibstest0ibstest09ibtest11a、ibtest11bibtest11c、および ibtest11d) の MySQL 説明ファイル (.frm ファイル) が含まれます。これら 10 個のテーブルのうち、6 つ (alex1alex2alex3blobt3ibstest0ibstest09) は per-table データファイル (.ibd ファイル) に格納されます。

$ ls /sqldata/mts/test
alex1.frm  alex2.ibd  blobt3.frm    ibstest0.ibd  ibtest11a.frm  ibtest11d.frm
alex1.ibd  alex3.frm  blobt3.ibd    ibtest09.frm  ibtest11b.frm
alex2.frm  alex3.ibd  ibstest0.frm  ibtest09.ibd  ibtest11c.frm

--include オプションを付けて mysqlbackup を実行します。

# Back up some InnoDB tables but not any .frm files.
$ mysqlbackup --defaults-file=/home/pekka/.my.cnf --include='test\.ib.*' --only-innodb backup
...many lines of output...
mysqlbackup: Scanned log up to lsn 2666737471.
mysqlbackup: Was able to parse the log up to lsn 2666737471.
mysqlbackup: Maximum page number for a log record 0
101208 17:17:45  mysqlbackup: Full backup completed!

# Back up some InnoDB tables and the .frm files for the backed-up tables only.
$ mysqlbackup --defaults-file=/home/pekka/.my.cnf --include='test\.ib.*' \
  --only-innodb-with-frm=related backup
...many lines of output...
mysqlbackup: Scanned log up to lsn 2666737471.
mysqlbackup: Was able to parse the log up to lsn 2666737471.
mysqlbackup: Maximum page number for a log record 0
101208 17:17:45  mysqlbackup: Full backup completed!

バックアップディレクトリには、ibstest テーブルと ibtest09 テーブルのバックアップだけが含まれます。ほかの InnoDB テーブルは test\.ib.* のインクルードパターンに一致しませんでした。ただし、ibtest11aibtest11bibtest11cibtest11d のテーブルは、常にバックアップに含まれているシステムテーブルスペース (ibdata1 file) に格納されているため、次に示すディレクトリに表示されていなくてもバックアップに含まれていることに注意してください。

# With the --only-innodb option:
$ ls /sqldata-backup/test
ibstest0.ibd   ibtest09.ibd

# With the --only-innodb-with-frm=related option:
$ ls /sqldata-backup/test
ibstest0.frm   ibtest09.frm
ibstest0.ibd   ibtest09.ibd

例 3.2 圧縮部分バックアップの作成

すべての InnoDB テーブルが独自のテーブルスペースを保持するように、MySQL を構成しました。alex または blob で始まる名前を持つ InnoDB テーブルだけを含む部分バックアップを作成します。test データベースのデータベースディレクトリの内容を次に示します。

$ ls /sqldata/mts/test
alex1.frm  alex2.ibd  blobt3.frm    ibstest0.ibd  ibtest11a.frm  ibtest11d.frm
alex1.ibd  alex3.frm  blobt3.ibd    ibtest09.frm  ibtest11b.frm
alex2.frm  alex3.ibd  ibstest0.frm  ibtest09.ibd  ibtest11c.frm

--compress オプションと --include オプションを付けて mysqlbackup を実行します。

$ mysqlbackup --defaults-file=/home/pekka/.my.cnf --compress \
  --include='.*\.(alex|blob).*' --only-innodb backup
...many lines of output...
mysqlbackup: Scanned log up to lsn 2666737471.
mysqlbackup: Was able to parse the log up to lsn 2666737471.
mysqlbackup: Maximum page number for a log record 0

mysqlbackup: Compressed 147 MB of data files to 15 MB (compression 89%).

101208 17:18:04  mysqlbackup: Full backup completed!

データベース test のバックアップディレクトリを次に示します。.ibz ファイルは圧縮された per-table データファイルです。

$ ls /sqldata-backup/test
alex1.ibz   alex2.ibz   alex3.ibz   blobt3.ibz

mysqlbackup コマンドの --databases オプションと --databases-list-file オプションを使用すれば、MySQL インスタンス全体ではなく選択したデータベースだけから、非 InnoDB テーブルをバックアップできます。(InnoDB テーブルをフィルタするには、代わりに --include オプションを使用します。)--databases では、データベース名のスペース区切りのリストを指定し、リスト全体を二重引用符で囲みます。--databases-list-file では、データベース名のリストを含むファイルのパスを、1 行に 1 つずつ指定します。

データベース名の一部またはすべてをテーブル名で修飾して、これらのデータベースから選択した非 InnoDB テーブルだけをバックアップできます。

このオプションを指定する場合は、必ず、すべてのバックアップ (基本的に増分バックアップ) で同じデータベースセットを含め、データベースの古いバージョンをリストアしないようにしてください。