Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

SQLデータベースを使う場合、そのバックアップ対策が重要です。特に、24時間稼働のWebシステムでは、どうやってシステムを止めずに安全にバックアップするかを検討しなければなりません。

今回は、SQLが使えるデータベース管理ソフトが扱うデータのバックアップ方法について解説します。

データベースのバックアップは必要?

従来の企業毎のデータセンターで稼働しているデータベースの全てで、何らかのバックアップの仕組みが備えられていました。

これはシステムが稼働していれば、個々のサーバーが故障するかもしれないし、事故や災害でデータセンターそのものが停止する可能性も否定できません。

そのため、情報システムのバックアップは、必須と考えられていました。

しかし、最近のクラウド上で稼働しているデータベースは、冗長化が徹底されており、事故や災害でデータセンターが稼働できなくなっても、別のデータセンターがバックアップすることで、運用を止めずに済むようになっています。

そのため、クラウドに移行したので、バックアップは不要、と考えている方もいるようです。

しかし、人が操作を間違えてデータベースに格納されているデータを破壊してしまう危険は、今の時代でもあります。

バックアップからシステムを復旧する手段を用意していない情報システムを使い続けることは、クラウドの時代になっても大きなリスクを抱えていることに変わりません。

SQLデータベースの仕事をされるエンジニアなら、ぜひ、バックアップの重要性を理解し、データベースのバックアップの仕方について知っておきましょう。

次から、データベースのバックアップの基本について解説します。

物理バックアップと論理バックアップ

データベースのバックアップには、物理バックアップと論理バックアップの2つの考え方があります。まずは、この2つの方法の概略について解説します。

データベースにおける物理バックアップ

OracleやMySQLなどのデータベース管理ソフトは、効率良くデータを取り出せる専用のファイルを作り、そこにデータを格納しています。

そして、そのようなデータベース管理ソフトがアクセスする全てのファイルを、別の領域にコピーする方法が、物理バックアップです。

なお、物理バックアップは、データベース管理ソフトを一旦停止し、全ての情報をファイルに書き込んだ状態で実施します。

そのため、物理バックアップ中、このデータベースを使った情報システムは利用できません。

そのかわり、完全なバックアップを作ることが可能です。また、ファイルをそのままバックアップすることで、バックアップにかかる時間も短縮できます。

データベースにおける論理バックアップ

論理バックアップは、データベース管理ソフトの外部出力機能を使って行うバックアップ方法です。

大抵は、そのままインポートしてデータベースを復活できるダンプ形式でバックアップを作成しますが、CSVファイルなどの別のアプリで利用できるテキストファイルに変換して出力することも可能です。

なお、この方法のメリットは、データベース管理ソフトを稼働した状態でバックアップできる点です。

ただし、バックアップ中にデータベースが更新されると、バックアップされたデータの整合性が崩れる危険があるため、データベースロックを活用するなどの対策が必要です。

また、格納されているデータのサイズによっては、かなり時間がかかることから、特定の時刻の状態でバックアップイメージを作成し、それをファイルに書き出してバックアップとする、といった技術も使われます。

どちらが有利か

物理バックアップと論理バックアップのどちらを使うかは、そのデータベースを使った情報システムによるので、どちらが有利とは言えません。

なお、それぞれで、データを復旧する方法が異なるので、緊急時にどうやって復旧するかを予め決めておき、それを前提にシステムを構築するのが一般的です。

物理バックアップのやり方

物理バックアップでは、エンタープライズ向けのバックアップソフトがよく使われます。

これは、物理バックアップとは、単にファイルのコピーを作れば良い、という訳ではなく、決まった時刻に、確実にバックアップが取れなければならないからです。

また、メールなどでバックアップ状況をレポートしたり、確実に復旧するための手段としてもバックアップソフトが使われます。

なお、確実性には劣りますが、Linuxコマンドを組み合わせて、バックアップを実施することも可能です。

CentOSの標準コマンドで実施する例

次に、クラウドでも使われることの多いCentOSで、MySQLと互換性のあるmariadbの物理バックアップを実施する場合の例を紹介します。

まず、CentOSの標準アプリであるmariadbのデータは、/var/lib/mysqlの下に作成されるので、これがバックアップの対象です。

そして、下記の例では/mnt/backupの下に、バックアップした日付のディレクトリを作成し、その下にコピーします。そして、コピーが終了したら、前日のバックアップを削除しています。

なお、下記の例では同じサーバー内でのコピーなので、tarコマンドを使ってコピーしていますが、別のサーバーにコピーする場合はrsyncコマンドを使います。

#!/usr/bin/bash

NEWDIR=`date +%Y%m%d`
OLDDIR=`date --date '1 day ago' "+%Y%m%d"`
DIST="/var/lib/mysql
TARGET="/mnt/backup"

mkdir $[TARGET]/$[NEWDIR]
(cd $[DIST]; tar cvf - * ) | (cd $[TARGET]/$[NEWDIR]; tar xvf - )

if [ $? != 0 ];then
  echo "エラーが発生しました"
else
  rm -rf $[TARGET]/$[OLDDIR]
  echo "バックアップが終了しました"
fi

論理バックアップのやり方

データベース管理ソフトを動かした状態で実行する論理バックアップでは、それぞれのクライアントコマンドやバックアップ専用コマンドを使います。

そして、バッチファイルにそのコマンドを記述し、指定時刻にそれを実行してバックアップするのが一般的です。

次から、このような論理バックアップの基本について紹介します。

稼働中のデータベースのバックアップは難しい

論理バックアップは、データベース管理ソフトが稼働した状態でバックアップすることから、24時間稼働が前提のWebシステムのデータのバックアップが可能です。

しかし、バックアップ中にデータが更新されてしまうと、データの整合性が崩れてしまい、壊れたデータがバックアップされることもあります。

そのため、整合性が保たれた状態でバックアップするための機能を活用しなければなりません。

SQLを使うデータベース管理ソフトでは、ロック機能があり、更新処理中は、同時に更新されないような仕組みが使われます。

しかし、長い時間のかかるバックアップ中にロックをかけてしまうと、Webシステムのレスポンスが悪くなるなどの支障が出ます。

そのため、ある時刻の整合性の取れた状態のデータであるスナップショットを作成して、それをバックアップします。

なお、このスナップアップを作成する方法は、データベース管理ソフトによってやり方が違います。システムで使用するデータベース管理ソフトに合わせて、バックアップの方法を検討しておきましょう。

MySQLを使った場合の論理バックアップの例

オープンソースのデータベース管理ソフトとして利用者の多いMySQL、および互換性のあるmariadbでは、バックアップ専用コマンドのmysqldumpを使います。

なお、mysqldumpのオプションは、このコマンドを解説したWebページを参照してください。

MySQL :: MySQL 5.6 リファレンスマニュアル :: 4.5.4 mysqldump — データベースバックアッププログラム

次に、mysqldumpを使って全てのデータベースをバックアップする場合の実行例を紹介します。なお、システムを停止せずにバックアップを取るために、シングルトランザクションオプションを使用します。

基本的なmysqldumpの使い方

/usr/bin/mysqldump -uユーザー名 -pパスワード –single-transaction-A > バックアップファイル名

PostgreSQLを使った場合の論理バックアップの例

オープンソースのデータベース管理ソフトのPostgreSQLには、全てのデータをバックアップする専用コマンドとして、pg_dumpallが用意されています。

このコマンドもオプションの数が多いので、オプションを解説しているWebページを参照してください。

pg_dumpall

なお、pg_dumpallと個別のデータベース単位でバックアップができるpg_dumpコマンドで作成されたバックアップファイルは、コマンドが実行された時点のデータベースのスナップショットが保存されます。次に、pg_dumpallの簡単な使い方を紹介します。

/usr/bin/pg_dumpall -U ユーザー名 -W パスワード > バックアップファイル名

大規模なデータベースのバックアップ

Oracle databaseなどのエンタープライズ用途のデータベースでは、扱うデータが大きすぎて、先ほど紹介したMySQLやPostgreSQLのような簡単なバックアップでは、うまくいかないこともあります。

そのため、より複雑なバックアップ方法が採用されていることもあります。

例えば、別にSQLサーバーを用意し、そのサーバーとミラーリングしてデータのコピーを作り、そのサーバーでバックアップと取ることで、本番環境を稼働させた状態で、大容量のデータでも負荷をかけずにバックアップが可能です。

まとめ

SQLが使えるデータベースのバックアップ方法として、物理バックアップと論理バックアップを紹介しました。Webシステムでは、バックアップのためにシステムを停止できないケースがほとんどです。

なお、完全なバックアップが必要な場合は、物理バックアップを検討してください。また、Webシステムなど、24時間稼働が前提のシステムでは、論理バックアップをうまく活用しましょう。

そして、論理バックアップでは、時間がかかるバックアップ中にデータが書き換わった場合、バックアップデータの整合性を保つ対策が必要です。

そのため、大規模なデータベースを使うシステムでは、複雑な仕組みを組んで対応しているケースもあります。ぜひ、そういったより高度なバックアップ方法も学んでください。

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。