TOP
>
サーバ構築・運用
> コールドバックアップ
徹底比較!! PostgreSQL vs MySQLパート2
第5回:バックアップとリストア
著者:
NTTデータ 藤塚 勤也
2007/7/9
前のページ
1
2
3
次のページ
コールドバックアップ
コールドバックアップとは、データベースサーバを完全に停止させた状態にし、データベースのファイル群そのものをバックアップすることです。
通常コールドバックアップでは、OSに用意されているコマンド(cp、rsync、tarなど)を使用して、バックアップを取得します。データベースサーバを正常に停止させた状態なので、ディスク上にあるデータベースファイルのデータは完全に一貫性が保たれています。
つまり、コールドバックアップにより取得したバックアップデータは、そのままリストアすることで、バックアップを取得した時点のデータベース状態に完全に復旧させることができます。
PostgreSQLでのコールドバックアップ
PostgreSQLの場合は、データベースクラスタ配下のディレクトリおよびファイルを全てバックアップします。ただし、テーブルスペースを使用しデータファイルを他のディレクトリに配置している場合や、トランザクションログをシンボリックリンクによって他のディレクトリへ配置している場合は、それらのファイルを取りこぼしのないようにバックアップすることが重要です。
PostgreSQLのデータベースファイルの構成は、連載「徹底比較!! PostgreSQL vs MySQL」の「
第2回:データ構造の比較
」を参考にして下さい。
MySQLでのコールドバックアップ
MySQLの場合は、使用しているストレージエンジンによってデータベースファイルが異なります。MySQLのデータベースファイルは、基本的にデータベースごとに作成されるディレクトリ内に収められていますが、InnoDBエンジンのようにテーブルスペースファイル内にデータを収めるものもありますので、注意が必要です。
ストレージエンジン別のファイル構成は、連載「徹底比較!! MySQLエンジン」の「
第1回:MySQLストレージエンジンの概要
」を参考にして下さい。
ホットバックアップ
ホットバックアップとは、データベースサーバが稼働中にバックアップを取得することです。
ホットバックアップで重要なことは、
いかにして一貫性の保たれたデータのバックアップを取得するか
です。たとえデータベースサーバが稼働中であっても、コールドバックアップと同様にデータベースファイルをバックアップすればよいと思われるかも知れません。ところが、データベースサーバ稼働中のデータベースファイル内のデータは必ずしも一貫性が保たれているとは限らないのです。
例えば、データベースに対して変更したデータは、即時にデータベースファイルに反映されるわけではありません。図1のように、変更データがメモリ内にのみ存在することもあるのです。
図1:データベースファイル内のデータが一貫性を保っていない状況
このような状況でデータベースファイルをバックアップしても、そのデータベースファイル内のデータは一貫性が保たれていません。このため、このデータをリストアしても正常にデータベースを復旧することができません。
PostgreSQLとMySQLには、ホットバックアップを行うための便利なツールが用意されています。それが「pg_dump」と「mysqldump」です。
以下では、それぞれのツールを紹介します。なお「
第4回:PostgreSQLとMySQLに対応したGUIツールを使いこなす
」で取り上げたGUIツールの「pgadminⅢ」と「MySQL Administrator」にもバックアップを取得する機能がありますが、内部的にはpg_dumpとmysqldumpを使用しています。
pg_dump
pg_dumpで取得できるバックアップデータには2種類の形式があります。それは、スクリプト形式とアーカイブファイル形式です。
スクリプト形式はバックアップ対象のデータベースを、再構築することが可能なSQL文の集合によって形成されているテキストファイルとしてバックアップしたものです。スクリプト形式のバックアップデータをリストアするためにはpsqlコマンドラインツールを使用します。
もう一方のアーカイブファイル形式のバックアップデータをリストアするためは、「pg_restore」という専用のツールを使用します。アーカイブファイル形式のバックアップデータは、標準で圧縮されたデータとなっています。
pg_dumpにてバックアップを取得する際には、PostgreSQLの特徴である「MVCC(読み取り一貫性)」機能が働きます。よって、バックアップ取得を開始した時点の一貫性のとれたデータをバックアップできます。PostgreSQLの読み取り一貫性機能は、データベースをロックせずに機能するため、バックアップ取得中もデータベースへのアクセス(読み取り/書き込み)は抑制されません。
mysqldump
mysqldumpにて取得できるバックアップの形式は、pg_dumpでいうところのスクリプト形式と同様で、データベースを再構築することが可能なSQL文の集合にてバックアップファイルを作成します。
よって、mysqldumpにて取得したバックアップをリストアする場合は、特別専用のツールを使用する必要はなく、mysqlコマンドラインツールにて行うことができます。また、テーブル内データをLOADコマンドにて挿入することができる形式のデータファイルを作成することも可能です。
mysqldumpは非常に多くのオプションを持っています。ただし、中にはMySQLサーバのバージョンによって使用できるものとできないものがありますので注意が必要です。
mysqldumpにてバックアップを取得する際、1つ非常に重要な考慮点があります。それは、前述した一貫性の保たれたデータをバックアップする方法です。
InnoDBエンジンのみで構成されているデータベースをバックアップする際は、PostgreSQLと同様に読み込み一貫性機能が働くので、データベースにロックをかける必要はなく、一貫性の保たれたバックアップを取得することができます。しかし、InnoDBエンジン以外のストレージエンジンのテーブルが存在しているデータベースの場合、バックアップを取得している間にデータの変更が発生しないよう、データベースに共有ロックをほどこす必要があります。
バックアップ取得は、一瞬で終了することはないため、もしバックアップ中に値の変更が発生すると、一貫性のないデータをバックアップしてしまうことになります。具体的には、mysqldumpの実行時オプションとして「--lock-all-tables」を指定することにより実現可能です。
前のページ
1
2
3
次のページ
著者プロフィール
株式会社NTTデータ 藤塚 勤也
基盤システム事業本部 オープンソース開発センタ シニアスペシャリスト。
日本タンデムコンピューターズ(現日本HP)を経て、2003年よりNTTデータにてOSS分野に参画。日頃はオリジナルOSSの開発や、OSSを用いたシステム構築への技術支援に従事。「RDBMS解剖学」(翔泳社)を共著。
INDEX
第5回:バックアップとリストア
考え方は同じでもツールや対象が違う
コールドバックアップ
差分バックアップ