>> InnoDBバックアップのための事前確認 |
|
前回までは、MyISAM形式のデータベース・エンジンを使用した場合のバックアップ/リストアについて解説してきました。MySQLにはもうひとつトランザクションをサポートするInnoDBというデータベース・エンジンがあります。今回は、この場合の例を見ていきましょう。
まず、前提としてデータベース側で各テーブルのデータベース・エンジンのTypeがInnoDBであるかを確認しておきます。
XOOPS Cubeでは、現在MyISAMテーブルのみがサポートされていますので、今回はInnoDBをサポートするアプリケーションという観点はおいておき、テストとしてInnoDB形式のテーブルを作成した上で確認してみましょう。
本例では、zipcodeというInnoDB形式のテーブルを用意しました。InnoDB形式でテーブルを作成するには、"create table"を実行する際、最後に"ENGINE=InnoDB"と追加指定するだけです。詳細についてはMySQLのマニュアル等を確認してください。
念のため、InnoDB形式であるかどうか確認するには、"show table status"を使用します。
mysql> show table status; +---------+--------+- | Name | Engine | ~以降略~ +---------+--------+- | zipcode | InnoDB | ~以降略~ +---------+--------+- 1 row in set (0.00 sec)
また、バイナリログによる差分的なバックアップや、ポイントインタイムリカバリを使用するには、デフォルトでは設定されていないバイナリログの設定を行っておく必要があります。
/etc/my.cnfで設定する場合には、[mysqld]セクションにlog-binのディレクトリ指定を行うことで、次回起動時以降バイナリログが自動的に作成されるようになります。
[mysqld] log-bin=/var/log/mysql-blog/lamp
>> MySQL APM側での設定 |
|
以前にMyISAM形式で特にポイントインタイムリカバリを使用しなかった場合は、設定しなかった項目への登録が必要となります。
- Path to Binary Log Index File:
バイナリログのインデックスファイルが格納されているディレクトリを指定します。通常、/etc/my.cnf等で、"log-bin"として指定されているディレクトリになります。 - Path to 'mysqlbinlog' File:
mysqlbinlogコマンドへのパスを設定します。ディストリビューションのRPMパッケージによって導入した場合には、/usr/bin以下にインストールされています。[root@lamp ~]# which mysqlbinlog /usr/bin/mysqlbinlog/usr/bin/mysqlbinlog
- Path to 'mysql' File:
mysqlへアクセスするためのmysqlクライアントコマンドへのパスを設定します。ディストリビューションのRPMパッケージによって導入した場合には、/usr/bin以下にインストールされています。[root@lamp ~]# which mysql
/usr/bin/mysql
>> MySQL APMによるバックアップ (InnoDB) |
|
今回は、10のトランザクションを発生させるスクリプトを4つ用意し、zipcodeというテーブルに登録される数によって確認してみました。
mysql> \. psql_zip_utf8_1.sql mysql> select count(*) from zipcode; +----------+ | count(*) | +----------+ | 10 | +----------+ 1 row in set (0.00 sec)
まず、最初のスクリプトを実行し、カウントを10にし、MyISAMの時と同様にバックアップを実行します。テストのため、対象であるtestデータベースのみを指定しています。
また、バックアップオプションは、"Full Backup"にします。
バックアップ実行後、同じログに次のトランザクションが記録されないように、ログをフラッシュしてみます。
mysql> flush logs; Query OK, 0 rows affected (0.01 sec) 次のスクリプトを実行して、今度はカウントが20になりました。 mysql> \. psql_zip_utf8_2.sql mysql> select count(*) from zipcode; +----------+ | count(*) | +----------+ | 20 | +----------+ 1 row in set (0.00 sec)
今度は、バックアップの選択は同じですが、ログだけをバックアップするために、バックアップオプションでは"Binary Log Backup"を指定して実行します。
スクリプトが4つなので、上記をあと2回繰り返して、4つのジョブになりました。
>> MySQL APMによるリストア (InnoDB) |
|
バックアップをしたら、リストアということになりますが、確認のために最初にテーブルをドロップし、念のためバイナリログもすべて削除して破壊しておきます。
mysql> drop table zipcode; Query OK, 0 rows affected (0.01 sec) mysql> select count(*) from zipcode; ERROR 1146 (42S02): Table 'test.zipcode' doesn't exist [root@lamp ~]# cd /var/log/mysql-blog/ [root@lamp mysql-blog]# ls lamp.000001 lamp.index [root@lamp mysql-blog]# rm ./* rm: remove 通常ファイル `./lamp.000001'? y rm: remove 通常ファイル `./lamp.index'? y
上記でフルバックアップが1回、バイナリログのバックアップが3回で計4回のバックアップを実行したわけですが、次にこれをリストアしていきます。
各バイナリログのリストアについては、バックアップしたログを元に戻すのではなく、NetVaultのtmpディレクトリにリストアした後で、そこからトランザクションを適用していきます。
最終的にリストアが完了すると、最後の時点まで復旧することができます。
mysql> select count(*) from zipcode;
+----------+
| count(*) |
+----------+
| 40 |
+----------+
1 row in set (0.00 sec)
>> ポイントインタイムリストア |
|
前の項目では、バイナリログの適用を最大限行っていますが、リストアオプションにて指定することで、特定の時点までの復旧を実現することもできます。
- Point in time restore: チェックを入れることで、ポイントインタイムリストアが有効になります。
- Point In time Type
- Use Date For Recovery: 日時を基準に指定
- Use Position For Recovery: バイナリログの番号を基準に指定
それぞれの項目に必要な内容も設定してください。
詳細については、マニュアルをご覧ください。
>> 最終回・・・ |
|
以上、計6回にわたってLAMP環境のバックアップ例をご紹介してきました。