はじめに
今回は、DBスペシャリスト試験への対策として、物理設計周りの基礎的な用語についてまとめていきます。
WALプロトコル
WALプロトコルは、Write Ahead Logの略で、データベースのトランザクション処理において、データの更新前にログを書き込むことを指します。
基本的な動作は以下の2点です。
- データベースの更新は、まずその操作をログに書き込む(更新前ログ)
- トランザクションはコミットを行う前に、該当するすべてのデータベース更新情報をログに書き込む(更新後ログ)
以前ブログにまとめたこともありますが、過去問に取り組む中でかなり頻出する知識なので改めてまとめておきます。
トランザクションは、COMMITもしくはROLLBACKが実行されたときに終了します。 しかし、多くのDBMSの内部処理ではデータファイルへ変更を反映する前に、トランザクションの終了をユーザに通知します。 ということは、COMMIT後のデータファイルへの反映前のタイミングで障害が発生した場合への対策として、WALプロトコルが用いられます。
バックアップとリカバリの手法
データベースのバックアップとリカバリは、データの安全性と整合性を確保するために不可欠です。
言葉の定義としては以下のようになります。
バックアップ:重要なデータベースのコピーを作成し、保存するプロセスです。これにより、データ損失や障害発生時に元の状態に復元できます。 リカバリ:バックアップからデータベースを復元するプロセスです。これは、システムの障害やデータの破損、紛失時に行われます。
1. バックアップのタイプ: ホットバックアップとコールドバックアップ
バックアップの方法は主に、システムが稼働中か停止中かによって、ホットバックアップとコールドバックアップに分けられます。
1.1 ホットバックアップ
-
定義: システムが稼働中に、無停止でバックアップを作成できる手法です。
-
特徴:
- トランザクションの仕組みを利用してバックアップを作成。(mysqldumpでInnoDBテーブルをバックアップする等)
- ロックを利用してバックアップを作成。(mysqldumpでMyISAMテーブルをバックアップする等)
- OSやHWのスナップショット機能も利用可能。
- 独自の方法でバックアップを作成するケースもあります。
1.2 コールドバックアップ
- 定義: システムが停止状態でバックアップを作成する手法です。
- 特徴: ディレクトリ以下のディレクトリとファイルをすべてコピーする。
脱線 MySQLとInnoDBとMyISAMの関係性
MySQLに関連する情報を調べているとよく目にするInnoDBとMyISAMという単語について、簡単にまとめておきます。
MySQLは、ウェブアプリケーションを中心に広く使用されているオープンソースのリレーショナルデータベース管理システム(RDBMS)です。MySQLは複数のストレージエンジンをサポートしています。これらのストレージエンジンの中で、InnoDBとMyISAMが最も知られています。
InnoDB
- 主な機能: トランザクション(一連の操作の単位)をサポートし、ACID特性を満たします。これにより、データの安全性と整合性が確保されます。
- 特徴: 外部キー制約と行レベルのロッキングをサポート。これにより、データベースのパフォーマンスと同時実行性が向上します。
- 向いているケース: 高度なデータ整合性が求められるアプリケーション。
詳細はMySQLの公式ドキュメントのInnoDBの紹介を参照してください。
MyISAM
- 主な用途: シンプルな読み取り専用または読み取りが多いワークロードに適しています。
- 特徴: フルテキスト検索が可能。ただし、トランザクションはサポートしていません。
- 向いているケース: 読み取りが主な操作となるアプリケーションや、トランザクションの整合性が重要でないシステム。
詳細はMySQLの公式ドキュメントのMyISAMの紹介を参照してください。
はじめにロックを用いてバックアップを行う際にmysqldumpでMyISAMテーブルをバックアップする等
を例として書いたのはトランザクションのサポートがなく、ロックの仕組みを利用してバックアップを作成する必要があるためです。
mysqldump
バックアップ際に登場したmysqldumpというのは、MySQLデータベースのバックアップを作成ためのコマンドラインツールです。これを使用すると、データベースの内容をテキストファイルにエクスポートできます。このテキストファイルを利用して、データの復元や移行が可能です。
mysqldumpの使用方法やオプションについては、MySQLの公式ドキュメントのmysqldump — データベースバックアップツールを参照してください。
2. バックアップの形式: 論理バックアップと物理バックアップ
バックアップは、データの内容や形式によって、論理バックアップと物理バックアップに分類されます。
2.1 論理バックアップ
定義
論理バックアップは、データベースからデータだけを抜き出して作成するバックアップです。このバックアップ手法は、特定のデータや構造を抽出し、SQLコマンドとしてエクスポートします。
SQLコマンドとしてエクスポートとは、
CREATE TABLE example_table (
id INT PRIMARY KEY,
name VARCHAR(255)
);
のようなCREATE TABLE文であったり、INSERT, UPDATE文のような形式でエクスポートすることを指します。
利点
-
編集可能性: 論理バックアップファイルはテキストファイルであるため、必要に応じて編集可能です。これにより、バックアップから特定のデータのみをリストアすることができます。
-
移植性: 論理バックアップは、他のDBMSへの移植が容易です。これにより、データベース間でのデータ移動やマイグレーションがスムーズに行えます。
欠点
-
ファイルサイズ: 物理バックアップに比べ、論理バックアップのファイルサイズが大きくなる可能性があります。
-
時間コスト: バイナリーテキスト変換が入るため、バックアップとリストアに時間を要することがあります。
2.2 物理バックアップ
定義
物理バックアップは、データベースの物理的なファイルを直接コピーするバックアップ手法です。この方法は、データベースファイル、テーブルスペース、ログファイルなどを含みます。
利点
-
サイズと速度: 物理バックアップは、データベースの物理的なファイルをコピーするため、バックアップ、リストアの速度が速く、最小限のサイズで作成可能です。
-
完全性: 物理バックアップはデータベースの完全なコピーを提供するため、データベースの完全なリカバリが可能です。
欠点
-
互換性: 異なるデータベース管理システム間、または異なるバージョン間での互換性がない場合があります。
-
柔軟性の欠如: 物理バックアップは、個々のテーブルやデータのリストアが困難であることがあります。全体のリストアが必要となる場合があります。
実践的な例
- 論理バックアップ:
mysqldump
ユーティリティは、MySQLデータベースの論理バックアップを作成するためのツールです。これを使用することで、SQLコマンドとしてのバックアップを作成できます。 - 物理バックアップ:
mysqlbackup
コマンド(MySQL Enterprise Backupの一部)を使用して、MySQLデータベースの物理バックアップを作成できます。
詳細な情報や手順については、MySQLの公式ドキュメントを参照してください。
3. 増分バックアップと差分バックアップ
データの保全と迅速なリストアのために、バックアップ戦略として増分バックアップと差分バックアップが存在します。これらの方法は、データ量の増加とストレージコストの増大に対処するために用いられます。
3.1 増分バックアップ
- 定義: 増分バックアップは、前回のバックアップ(増分もしくは完全バックアップ)以降に変更、追加、削除されたデータのみをバックアップする。
- 利点:
- ストレージ使用量が少ない。
- バックアップの作成時間が短い。
- 欠点:
- リストアの際に、全ての増分バックアップファイルと最後の完全バックアップが必要。
- 多くのバックアップセットが関与するため、リストアの時間と複雑性が増加する可能性がある。
3.2 差分バックアップ
- 定義: 差分バックアップは、最後に作成された完全バックアップ以降に変更された全てのデータをバックアップする。
- 利点:
- リストアが簡単で、リストア時間が短縮される。差分バックアップと最後の完全バックアップのみが必要。
- 完全バックアップよりも迅速に作成できる。
- 欠点:
- 増分バックアップに比べて、ストレージ使用量が多くなる可能性がある。
- 毎日の差分バックアップが完全バックアップに近づくにつれて、バックアップの作成時間が長くなる。
3.3 フルバックアップ
- 定義: フルバックアップは、指定されたデータソースの全てのデータをコピーするバックアップ方法です。
- 利点:
- リストアが簡単で、他の任意のバックアップなしでリストアできる。
- バックアップデータの整合性が高い。
- 欠点:
- 他のバックアップ方法に比べて、ストレージ使用量が多い。
- バックアップの作成に時間がかかる可能性がある。
- 他のバックアップ方法に比べて、ストレージ使用量が多い。
参考
所感
バックアップ等の仕組みについては障害が発生してからでは遅いので、事前にしっかりと知識をつけておく必要があると感じました。 重要な知識だからこそ、過去問でも頻出するのだと思います.