Bagaimana saya bisa membuat cadangan basis data multi-gigabyte di MySQL? Poin bonus untuk pemulihan lebih cepat

11

Saya memiliki database 4GB di MySQL. Bagaimana saya bisa mencadangkannya? Lebih jauh, apakah ada cara agar saya dapat mempercepat proses pemulihan jika saya perlu memulihkan?

Saat ini saya menggunakan pekerjaan cron setiap malam yang memanggil mysqldumpuntuk membuang semuanya dan saya menyimpan 3 hari cadangan.

nicudotro
sumber

Jawaban:

14

Kami memiliki sekitar 90 GB di MySQL, jadi inilah beberapa saran:

  • Anda dapat mencoba panggilan berikut: mysqldump -u USER -pPASS --single-transaction -Q --databases foo bar(Gunakan dokumen untuk memeriksa apakah sakelar itu cocok untuk Anda.)
  • Jika Anda menggunakan tabel-MYISAM saja, maka menyalin database ke drive lain dan tar'ing itu, mungkin juga menjadi alternatif. Ini tidak akan bekerja dengan INNODB, karena ia menyimpan file tambahan. Anda juga harus menguji ini dengan cermat.
  • Aktifkan log biner, dan buat cadangannya. (Ini mungkin favorit saya!)
  • Atur replikasi dan lakukan pencadangan pada salah satu budak Anda, lalu biarkan ia mengejar sisanya. Cukup bagus saat dijalankan, tetapi masalahnya adalah menjalankannya. Replikasi tidak menyenangkan dengan MySQL. :(
  • Apakah sistem file Anda mendukung snapshot? Jika ya, maka itu adalah peluang bagus untuk menggunakannya.
  • Gunakan solusi komersial, seperti Amanda .
Sampai
sumber
10

Cara terbaik adalah tanpa mengganggu operasi normal. Untuk keandalan tinggi, sistem toleran kesalahan, Anda memiliki 2 DB yang disimpan dalam sinkronisasi, dan Anda membuat cadangan sekunder. (misalnya artikel howtoforge ini )

Kalau tidak, baca manual : gunakan myseldump seperti yang Anda lakukan saat ini, atau gunakan skrip mysqlhotcopy (gunakan seperti mysqldump), atau hentikan DB dan cukup salin file frm, MID, MYI (menggunakan rsync).

Saya pikir mekanisme stop + copy file adalah cara tercepat yang akan Anda dapatkan.

gbjbaanb
sumber
3

Jika beberapa database Anda hanya-baca atau dimodifikasi, jarang memilihnya sebagai cron yang lebih jarang.

JJ
sumber
2

Untuk menjawab pertanyaan Anda - opsi extended_insert berfungsi baik untuk saya. Jika Anda memiliki sumber daya yang cukup untuk memulihkan, extended_insert akan memasukkan potongan besar data dalam satu permintaan, membuat pemulihan lebih cepat.


sumber
1

Anda harus benar-benar mempertimbangkan Xtrabackup Percona

Skrip wrapper "innobackupex" dapat menangani MyISAM tetapi untuk cadangan non-penguncian / online tabel Anda semua harus InnoDB.

Bersulang

HTTP500
sumber