Cara optimal untuk membuat cadangan MySQL untuk database yang cukup besar (MyISAM / InnoDB)


8

Saat ini kami memiliki satu database MySQL gemuk yang menjalankan beberapa lalu lintas tinggi situs web berbasis Django serta beberapa situs web e-commerce ukuran yang layak. Sebagai hasilnya, kami memiliki cukup banyak database besar menggunakan tabel InnoDB dan MyISAM.

Sayangnya kami baru saja menabrak tembok karena jumlah lalu lintas jadi saya sudah menyiapkan server master lain untuk membantu meringankan pembacaan / cadangan.

Sekarang saat ini saya hanya menggunakan mysqldump dengan beberapa argumen dan terbukti baik-baik saja .. sampai sekarang. Jelas mysqldump adalah metode cepat yang lambat namun saya percaya kami telah melampaui penggunaannya. Saya sekarang membutuhkan alternatif yang baik dan telah mencari ke dalam memanfaatkan utilitas Maatkits mk-parallel-dump atau solusi snapshot LVM.

Versi singkat singkat:

  • Saya memiliki database MySQL yang cukup besar yang harus saya backup
  • Metode saat ini menggunakan mysqldump tidak efisien dan lambat (menyebabkan masalah)
  • Melihat ke sesuatu seperti snapshot mk-parallel-dump atau LVM

Setiap rekomendasi atau ide akan dihargai - karena saya harus melakukan kembali bagaimana kami melakukan hal-hal yang saya lakukan dengan benar / paling efisien :).

Jawaban:


5

Saya sudah sukses dengan replikasi MySQL dan tarbal malam. Untuk db yang lebih kecil, database mysql, dan skema saya menggunakan kombinasi skrip yang dirancang untuk menggunakan mysqlhotcopy dan mysqldump.

Cadangan panas InnoDB adalah produk komersial yang hebat, tetapi saya tidak yakin bagaimana menangani tabel campuran dalam database yang sama. Rekomendasi pQd untuk XtraBackup mungkin baik untuk dibandingkan dengan ini.

Yang lain menyukai snapshot LVM dan saya akan mengatakan itu pasti sesuatu yang perlu dipertimbangkan. Pada akhirnya, kombinasi solusi mungkin akan menjadi yang terbaik.

Perlu dicatat bahwa ini adalah topik lama. Antara buku MySQL Kinerja Tinggi , manual MySQL , dan pertanyaan ServerFault sebelumnya - ini telah habis secara umum. Lihat:


+1; dengan myisam Anda tidak pernah tahu apakah Anda memiliki cadangan yang konsisten secara logis [diambil oleh lvm / mysqldump / dari lave] atau tidak. mungkin jika aplikasi Anda berubah hanya selama jam kerja - Anda dapat dengan aman membuangnya di malam hari, jika tidak - Anda tidak pernah yakin dan tidak ada metode yang akan membantu.
pQd

Saya pikir Anda benar tentang solusi campuran. Seperti disebutkan di bawah balasan pQd, saya kemungkinan akan mengambil snapshot LVM dan melihat ke utilitas xtrabackup (mengatakan itu dapat menangani tabel campuran). Saya melihat ke dalam cadangan panas InnoDB namun saya selalu satu untuk proyek open source. Terima kasih atas rujukannya, saya melihat ke dalam 2 dari tetapi balasannya cukup umum / tidak membahas masalah yang saya alami / mereka merujuk ke database yang lebih "normal" dan "biasa".
WinkyWolly

4

xtrabackup - setidaknya untuk innodb.


Menarik namun saya ingin solusi yang lebih anggun untuk tidak khawatir tentang campuran tabel InnoDB / MyISAM saya.
WinkyWolly

xtrabackup hadir dengan skrip yang dapat membantu Anda mengambil cadangan myisams juga, tetapi periksa komentar saya di bawah Warner's post
pQd

Terima kasih, sepertinya saya mungkin pergi ke arah ini dan mencampur snapshot LVM untuk ukuran yang baik. Itu menyatakan ia dapat "menangani" tabel MyISAM juga melalui skrip "innobackupex". Saya kira saya akan berputar dan melihat apa yang terjadi.
WinkyWolly

3

Cara paling umum untuk mengatasi masalah ini adalah dengan mengatur server MySQL lain, yang bahkan dapat berada di mesin yang sama, dan menjalankan replikasi master / slave. Anda kemudian dapat melakukan backup pada slave, tanpa dampak pada master.


0

Pada EC2 EBS, saya sekarang menggunakan xfs_freeze. Saya sedang mencari kemungkinan beralih ke xtrabackup di beberapa titik, tetapi ketika saya mencobanya pertama kali, sangat lapar CPU.


Sayangnya saya hanya menggunakan XFS di server media sekarang jadi itu bukan pilihan. Pengalaman macam apa (selain dari lapar CPU, mungkin lebih detail?) Yang Anda miliki dengan xtrabackup? Apakah Anda mencadangkan tabel InnoDB murni atau campuran?
WinkyWolly

Keraguan terbesar saya adalah mengunyah CPU selama sekitar 30 menit setelah selesai (membackup data DB sekitar 35GB), menjadikan server DB hanya berfungsi secara marginal - tentu saja bukan sesuatu yang mungkin saya jalankan di master produksi . Sebenarnya saya sudah mengonversi beberapa tabel MyISAM yang tersisa ke InnoDB sebagian untuk keperluan ini. Saya pikir mungkin OK untuk berjalan pada seorang budak selama itu tidak menyebabkan replikasi jatuh jauh di belakang.
user5336

0

Jika Anda menjalankan replikasi database yang dibagikan di seluruh aplikasi, sepertinya ada pertanyaan yang jelas apakah Anda dapat meningkatkan kinerja banyak hal, termasuk cadangan, dengan mendedikasikan server database ke aplikasi. Berbagi itu bagus, sampai tidak.


0

Jika Anda menyimpan tabel MyISAM Anda hanya untuk alasan lawas (Anda tidak perlu repot mengubahnya), inilah yang saya gunakan untuk memperbaikinya dengan mudah:

    mysql -u root --password=<password> --database=db_name -B -N -e "SHOW TABLES" | awk '!/not_this_db/ && !/or_this_one/ && /^[a-z]/ {print "ALTER TABLE", $1, "ENGINE=INNODB;"}' | mysql -u root --password=<password> --database=db_name

Anda dapat mengecualikan dan memasukkan basis data dengan awk regex seperti hanya dbs yang dimulai dengan huruf kecil dalam contoh saya di atas. Ini tentu saja akan mengunci tabel selama perubahan.

Kemudian gunakan xtrabackup untuk menyalin seluruh database langsung ke server lain tanpa mengunci tabel atau menggunakan terlalu banyak disk IO (setelah mengatur kunci ssh rsa):

innobackupex --throttle=500 --compress --stream=xbstream /doesntneedtoexist | ssh user@otherhost "xbstream -x -C /root/backup/"

dan kemudian Anda dapat melakukan langkah log berlaku sepenuhnya terpisah dan menghemat ruang disk, IO, dan CPU di server produksi.

Percona's HowTO untuk menggunakan xtrabackup

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.