Jawaban:
Jika Anda ingin melakukan backup MySQL dengan benar, tanpa downtime, Anda harus mereplikasi database ke server cadangan. Itu tidak harus sangat kuat, hanya perlu mengatasi beban tulis dari database master Anda. Anda seharusnya tidak menggunakan server ini dalam produksi. Jika replikasi tidak pernah mengikuti, Anda memerlukan server yang lebih kuat. Anda dapat memeriksa dengan membandingkan file log dan posisi dari output
> SHOW MASTER STATUS\G
pada master dan
> SHOW SLAVE STATUS\G
pada budak. Saya pikir MySQL5 akan menunjukkan lag dari SHOW SLAVE STATUS
.
Ketika Anda senang bahwa budak Anda mengikuti, Anda dapat melakukan backup dengan melakukan
SLAVE STOP;
pada slavemysqldump --opt
pada server slave.SLAVE START;
pada slaveJika Anda melakukan ini, maka Anda akan memiliki cadangan yang konsisten dari basis data Anda. Metode ini mencegah database yang berbeda atau lebih buruk lagi, tabel yang berbeda dalam database yang sama tidak sinkron dan mencegah downtime dengan mengunci tabel untuk penulisan saat Anda melakukan backup.
Manfaat yang bagus dari pengaturan ini adalah Anda memiliki salinan basis data yang dapat Anda gunakan untuk menjalankan kueri yang panjang dan mahal yang tidak akan memengaruhi layanan langsung Anda.
Beberapa tips acak:
mysqldump --opt
, karena biasanya cara tercepat untuk mengimpor SQL yang dihasilkanSaya menggunakan skrip yang digunakan mysqldump
untuk mengekstrak data / skema ke file untuk setiap database. Data tersebut didukung oleh cadangan netbackup normal untuk direkam. Anda jelas dapat menambahkan lonceng dan peluit lebih lanjut tetapi ini hanya dump dasar sederhana.
#!/bin/sh
# Find out what databases are in mysql and back them up
# Delete old backups
STARTTIME=` date +%Y%m%d-%H%M `
#BACKUP_DIR="/usr/local/db_backups"
BACKUP_DIR="/var/local/db_backups"
LOGFILE="/var/log/db_backups.log"
USER="root"
PASSWD="<password>"
KEEP="7"
(
echo
echo " ---MySQL backups start ${STARTTIME} ---"
#delete any backup written more than ${KEEP} days ago
echo "Removing files over ${KEEP} days old from ${BACKUP_DIR}:"
/usr/bin/find ${BACKUP_DIR} -mindepth 1 -mtime +${KEEP} -print -delete
echo
echo "Performing today's dumps"
#find each database running in this instance of mysl
for DB in ` echo "show databases;"|mysql -u${USER} -p${PASSWD} mysql |awk " NR>1 {print $1} " `
do
#generate a backup file name based on the data base name
BACKUP_FILE="${BACKUP_DIR}/${DB}-${STARTTIME}.sql"
echo "Processing database ${DB} into file ${BACKUP_FILE}"
# dump the database data/schema into the backup file
mysqldump -u${USER} -p${PASSWD} --add-drop-table ${DB} > ${BACKUP_FILE}
gzip ${BACKUP_FILE}
done
ENDTIME=` date +%Y%m%d-%H%M `
echo
echo " ---MySQL backups complete ${ENDTIME} ---"
echo
) >> ${LOGFILE} 2>&1
Biasanya database didukung sekali sehari jika harus dihentikan, dan kemudian cadangan ditransfer ke area penyimpanan untuk konsolidasi kemudian mereka pergi ke tape.
Pencadangan database dilakukan dengan alat asli yang disediakan dengan mesin database sebagian besar waktu.
Cadangan tidak boleh disimpan di server dengan data jika terjadi kegagalan perangkat keras.
Sangat disarankan untuk memiliki replika terbaru dari server database Anda jika memungkinkan, lebih baik memiliki macanism failover untuk database produksi.
Untuk perangkat lunak, misalnya Anda dapat melihat bacula atau zmanda
Penyiapan standar kami adalah HA cluster dengan dua basis data satu replikasi ke yang lain yang hanya baca.
Kami melakukan pencadangan penuh sekali sehari dan kemudian memiliki kebijakan per pelanggan untuk menghapus cadangan lama, umumnya kami menyimpan 4 cadangan harian terakhir (untuk bertahan di akhir pekan;), 4 minggu terakhir dan 4 minggu pertama terakhir dalam sebulan. Setelah itu satu atau dua dump setahun akan disimpan ke arsip untuk disimpan selamanya.
Kami juga menyimpan log replikasi selama berapa lama kami mampu untuk menyimpan ruang disk. Mereka juga sangat berguna sebagai alat debugging karena mereka merekam dengan tepat siapa yang mengubah apa dan kapan.
Secara teoritis semua yang Anda butuhkan adalah satu cadangan penuh dan semua log replikasi untuk dapat melakukan pemulihan waktu, tetapi cadangan lengkap yang lebih sering akan mempercepat pemulihan.
Salah satu trik rapi dengan cadangan adalah dengan menggunakan tabel innodb dan - parameter tunggal-transaksi untuk dump mysql, dengan cara itu cadangan tidak akan memblokir basis data saat sedang berjalan.
Seluruh tujuan pencadangan adalah untuk dapat memulihkan.
Saya tidak akan menganjurkan pembuangan CSV sebagai solusi cadangan; semua itu akan memberi Anda data mentah. Ada banyak lagi di samping itu, terutama dengan database. Deskripsi tabel, tampilan, procs tersimpan, sebut saja. Jika Anda tidak memiliki ini juga, Anda tidak akan bisa mendapatkannya kembali dengan sukses. Ada juga aplikasi RDBMS dan konfigurasi untuk dipertimbangkan. Anda mungkin memiliki sejumlah besar tambalan, yang juga harus Anda gunakan di lingkungan pemulihan untuk mencapai taraf yang sama. Anda mungkin menjalankan beberapa konfigurasi khusus yang ditentukan oleh persyaratan aplikasi Anda. Anda bahkan mungkin memiliki satu set pengaturan OS tertentu yang diperlukan agar database Anda berjalan secara optimal. Semua ini juga perlu dikembalikan, dan kecuali Anda memiliki solusi cadangan yang mampu melakukannya, penundaan lebih lanjut dalam waktu pemulihan Anda,
Untuk cadangan basis data (dan cadangan secara umum), saya selalu lebih suka menggunakan perangkat lunak cadangan "nyata" yang dapat menangani semua ini.
Baru-baru ini, saya mengelola server MySQL di EC2. Kami menyiapkan snapshot EBS pada pekerjaan cron 15 menit, 3-5 foto disimpan.
Ketika kami melakukan server MySQL 'tradisional', kami membuat cadangan setiap hari melalui MySQl-ZRM. Cadangan pada dasarnya adalah mysqldumps, yang dikirim ke tape, SAN, dll, tergantung pada kebutuhan pelanggan.
Kedua metode dapat dilakukan tanpa menghentikan basis data.
Untuk MySQL saya menggunakan automysqlbackup ( http://sourceforge.net/projects/automysqlbackup/ ), karena perangkat lunak cadangan saya (Backup Exec) tidak mendukung snapshot pada sistem Linux.
Berhasil, tapi saya akan memonitor utas ini untuk saran :)
Kami melakukan backup dua kali sehari dan juga menjalankan backup log setiap 10-15 menit.
Keuntungan dari metode ini adalah Anda dapat memulihkan dari salah satu cadangan dua kali sehari dan kemudian menerapkan file log hingga 15 menit terakhir paling lambat. Dengan cara ini Anda meminimalkan jumlah data yang bisa Anda hilangkan.
Namun, seberapa sering Anda membuat cadangan data terserah Anda. Berapa banyak data yang Anda merasa nyaman untuk hilang? Jika Anda mampu kehilangan data senilai satu hari maka buatlah cadangan sekali sehari. Data tidak pernah berubah? Maka Anda hanya perlu satu salinan!