Apa cara yang disarankan untuk membuat cadangan database MySQL / Amazon RDS ke S3?

31

Saya memiliki dua tujuan untuk ini:

  1. Untuk memiliki cadangan di luar kantor jika terjadi masalah dengan Amazon Web Services di seluruh wilayah.
  2. Untuk menyalin data produksi dari akun penagihan produksi ke akun penagihan beta.

Saat ini tampaknya Amazon tidak mendukung salah satu dari dua kasus penggunaan ini di luar kotak.

Saya telah melihat mysqldump dan xtrabackup (lihat form posting) yang disebutkan.

Saya juga melihat proses yang lebih rumit (didokumentasikan di sini )

  1. Server RDS baru di akun penagihan sumber (prod) diputarkan dari cadangan baru-baru ini.
  2. Contoh EC2 baru diputar yang memiliki akses ke server RDS di langkah 1.
  3. mysqldump digunakan untuk membuat cadangan dari basis data ini.
  4. Cadangan disalin ke lokasi di luar lokasi (S3?).
  5. Di akun dan / atau wilayah terpisah, server RDS baru diputar.
  6. Database dump diimpor.

Kiat dan saran sangat dihargai.

Peter Stephens
sumber

Jawaban:

22

Cara yang disarankan untuk membuat cadangan RDS adalah dengan pencadangan otomatis dan snapshot DB . Snapshots DB pada dasarnya sama dengan snapshot EBS, yang disimpan dalam S3 di belakang layar, tetapi hanya tersedia di wilayah yang sama.

Jika Anda memerlukan toleransi kesalahan lintas wilayah (rencana yang baik!), Tidak ada cara untuk memulihkan data Anda di wilayah lain tanpa melakukannya "dengan cara yang sulit" dari mysqldump. Alternatif Anda adalah mencadangkan menggunakan mysqldump (lambat dan mengerikan untuk setiap dataset berukuran wajar), atau mengatur budak berbasis EC2 Anda sendiri di wilayah lain dan mencadangkannya dengan menggunakan metode apa pun yang tersedia (xtrabackup, snapshot EBS, dll.). Namun, kemudian Anda kembali untuk mengelola instance MySQL Anda sendiri, sehingga Anda mungkin juga meninggalkan RDS sepenuhnya.

Untuk uang saya, RDS sama sekali tidak memberikan manfaat dalam cara apa pun dan banyak kerugian dalam kinerja, fleksibilitas, dan keandalan. Saya akan bertanya pada diri sendiri apa nilai RDS berikan kepada Anda.

Aaron Brown
sumber
Untuk kebutuhan saya saat ini mysqldump dapat berfungsi dengan baik. Saya tidak mengharapkan dataset besar dan saya biasanya tidak perlu data dipindahkan terlalu cepat. Saya berharap RDS akan mendukung fitur untuk memutar server baru dari snapshot di akun lain. Fitur lain yang bermanfaat adalah mengimpor / mengekspor foto-foto dari Amazon menggunakan S3 atau server Impor / Ekspor mereka. Bagaimanapun, terima kasih atas jawabannya.
Peter Stephens
4
Snapshot RDS sekarang dapat disalin ke wilayah lain. Lihat pengumuman ini dan dokumentasi ini untuk detailnya.
shelley
9

Saya memiliki masalah yang sama. Solusi saya adalah menulis skrip bash sederhana . Namun terbatas pada satu wilayah saja.

Berikut skrip yang dimaksud:

#!/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"
Jeevan Dongre
sumber
Saya sangat merekomendasikan --satu transaksi saat menjalankan mysqldump
user1250
7

AWS RDS sekarang mendukung penyalinan snapshot lintas wilayah dan lintas-akun yang akan memungkinkan Anda untuk menyelesaikan tujuan Anda hanya menggunakan RDS.

Anda masih harus menggunakan metode skrip dump untuk mendapatkan cadangan ke S3 pada saat ini. Kemampuan untuk menggunakan S3-IA atau Gletser akan baik dalam hal penghematan biaya karena biaya cadangan RDS berada pada Standar S3 atau lebih tinggi (bervariasi menurut db).

Mike Lapinskas
sumber
1
Ada batas lunak 100 snapshot manual per wilayah, per akun.
Yudas