web-dev-qa-db-ja.com

MySQL / Amazon RDSデータベースをS3にバックアップするための推奨される方法は何ですか?

これには2つの目的があります。

  1. アマゾンウェブサービスでリージョン全体の問題が発生した場合にオフサイトバックアップを作成する。
  2. 本番請求先アカウントからベータ請求先アカウントに本番データをコピーします。

現在、Amazonはこれらの2つの使用例のいずれかをそのままサポートしているようには見えません。

Mysqldumpおよびxtrabackup( form postを参照)が言及されているのを見ました。

私はまた、より複雑なプロセスを見ました(文書化 here

  1. ソースの請求先アカウント(製品)の新しいRDSサーバーが、最近のバックアップからスピンアップされます。
  2. 手順1でRDSサーバーにアクセスできる新しいEC2インスタンスが起動されます。
  3. mysqldumpは、このデータベースのバックアップを作成するために使用されます。
  4. バックアップはオフサイトの場所(S3?)にコピーされます。
  5. 別のアカウントまたはリージョン、あるいはその両方で、新しいRDSサーバーが起動されます。
  6. データベースダンプがインポートされます。

ヒントと提案は大歓迎です。

32
Peter Stephens

RDSをバックアップするための推奨される方法は、 自動バックアップ および DBスナップショット を使用することです。 DBスナップショットは基本的にEBSスナップショットと同じで、S3にバックグラウンドで保存されますが、同じリージョン内でのみ使用できます。

クロスリージョンフォールトトレランス(良い計画!)が必要な場合、mysqldumpから「難しい方法」を実行せずに 別のリージョン でデータを復元する方法はありません。代わりに、mysqldumpを使用してバックアップするか(妥当なサイズのデータ​​セットでは遅くてひどい)、独自のEC2ベースのスレーブを別のリージョンに設定し、利用可能な方法(xtrabackup、EBSスナップショットなど)を使用してバックアップします。ただし、その後、独自のMySQLインスタンスの管理に戻るため、RDSを完全に破棄することもできます。

私のお金では、RDSはまったくまったくメリットがなく、パフォーマンス、柔軟性、および信頼性に多くの欠点があります。 RDSがどのような価値を提供するかを自問します。

23
Aaron Brown

同じ問題がありました。私の解決策は 単純なbashスクリプト を記述することでした。ただし、1つの地域に限定されます。

問題のスクリプトは次のとおりです。

#!/bin/bash
NOWDATE=`date +%Y-%m-%d`
BACKUPNAME="$NOWDATE.sql.gz"

echo "Creating backup of database finances to $BACKUPNAME"
mysqldump –user=user –password=password database_name | gzip -9 > $BACKUPNAME

echo "Succesfully created database backup"

echo "Uploading backup to Amazon S3 bucket…"
s3cmd put $BACKUPNAME s3://path/to/file/$BACKUPNAME

echo "Successfully uploaded backup to S3"

echo "Deleting backup file…"
rm $BACKUPNAME

echo "Done"
10
Jeevan Dongre

AWS RDSは、クロスリージョンとクロスアカウント スナップショットのコピー をサポートするようになり、RDSを使用するだけで目標を達成できるようになりました。

この時点でも、S3へのバックアップを取得するには、ダンプスクリプトメソッドを使用する必要があります。 S3-IAまたはGlacierを使用する機能は、RDSバックアップコストがS3標準以上(dbによって異なる)であるため、コスト削減の点で優れています。

7
Mike Lapinskas