もちろん、データをバックアップする主な目的は、ハードウェアに障害が発生した場合にアーカイブをロールバックしてアクセスする機能です。今日ビジネスを行うには、災害が発生した場合にデータが保護され、アクセス可能になることを確実に知る必要があります。データセンターが炎上した場合に備えて、バックアップをオフサイトに保存する必要があります。
データ保護は、中小企業にとって依然として課題です。中小企業は、直接接続ストレージを使用して自社のデータをアーカイブすることを好みます。大多数の企業は、オフサイトのバックアップコピーを作成する計画を立てています。ローカルストレージアプローチは、現代の企業が直面する可能性のある最も深刻なジレンマの1つ、つまり災害時のデータの損失につながる可能性があります。
ビジネスクリティカルなデータベースをオフサイトに転送することを許可するかどうかを判断するとき、および転送するのに適したベンダーを選択するときに、多くの要因が検討されます。テープへの書き込みや遠隔地への発送などの従来の方法は、バックアップが定期的に作成、保護され、バックアップに含まれる情報の整合性が検証されるように、特別なハードウェア、適切なトレーニングを受けたスタッフ、および手順を必要とする複雑なプロセスになる可能性があります。中小企業は通常、IT予算が少ないです。多くの場合、専用のデータセンターがある場合でも、セカンダリデータセンターを用意する余裕はありません。それでもなお、バックアップファイルのコピーをオフサイトに保管することは重要です。ハリケーン、洪水、火災、盗難などの災害により、サーバーとストレージが破壊される可能性があります。バックアップされたデータを別のデータセンターに保持することで、プライマリデータセンターで何が起こっているかに関係なく、データの安全性が確保されます。クラウドストレージは、この問題に対処するための優れた方法です。
クラウドバックアップアプローチでは、考慮すべき要素がいくつかあります。あなたが持っている質問のいくつかは次のとおりです:
- バックアップされたデータは、外部データセンターに保管されていますか?
- パブリックインターネットネットワークを介した外部データセンターとの間の転送は安全ですか?
- RTO(目標復旧時間)に影響はありますか?
- バックアップとリカバリのプロセスはITスタッフにとって十分簡単ですか?
- 既存のプロセスに必要な変更はありますか?
- サードパーティのバックアップツールが必要ですか?
- 必要なソフトウェアまたはデータ転送に関する追加費用はいくらですか?
- ストレージのコストはいくらですか?
クラウドへのバックアップを行う際のバックアップ機能
MySQLサーバーまたはバックアップ先が、パブリッククラウド、ホスティングプロバイダーなどの公開されたインフラストラクチャにある場合、または信頼できないWANネットワークを介して接続されている場合は、バックアップポリシーで追加のアクションを検討する必要があります。 MySQLのデータベースバックアップを実行する方法はいくつかあり、バックアップの種類に応じて、リカバリ時間、サイズ、およびインフラストラクチャオプションが異なります。クラウドストレージソリューションの多くは、APIフロントエンドが異なる単なるストレージであるため、バックアップソリューションは少しのスクリプトで実行できます。では、プロセスをスムーズかつ安全にするために必要なオプションは何ですか?
暗号化
バックアップデータのセキュリティを強化するために、暗号化を適用することは常に良い考えです。暗号化を実装する簡単な使用例は、パブリッククラウドにあるオフサイトのバックアップストレージにバックアップをプッシュする場合です。
暗号化されたバックアップを作成する場合、覚えておくべきことの1つは、通常、回復に時間がかかることです。バックアップは、リカバリアクティビティの前に復号化する必要があります。データセットが大きい場合、RTOに遅延が生じる可能性があります。
一方、暗号化に秘密鍵を使用している場合は、必ず安全な場所に保管してください。秘密鍵が欠落している場合、バックアップは役に立たず、回復できません。キーが盗まれた場合、同じキーを使用して作成されたすべてのバックアップは、保護されなくなるため、危険にさらされます。一般的なGnuPGまたはOpenSSLを使用して、秘密鍵または公開鍵を生成できます。
GnuPGを使用してmysqldump暗号化を実行するには、秘密鍵を生成し、それに応じてウィザードに従います。
$ gpg --gen-key
通常どおり、プレーンなmysqldumpバックアップを作成します。
$ mysqldump --routines --events --triggers --single-transaction db1 | gzip > db1.tar.gz
ダンプファイルを暗号化し、古いプレーンバックアップを削除します:
$ gpg --encrypt -r ‘[email protected]’ db1.tar.gz
$ rm -f db1.tar.gz
GnuPGは、暗号化されたファイルに.gpg拡張子を自動的に追加します。復号化するには、
--decryptフラグを指定してgpgコマンドを実行するだけです:
$ gpg --output db1.tar.gz --decrypt db1.tar.gz.gpg
OpenSSLを使用して暗号化されたmysqldumpを作成するには、秘密鍵と公開鍵を生成する必要があります。
OpenSSL req -x509 -nodes -newkey rsa:2048 -keyout dump.priv.pem -out dump.pub.pem
この秘密鍵(dump.priv.pem)は、将来の復号化のために安全な場所に保管する必要があります。 mysqldumpの場合、たとえば、コンテンツをopensslにパイプすることで、暗号化されたバックアップを作成できます。
mysqldump --routines --events --triggers --single-transaction database | openssl smime -encrypt -binary -text -aes256
-out database.sql.enc -outform DER dump.pub.pem
復号化するには、-decryptフラグと一緒に秘密鍵(dump.priv.pem)を使用するだけです。
openssl smime -decrypt -in database.sql.enc -binary -inform
DEM -inkey dump.priv.pem -out database.sql
Percona XtraBackupを使用して、xbstreamオプションを使用してローカルバックアップまたはストリーミングバックアップを暗号化または復号化し、バックアップに別の保護レイヤーを追加できます。暗号化はlibgcryptライブラリを使用して行われます。 --encrypt-keyオプションと--encryptkey-fileオプションの両方を使用して、暗号化キーを指定できます。暗号化キーは、
のようなコマンドで生成できます$ openssl rand -base64 24
$ bWuYY6FxIPp3Vg5EDWAxoXlmEFqxUqz1
この値は、暗号化キーとして使用できます。 --encrypt-keyを使用したinnobackupexコマンドの例:
$ innobackupex --encrypt=AES256 --encrypt-key=”bWuYY6FxIPp3Vg5EDWAxoXlmEFqxUqz1” /storage/backups/encrypted
上記のOpenSSLコマンドの出力は、ファイルにリダイレクトすることもでき、キーファイルとして扱うことができます。
openssl rand -base64 24 > /etc/keys/pxb.key
代わりに--encrypt-key-fileオプションと一緒に使用してください:
innobackupex --encrypt=AES256 --encrypt-key-file=/etc/keys/pxb.key /storage/backups/encrypted
復号化するには、適切な--encrypt-keyまたは--encrypt-key-fileを指定して--decryptオプションを使用するだけです。
$ innobackupex --decrypt=AES256 --encrypt-key=”bWuYY6FxIPp3Vg5EDWAxoXlmEFqxUqz1”
/storage/backups/encrypted/2018-11-18_11-10-09/
MySQLとMariaDBの暗号化の詳細については、別のブログ投稿を確認してください。
圧縮
データベースクラウドバックアップの世界では、圧縮はあなたの親友の1つです。ストレージスペースを節約できるだけでなく、データのダウンロード/アップロードに必要な時間を大幅に短縮できます。
gzip、bzip2、zip、rar、7zなどの圧縮ツールがたくさんあります。
通常、mysqldumpはフラットテキストファイルであるため、最高の圧縮率を実現できます。圧縮ツールと比率に応じて、圧縮されたmysqldumpは元のバックアップサイズの最大6分の1になる可能性があります。バックアップを圧縮するには、mysqldump出力を圧縮ツールにパイプして、宛先ファイルにリダイレクトします。コメント、ロックテーブルステートメント(InnoDBの場合)、パージされたGTIDのスキップ、トリガーなど、いくつかのことをスキップすることもできます。
mysqldump --single-transaction --skip-comments --skip-triggers --skip-lock-tables --set-gtid-purged OFF --all-databases | gzip > /storage/backups/all-databases.sql.gz
Percona Xtrabackupを使用すると、ストリーミングモード(innobackupex)を使用できます。このモードでは、ファイルをバックアップディレクトリにコピーする代わりに、バックアップを特別なtarまたはxbstream形式でSTDOUTに送信します。データセットによっては、圧縮バックアップを使用すると、元のバックアップサイズの最大50%を節約できます。 backupコマンドに--compressオプションを追加します。ストリーミングバックアップでxbstreamを使用することにより、-compress-threadsオプションを使用して圧縮プロセスを高速化できます。このオプションは、並列データ圧縮のためにxtrabackupによって作成されるスレッドの数を指定します。このオプションのデフォルト値は1です。この機能を使用するには、ローカルバックアップにオプションを追加します。圧縮を使用したバックアップの例:
innobackupex --stream=xbstream --compress --compress-threads=4 > /storage/backups/backup.xbstream
準備段階でログを適用する前に、圧縮ファイルをxbstreamを使用して
解凍する必要があります。
次に、qpressを使用して、実行する前に、それぞれのディレクトリで.qpで終わる各ファイルを抽出します。
apply-logコマンドを使用してMySQLデータを準備します。
$ xbstream -x < /storage/backups/backup.xbstream
ネットワークスループットを制限する
クラウドバックアップの優れたオプションは、バックアップを実行するときにネットワークストリーミング帯域幅(Mb / s)を制限することです。あなたはpvツールでそれを達成することができます。 pvユーティリティには、データ修飾子オプション-L RATE、-rate-limit RATEが付属しており、転送を1秒あたり最大RATEバイトに制限します。以下の例では、2MB/秒に制限されます。
$ pv -q -L 2m
以下の例では、並列gzip、暗号化を使用したxtrabackupを確認できます
/usr/bin/innobackupex --defaults-file=/etc/mysql/my.cnf --galera-info --parallel 4 --stream=xbstream --no-timestamp . | pv -q -L 2m | pigz -9 - | openssl enc -aes-256-cbc -pass file:/var/tmp/cmon-008688-19992-72450efc3b6e9e4f.tmp > /home/ubuntu/backups/BACKUP-3445/backup-full-2018-11-28_213540.xbstream.gz.aes256 ) 2>&1.
バックアップをクラウドに転送
これで、バックアップが圧縮および暗号化されると、転送の準備が整います。
Googleクラウド
gsutilコマンドラインツールは、Google Cloud Storageのストレージバケットを管理、監視、使用するために使用されます。 gcloud utilを既にインストールしている場合は、gsutilがすでにインストールされています。それ以外の場合は、ここからLinuxディストリビューションの手順に従ってください。
gcloud CLIをインストールするには、以下の手順に従ってください。
curl https://sdk.cloud.google.com | bash
シェルを再起動します:
exec -l $SHELL
gcloud initを実行して、gcloud環境を初期化します。
gcloud init
gsutilコマンドラインツールをインストールして認証し、現在のプロジェクトにmysql-backups-storageという名前の地域ストレージバケットを作成します。
gsutil mb -c regional -l europe-west1 gs://severalnines-storage/
Creating gs://mysql-backups-storage/
Amazon S3
RDSを使用してデータベースをホストしていない場合は、独自のバックアップを実行している可能性が非常に高くなります。 AmazonのAWSプラットフォームであるS3(Amazon Simple Storage Service)は、データベースのバックアップやその他のビジネスクリティカルなファイルを保存するために使用できるデータストレージサービスです。 Amazon EC2インスタンスまたはオンプレミス環境のいずれかで、サービスを使用してデータを保護できます。
バックアップはWebインターフェイスを介してアップロードできますが、専用のs3コマンドラインインターフェイスを使用して、コマンドラインおよびバックアップ自動化スクリプトを介してバックアップを実行できます。バックアップを非常に長期間保持する必要があり、リカバリ時間が問題にならない場合は、バックアップをAmazon Glacierサービスに転送して、はるかに安価な長期ストレージを提供できます。ファイル(Amazonオブジェクト)は、bucketという名前の巨大なフラットコンテナに論理的に保存されます。 S3は、その内部へのRESTインターフェースを提供します。このAPIを使用して、バケットとオブジェクトでCRUD操作を実行したり、両方の権限と構成を変更したりできます。
Linux、Windows、およびmacOSでのAWS CLIの主な配布方法は、Pythonのパッケージマネージャーであるpipです。手順はここにあります。
aws s3 cp severalnines.sql s3://severalnine-sbucket/mysql_backups
デフォルトでは、S3は11個の9sオブジェクトの耐久性を提供します。つまり、1.000.000.000(10億)個のオブジェクトを格納すると、平均して10年ごとに1個のオブジェクトが失われると予想できます。 S3がその印象的な数の9を達成する方法は、オブジェクトを複数のアベイラビリティーゾーンに自動的に複製することです。これについては、別の投稿で説明します。 Amazonには、世界中に地域のデータセンターがあります。
MicrosoftAzureストレージ
MicrosoftのパブリッククラウドプラットフォームであるAzureには、制御ラインインターフェイスを備えたストレージオプションがあります。情報はここにあります。オープンソースのクロスプラットフォームのAzureCLIは、Azureプラットフォームを操作するための一連のコマンドを提供します。豊富なデータアクセスなど、Azureポータルに見られる機能の多くを提供します。
Azure CLIのインストールは非常に簡単です。手順については、こちらをご覧ください。以下に、バックアップをMicrosoftストレージに転送する方法を示します。
az storage blob upload --container-name severalnines --file severalnines.sql --name severalnines_backup
MySQLおよびMariaDBバックアップ用のハイブリッドストレージ
パブリックおよびプライベートクラウドストレージ業界の成長に伴い、ハイブリッドストレージと呼ばれる新しいカテゴリがあります。このテクノロジーにより、ファイルをローカルに保存し、変更をクラウドのリモートに自動的に同期することができます。このようなアプローチは、高速復元(RTOの削減)のために最近のバックアップをローカルに保存する必要性と、ビジネス継続性の目標から生まれています。
効率的なリソース使用の重要な側面は、バックアップを個別に保持することです。冗長ディスクドライブにローカルに保存されるデータはより短い期間保持され、クラウドバックアップストレージはより長い時間保持されます。多くの場合、バックアップの保持期間を長くする必要があるのは、さまざまな業界の法的義務(接続メタデータを保存する必要があるテレコムなど)によるものです。 Google Cloud Services、Microsoft Azure、Amazon S3などのクラウドプロバイダーはそれぞれ、実質的に無制限のストレージを提供し、ローカルスペースのニーズを減らします。これにより、ローカルディスクスペースを気にせずに必要な限り、バックアップファイルをより長く保持できます。
ClusterControlを使用してバックアップをスケジュールする場合、各バックアップ方法は、バックアップの実行方法に関する一連のオプションを使用して構成できます。ハイブリッドクラウドストレージにとって最も重要なものは次のとおりです。
- ネットワークスロットリング
- 組み込みのキー管理による暗号化
- 圧縮
- ローカルバックアップの保持期間
- クラウドバックアップの保持期間
結論
クラウドはデータバックアップ業界を変えました。手頃な価格であるため、中小企業にはすべてのデータをバックアップするオフサイトソリューションがあります。
あなたの会社は、増大するストレージのニーズに対して、クラウドのスケーラビリティと従量課金制を利用できます。バックアップ戦略を設計して、データセンターにローカルコピーを提供し、すぐに復元できるようにすることと、AWS、Google、Azureからのクラウドストレージサービスへのシームレスなゲートウェイを提供することができます。
高度なTLSおよびAES256ビット暗号化および圧縮機能は、クラウドで占めるスペースを大幅に削減する安全なバックアップをサポートします。