AWS EC2上のMySQL:EBSスナップショットとN2WS Backup & Recoveryを使用して整合性のあるバックアップとログのパージ (切り捨て) [N2WS Backup & Recovery]


MySQLはwebアプリケーションとwebサイトに使用される、おそらくもっとも人気なリレーショナルデータベースです。ほとんどのwebホスティングサービスで使用されており、Facebookのようなwebレジェンドの基盤となっています。人気のアプリケーションの「LAMPスタック」という用語のうちの「M」は、MySQL(Linux、Apache、MySQL、PHP)の略です。MySQLはEC2クラウドプラットフォームでも非常に人気があります。 EC2インスタンスで広く使用されており、RDSのオプションの1つとしてAWSによって提供されています。

RDSは、デフォルト(1日に1回)の固定スケジュールバックアップと手動スナップショットをサポートしていますが、ユーザーはEC2で実行中のMySQLデータベースのバックアップを担当しています。このようなバックアップを実行する最も強力な方法は、EBSスナップショットを使用することです。(特に大規模データベースが関与する場合)

EBSスナップショットは、最も効率的なデータ削減方法であるブロックレベルの増分スナップショットを使用して、バックアップの最速かつ最も安価な方法を提供します。EBSスナップショットを使用するための「cherry on top」は、迅速に回復するプロパティです:EBSスナップショットデータベースは、サイズに関係なく、数秒でリストアできます。

MySQLの整合性をとる仕組み

本番環境では、データベースは絶えず更新されます。信頼できるバックアップソリューションを提供するには、EBSスナップショットが作成されたときにデータベースを整合性のある状態にする必要があります。これは、トランザクションが開いたままで、重要なデータがまだメモリにキャッシュされ、ファイルへの書き込み操作がまだ進行中である状況を避けるために必要です。

いくつかのソースは、ファイルシステムレベルでこれを扱うことを提案しています。これらは、特にフリーズコマンドを持つXFSを使用する場合に、IOをファイルシステムレベルでフリーズするよう指示します。ただし、ストレージスタックの上位レベルに移動すると、データベースの整合性が向上します。ファイルシステムレベルの操作では、ファイルシステムが残っていることを確認できますが、データベース自体はさらに優れています。アプリケーションレベルでメモリにキャッシュされたデータが残っていないことを確認できます。また、すべてのトランザクションを確実に閉じたり、整合性のある状態にすることができます。

MySQLには、すべてのデータをディスクにフラッシュし、データベースに読み取りロックを保持するコマンドがあります。つまり、読み取り操作は許可されますが、書き取り操作は許可されません。このロックは短時間しか持続せず、パフォーマンス上での障害や懸念が生じてはなりません。EBSスナップショットのポイントインタイムプロパティでは、スナップショットが開始されるまでデータベースがロックされている必要があります。これらは完了するまで待つ必要はありません。EBSスナップショットは、スナップショットの開始時点のディスクの正確な状態を記録することを保証します。

バイナリログの切り捨て

バックアップソリューションで達成できる1つのタスクは、バイナリログの切り捨てです。バイナリログは、クラッシュ時にポイントインタイム整合性を提供するためにデータベースによって作成されます。バイナリログは記憶領域を消費するため、時々それらを削除するのが理にかなっています。では、バイナリログはいつ削除するべきなのか。整合性のあるバックアップが完了したら、そのバックアップよりも古いバイナリログを削除することができます。これは、ログのトランザクションがバックアップソリューションでよく行われるタスクである理由です。

スクリプト

MySQLデータベースを整合性のある状態にするためのスクリプト例を以下に示します。
N2WS Backup & Recoveryへスクリプトを組み込むことによって、整合性のあるMySQLのバックアップを取得することができます。これらのスクリプトは、それらがリモートマシン上で実行されていると想定し、SSHを使用してMySQLホストに接続し、すべての操作を実行します。3つのスクリプト(1つのヘルパースクリプト)を示します:

ここからは閲覧制限エリア

パスワードで保護されています。閲覧希望の方はご連絡ください。 https://www.climb.co.jp/soft/contact/contact.php

関連トピックス