Verticaデータベースのバックアップと復元方法を徹底解説
データ破損や誤操作による削除が発生した場合に備え、確実にデータを復旧できるようにするには、データベースのバックアップを日常的なメンテナンス作業として組み込むことが重要です。本記事では、Vertica®データベースのバックアップとリストア(復元)について詳しく解説します。
はじめに
Verticaは、大量のデータを扱うために設計されたカラム型ストレージプラットフォームを採用する分析データベース管理システムです。従来はリソースを大量に消費していたシナリオにおいても、高速なクエリパフォーマンスを実現します。
Verticaには、次のようなメリットがあります。
- 従来のリレーショナルデータベース管理システム(RDBMS)と比較して、優れたクエリパフォーマンスを発揮します。
- 高可用性を提供します。
- 汎用的なエンタープライズサーバー上でペタバイト級のスケーラビリティを実現します。
データベースのバックアップおよびリカバリーの仕組みを活用することで、メンテナンスや障害復旧時のダウンタイムを最小限に抑えられます。
データベースのバックアップと復元
Verticaでは、ホットバックアップの作成、復元ポイント数に制限のない増分コピー、そしてデータベース全体またはその一部(スキーマ、テーブルなど)のバックアップが可能です。利用できるバックアップレベルは以下の3種類です。
- フルレベル:Verticaデータベース全体をバックアップし、完全に復元できることを保証するレベルです。
- 増分レベル:前回のバックアップ以降の新規データや変更データのみで構成される、後続のバックアップです。
- オブジェクトレベル:復元対象となる特定のオブジェクトをバックアップするレベルです。
Verticaは柔軟性ときめ細かな粒度を備えており、フルバックアップから特定のオブジェクト(スキーマやテーブルなど)だけを取り出して復元することもできます。
スナップショット
データベーススナップショットは、データベース内のすべてのオブジェクトとデータの一貫性のあるイメージを取得します。オブジェクトレベルのスナップショットでは、データベースオブジェクトのサブセットを選択して含めることが可能で、スナップショット取得時点の関連データや、依存グラフ上の他のオブジェクトも併せて保存されます。スナップショットには任意の名前を付けられます(例:snap、objectsnap1、fullsnap など)。
バックアップロケーション
バックアップロケーションとは、スナップショットとそれに関連するアーカイブを保存する、バックアップホスト上のディレクトリのことです。スナップショット同士には互換性があるため、フルデータベーススナップショットからデータベースを復元した後でも、同じバックアップロケーション内の任意のオブジェクトスナップショットを利用できます。また、同じバックアップロケーション内のすべてのスナップショットは、ハードリンクを介してデータファイルを共有します。
ハードリンクバックアップ
Verticaは、ローカルクラスタインフラストラクチャ内に低コストかつ省スペースなデータベースバックアップのコピー(ハードリンクローカルバックアップ)を作成する機能を提供します。ユーザーデータを外部のバックアップ環境へコピーしないため、これらのバックアップは高速に取得できます。Verticaがコピーするのはカタログデータのみで、ファイルシステム内にLinux®ベースのハードリンクを生成します。
画像出典: https://www.vertica.com/wp-content/uploads/2016/04/sidestep1.png
これらのバックアップは同一のストレージブロック群を共有し、各バックアップはそれぞれの時点におけるコピーを個別に追跡します。そのため、同じ内容が複数の場所に重複して保存されることはありません。
バックアップと復元のプロセスフロー
バックアップとリストアの一連の流れは、以下のステップで構成されます。
- スナップショットの種類(フル、増分、オブジェクトレベルなど)を選択します。
- Verticaバックアップ・リカバリーツールを使用して構成ファイルを作成します。
- バックアップファイルを格納するためのバックアップロケーションを初期化します。
- 構成ファイルを使用してバックアップを取得します。
- バックアップロケーション内のバックアップを検証します。
- 同一または別のVerticaクラスタ上で、データベース全体またはデータベースオブジェクトを復元します。
画像出典: https://www.vertica.com/kb/Copy-and-Restore-Data-from-a-Vertica-Cluster-to-a-Backup/Content/BestPractices/Copy-and-Restore-Data-from-a-Vertica-Cluster-to-a-Backup.htm
構成ファイルの生成
vbr.pyユーティリティは、フル・増分・オブジェクトレベルのいずれかのスナップショットをバックアップおよび復元するためにVerticaが必要とする情報をまとめた構成ファイルを作成します。構成ファイルが存在しない場合、データベースやオブジェクトのバックアップ・復元は実行できず、デフォルトのファイルも用意されていません。
用途に応じて、必要な数だけバックアップ構成ファイルを作成できます(フルまたは増分用、オブジェクトやスキーマ固有、ロケーション固有のファイルなど)。
フルバックアップ用構成ファイル
以下の手順で、データベース全体のバックアップを取得するための構成ファイルを作成します。
$ vbr.py --setupconfig
Snapshot name (backup_snapshot): full_bkp_snap
Backup vertica configurations? (n) [y/n]: y
Number of restore points (1):
Specify objects (no default):
Vertica user name (dbadmin): dbadmin
Save password to avoid runtime prompt? (n) [y/n]: n
Node v_testdb_node0001
Backup host name (no default): v_testdb_node0001
Backup directory (no default): /vert_backup/backup
Node v_testdb_node0002
Backup host name (no default): v_testdb_node0002
Backup directory (no default): /vert_backup/backup
Node v_testdb_node0003
Backup host name (no default): v_testdb_node0003
Backup directory (no default): /vert_backup/backup
Config file name (full_bkp_snap.ini): /vert_backup/backup_conf/full_bkp_snap.ini
Change advanced settings? (n) [y/n]: n
Saved vbr configuration to /vert_backup/backup_conf/full_bkp_snap.ini.
オブジェクト固有の構成ファイル
オブジェクト固有の構成ファイルを作成するには、以下の手順を実行します。
-
データベース内のオブジェクトを一覧表示し、バックアップ対象を選択します。ここでは、Verticaデータベースに次のオブジェクトが存在するものとします。
List of tables Schema | Name | Kind | Owner | Comment --------+-------+-------+---------+--------- public | tab1 | table | dbadmin | public | tab2 | table | dbadmin | public | tab3 | table | dbadmin | (3 rows) -
次のコマンドを実行して、public.tab1テーブルのバックアップを取得するための構成ファイルを作成します。
$ vbr.py --setupconfig Snapshot name (backup_snapshot): tab1_bkp_snap Backup vertica configurations? (n) [y/n]: n Number of restore points (1): Specify objects (no default): public.tab1 Vertica user name (dbadmin): dbadmin Save password to avoid runtime prompt? (n) [y/n]: n Node v_testdb_node0001 Backup host name (no default): v_testdb_node0001 Backup directory (no default): /vert_backup/backup Node v_testdb_node0002 Backup host name (no default): v_testdb_node0002 Backup directory (no default): /vert_backup/backup Node v_testdb_node0003 Backup host name (no default): v_testdb_node0003 Backup directory (no default): /vert_backup/backup Config file name (tab1_bkp_snap.ini): /vert_backup/backup_conf/tab1_bkp_snap.ini Change advanced settings? (n) [y/n]: n Saved vbr configuration to /vert_backup/backup_conf/tab1_bkp_snap.ini. -
次のコマンドを実行して、作成済みのバックアップ構成ファイルを一覧表示します。
$ cd /vert_backup/backup_conf/ $ ls -la total 20 drwxr-xr-x. 2 dbadmin dbadmin 4096 Jan 20 14:21 . -rw-rw-r--. 1 dbadmin dbadmin 488 Jan 20 14:21 tab1_bkp_snap.ini -rw-rw-r--. 1 dbadmin dbadmin 475 Jan 20 14:04 full_bkp_snap.ini
バックアップロケーションの初期化
ソースクラスタ上で、フルバックアップおよびオブジェクトレベルバックアップ用のバックアップロケーションを初期化するには、次のinitコマンドを実行します。
$ /opt/vertica/bin/vbr.py -t init --config-file full_bkp_snap.ini
$ /opt/vertica/bin/vbr.py -t init --config-file tab1_bkp_snap.ini
バックアップの取得
データベース全体のバックアップと、オブジェクトレベルのバックアップのどちらかを取得します。
データベース全体のバックアップ
先ほど作成した構成ファイルfull_bkp_snap.iniを使用して、データベース全体のバックアップを取得します。
$ vbr.py --task backup --config-file full_bkp_snap.ini
Please input vertica password:
Preparing...
Found Database port: 5433
Copying...
348900 out of 348900, 100%
All child processes terminated successfully.
Committing changes on all backup sites...
backup done!
単一オブジェクトのバックアップ
構成ファイルtab1_bkp_snap.iniを使用して、オブジェクトレベルのバックアップを取得します。
$ vbr.py --task backup --config-file tab1_bkp_snap.ini
Please input vertica password:
Preparing...
Found Database port: 5433
Copying...
78920 out of 78920, 100%
All child processes terminated successfully.
Committing changes on all backup sites...
backup done!
バックアップロケーションの確認
次のコマンドを実行して、バックアップロケーションを検証します。
$ cd vert_backup/
$ ls -la
total 16
drwxr-xr-x. 4 dbadmin dbadmin 4096 Jan 20 13:40 .
dr-xr-xr-x. 28 root root 4096 Jan 20 13:53 ..
drwxr-xr-x. 5 dbadmin dbadmin 4096 Jan 20 15:22 backup
drwxr-xr-x. 2 dbadmin dbadmin 4096 Jan 20 15:29 backup_conf
$ cd backup/
$ ll
total 12
drwxrwxr-x. 8 dbadmin dbadmin 4096 Jan 20 15:29 v_testdb_node0001
drwxrwxr-x. 8 dbadmin dbadmin 4096 Jan 20 15:29 v_testdb_node0002
drwxrwxr-x. 8 dbadmin dbadmin 4096 Jan 20 15:29 v_testdb_node0003
$ cd v_testdb_node0001/
$ ll
total 12
drwx------. 3 dbadmin dbadmin 4096 Jan 20 15:29 tab1_bkp_snap
drwx------. 3 dbadmin dbadmin 4096 Jan 20 15:22 full_bkp_snap
バックアップの復元
フルバックアップまたはオブジェクトレベルバックアップのいずれかを復元します。
フルデータベースバックアップからの復元
注意: フルバックアップを復元する際は、データベースが停止している必要があります。
以下の手順で、データベース全体の復元を行います。
-
データベース内のすべてのオブジェクトを削除し、直前に作成したバックアップから復元できる状態にします。
cluster=> dt List of tables Schema | Name | Kind | Owner | Comment --------+-------+-------+---------+--------- public | tab1 | table | dbadmin | public | tab2 | table | dbadmin | public | tab3 | table | dbadmin | (3 rows) cluster=> drop table tab1,tab2,tab3; DROP TABLE cluster=> dt No relations found. -
データベースを停止した状態で、フルバックアップを使用してデータベースを復元します。
$ vbr.py --task restore --config-file full_bkp_snap.ini Please input vertica password: Preparing... Found Database port: 5433 Copying... 248556 out of 248556, 100% All child processes terminated successfully. restore done! -
データベースを起動し、オブジェクトの復元が成功したかどうかを確認します。次の例では、復元が正常に完了しています。
cluster=> dt List of tables Schema | Name | Kind | Owner | Comment --------+-------+-------+---------+--------- public | tab1 | table | dbadmin | public | tab2 | table | dbadmin | public | tab3 | table | dbadmin | (3 rows)
オブジェクトレベルバックアップの復元
注意: オブジェクトレベルの復元では、データベースが稼働中である必要があります。
オブジェクトを復元するには、既存のオブジェクトレベルバックアップを使用する必要があります。次のコードでは、復元に備えてtab1を削除しています。
cluster=> drop table tab1;
DROP TABLE
cluster=> dt
List of tables
Schema | Name | Kind | Owner | Comment
-------+-------+-------+---------+---------
public | tab2 | table | dbadmin |
public | tab3 | table | dbadmin |
(2 rows)
オブジェクトレベルのバックアップからオブジェクトを復元するには、以下の手順を実行します。
-
オブジェクトを復元します。
$ vbr.py --task restore --config-file tab1_bkp_snap.ini Please input vertica password:xxxxxxxx Preparing... Found Database port: 5433 Copying... out of , 100% All child processes terminated successfully. Copying... 2970 out of 2970, 100% All child processes terminated successfully. restore done! -
オブジェクトの復元が成功したかどうかを確認します。次の例は、オブジェクトレベルのバックアップからpublic.tab1を正常に復元できたことを示しています。
$ vsql Password:xxxxxxx dbadmin=> dt List of tables Schema | Name | Kind | Owner | Comment --------+-------+-------+---------+--------- public | tab1 | table | dbadmin | public | tab2 | table | dbadmin | public | tab3 | table | dbadmin | (3 rows) dbadmin=> d tab1 ; List of Fields by Tables Schema | Table | Column | Type | Size | Default | Not Null | Primary Key | Foreign Key --------+-------+--------+--------------+------+---------+----------+-------------+------------- public | tab1 | col1 | numeric(3,) | 8 | | f | f |
まとめ
本記事では、Verticaデータベースのバックアップおよびリカバリー処理の背後にある仕組みを解説しました。あわせて、フル・増分・オブジェクトレベルといった各レベルでVerticaデータベースをバックアップし、復元する具体的な手順も紹介しました。これらの手順を日常運用に組み込むことで、万一の障害発生時にも迅速かつ確実なデータ復旧が可能になります。
データベースに関する詳細は、関連ドキュメントをご参照ください。
www.rackspace.comにアクセスし、Sales Chatをクリックしてぜひご相談ください。
ご意見やご質問がある場合は、フィードバックタブからお気軽にお寄せください。
-
Windowsレジストリのバックアップと復元方法を徹底解説
Windowsレジストリに変更を加える予定があるなら、事前に適切なバックアップを作成しておくことが非常に重要です。レジストリはWindows PCの動作において中核的な役割を担っており、破損すると作業全体に深刻な支障をきたす可能性があります。 レジストリのバックアップは、こうしたトラブルに対する保険とも言える存在です。万一問題が発生しても、あらかじめバックアップがあれば、ファイルを復元することで安全に元の状態へ戻すことができます。 本記事では、Windowsレジストリのバックアップ作成方法と、その復元手順について詳しく解説します。それでは始めましょう。 Windowsレジストリのバックアップを
-
Windowsレジストリのバックアップと復元方法を徹底解説
レジストリは、コンピューターにとって「脳」のような役割を果たす重要な存在です。Windowsのコンポーネント、サービス、アプリケーションなど、システムのほぼすべてに関わる構成情報や設定がここに格納されています。 レジストリを理解するうえで押さえておきたい基本概念は「キー」と「値」の2つです。キーはフォルダのようなオブジェクトで、レジストリエディターの画面上でも実際にフォルダと同じように表示されます。一方、値はフォルダ内のファイルのようなもので、具体的な設定内容が記録されています。 なぜレジストリのバックアップが必要なのか Windowsパソコンの設定に大きな変更を加えたい場合、多くはWindo