【データベース入門】 バックアップ・リカバリ・クラスター

データベース
スポンサーリンク

バックアップ

バックアップ手法には次の3グループの手法があります。

  • 「ホットバックアップ」or「コールドバックアップ」
  • 「物理バックアップ」or「論理バックアップ」
  • 「フルバックアップ」or「差分/増分バックアップ」

「ホットバックアップ」or「コールドバックアップ」

ホットバックアップとは、バックアップ対象のデータベースを稼働したままでバックアップデータを取得する方法です。

コールドバックアップとは、バックアップ対象のデータベースを停止してバックアップデータを取得する方法です。

代表的な RDBMS で各バックアップを取得する方法は以下のとおりです。

RDBMSホットバックアップコールドバックアップ
MySQLmysqldumpOS のコマンド:cp, tar コマンド等
PostgreSQLpg_dumpOS のコマンド:cp, tar コマンド等

「物理バックアップ」or「論理バックアップ」

物理バックアップとは、物理的なファイルをバックアップする方法です。

論理バックアップとは、SQL ベース等でバックアップする方法です。

「物理バックアップ」と「論理バックアップ」の性質の違いは以下のとおりです。

性質物理バックアップ論理バックアップ
フォーマットバイナリ形式テキスト形式
バックアップ速度速い遅い(バイナリ⇔テキストの変換が必要)
バックアップサイズ小さい大きい
移植性低い(他のバージョンや他のDBMSに移行不可能)高い(他のバージョンや他のDBMSに移行可能)
データ書き換え困難容易(SQL 文を書き換えるだけ)

代表的な RDBMS で各バックアップを取得する方法は以下のとおりです。

RDBMS物理バックアップ論理バックアップ
MySQLMySQLEnterpriseBackupmysqldump
PostgreSQLpg_basebackuppg_dump

「フルバックアップ」or「差分/増分バックアップ」

フルバックアップは、データベース全体をバックアップする方法です。

https://downloads.mysql.com/presentations/20151208_01_MySQL_Backup_for_Beginners.pdf

差分/増分バックアップは、直近のバックアップ以降に更新されたデータのみをバックアップする方法です。

  • 差分バックアップ:直近のフルバックアップ以降に更新されたデータをバックアップする方法
  • 増分バックアップ:直近のバックアップ(種別はフルとは限らない)以降に更新されたデータをバックアップする方法
https://downloads.mysql.com/presentations/20151208_01_MySQL_Backup_for_Beginners.pdf

「フルバックアップ」と「差分/増分バックアップ」の性質の違いは以下のとおりです。

性質フルバックアップ差分/増分バックアップ
リストア単純複雑(PITR 後述します
バックアップ取得時間長い短い(変更したデータだけ)
バックアップサイズ大きい小さい

代表的な RDBMS で各バックアップを取得する方法は以下のとおりです。

RDBMSフルバックアップ差分/増分バックアップ
MySQLmysqldumpバイナリログ
PostgreSQLpg_dumpWAL ログ
スポンサーリンク

PITR(Point In Time Recovery)

PITR とは、「バックアップ + アーカイブログ(バックアップから変更した内容)」を利用して、特定の時点までデータをリカバリすることです。

PITR を利用したデータの復旧は以下の流れとなります。

PITR はクラッシュリカバリトランザクションログを利用した仕組みです。

多くの DBMS では、以下のようにトランザクションログをアーカイブし、アーカイブログとします。(MySQL の場合はバイナリログを利用します。

スポンサーリンク

クラスター

クラスターとは、1つの機能を実行するために、複数のコンピュータを利用することです。

クラスター化する理由は、「可用性(継続的に稼働すること)」と「パフォーマンス」を向上させるためです。

データベースにおけるクラスターには次の2つの概念があります。

シェアードディスク

シェアードディスクとは、各ノード(コンピュータ)が共通のストレージを利用して並列して処理を行うことで、パフォーマンスを向上させるクラスターの方式です。

シェアードディスクでは以下のように各ノードが共通のストレージを利用します。

ノードの前段にはロードバランサーを置いたりします

同じ行に対して複数のノードが同時に書き込むと、書き込みロックが発生するため、単純に性能が2倍になるわけではないです。

また、ストレージの読み書きがパフォーマンスのボトルネックとなります。

シェアードナッシング

シェアードナッシングとは、各ノード(コンピュータ)が別々のストレージを持つことでパフォーマンスを向上させるクラスターの方式です。

シェアードナッシングでは、以下のように各ノードは別々のテーブル情報を持ちます。

https://www.digitalocean.com/community/tutorials/understanding-database-sharding より改変

このテーブルを分割する単位をシャードと呼び、処理するテーブルデータが被らないようにします。これにより、各ノードは必ず処理するデータが他のノードと被らないため、ロックが発生しません。

つまりノードを増やせば増やすほどストレージの読み書きを分散できるため、パフォーマンスが求められる NoSQL で利用されることがあります。

シャーディング(レコードをシャードに振り分ける)には、次の3つの方法があります。

  • Key Based Sharding
  • Range Based Sharding
  • Directory Based Sharding

Hash Base Sharding (Key Based Sharding)

Hash Base Sharding とは、指定したカラムのハッシュ値を元にレコードをシャードに振り分ける方法です。

以下の図は COLUMN1 に対してハッシュ関数を利用して、シャード1、2のどちらかにレコードを割り当てています。

https://www.digitalocean.com/community/tutorials/understanding-database-sharding

ハッシュ値のとりうる値 = シャードの数です。

Range Based Sharding

Range Based Sharding とは、値の範囲ごとにレコードをシャードに振り分ける方法です。

以下の例では、PRICE カラムの値を元に3つのシャードに振り分けています。

https://www.digitalocean.com/community/tutorials/understanding-database-sharding

Directory Based Sharding

Directory Based Sharding は、カラムでシャードを指定することで、レコードをシャードに振り分ける方法です。

以下の例では、DELIVERY ZONE カラムで振り分けるシャードを指定しています。

シェアードディスク vs シェアードナッシング

比較項目シェアードナッシングシェアードディスク
ノード障害単一障害点となる
(後述するレプリカで回避可能)
単一障害点は無い
ボトルネック無しストレージへのアクセス
結合処理あり(各ノードの読み取り結果を結合する)無し
競合回避シャーディングトランザクションロック
利用用途全行の操作
・ストレージの読み書きを分散可能
単一行の操作
・単一行は分散の意味無し
・書き込み時に「シャーディング」が無い
・読み取り時に「結合」が無い

参考資料

MySQL5.7入門(バックアップ編)
https://downloads.mysql.com/presentations/20151208_01_MySQL_Backup_for_Beginners.pdf

0

コメント