it-swarm.asia

ما هي الطريقة الموصى بها لإجراء نسخ احتياطي لقاعدة بيانات MySQL / Amazon RDS إلى S3؟

لدي غرضان لهذا:

  1. الحصول على نسخة احتياطية خارج الموقع في حالة وجود مشكلة على مستوى المنطقة مع Amazon Web Services.
  2. لنسخ بيانات الإنتاج من حساب فواتير الإنتاج إلى حساب فواتير بيتا.

في الوقت الحالي ، لا يبدو أن Amazon تدعم أيًا من حالتا الاستخدام هاتين خارج العلبة.

لقد رأيت mysqldump و xtrabackup (انظر نموذج مشاركة) مذكورة.

لقد رأيت أيضًا عملية أكثر تعقيدًا (موثقة هنا )

  1. يتم إغلاق خادم RDS جديد في حساب الفوترة المصدر (prod) من نسخة احتياطية حديثة.
  2. نسج مثيل EC2 جديد لديه حق الوصول إلى خادم RDS في الخطوة 1.
  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

كان لي نفس القضية. كان الحل هو كتابة نص باش بسيط . يقتصر على منطقة واحدة ولكن.

إليك النص البرمجي المعني:

#!/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 القياسية أو أعلى (تختلف حسب ديسيبل).

7
Mike Lapinskas