Pencadangan logis yang konsisten dari basis data yang menggunakan mesin MyISAM dan InnoDB

8

Saya punya pertanyaan tentang cadangan logis dari database MySQL yang menggunakan MyISAM dan InnoDB.

The mysqldumputilitas mendukung dua pilihan ini:

  • --single-transaction - Membuat snapshot yang konsisten dengan membuang semua tabel dalam satu transaksi. Bekerja HANYA untuk tabel yang disimpan dalam mesin penyimpanan yang mendukung multiversioning (saat ini hanya InnoDB tidak) [...] Opsi secara otomatis mematikan --lock-tables.

  • -x, --lock-all-tables - Mengunci semua tabel di semua basis data. Ini dicapai dengan mengambil kunci baca global selama durasi dump keseluruhan. Secara otomatis mematikan --satu transaksi dan --Lock-tables off.

    • Untuk InnoDB, kita perlu --single-transaction

    • untuk MyISAM, kita perlu - mengunci-tabel atau mengunci-semua-tabel (jika kita membutuhkan konsistensi lintas-basis data).

Jadi, bagaimana database hybrid (database yang menggunakan mesin MyISAM dan InnoDB) seharusnya didukung?

Edit:

Sekedar klarifikasi, pertanyaannya bisa dirumuskan ulang seperti ini:

Apakah opsi tabel penguncian [semua-] menjamin cadangan yang konsisten dari tabel InnoDB?

Dimitre Radoulov
sumber

Jawaban:

8

Dengan mysqldump Anda hanya dapat menggunakan dengan aman --single-transactionjika semua tabel Anda adalah InnoDB, jika tidak, cadangan Anda tidak konsisten.

Jika Anda memiliki persyaratan untuk cadangan hibrida, maka Anda memerlukan lock-tablessemua tabel di cadangan (default), yang akan aman untuk semua mesin. Perlu juga disebutkan bahwa opsi default akan memastikan cadangan Anda aman, Anda tidak perlu mengaktifkan tanda khusus apa pun.

Catatan: Jika Anda memiliki campuran hybrid, mungkin lihat xtrabackup. Ini hanya akan mengunci selama fase MyISAM cadangan.

Morgan Tocker
sumber
Baru saja memposting ini, tetapi Anda mengalahkan saya untuk itu. Tautan yang relevan: percona.com/doc/percona-xtrabackup/innobackupex/…
Derek Downey
Terima kasih telah mengonfirmasi bahwa tabel kunci menjamin cadangan yang konsisten untuk kedua engine. Saat ini saya sedang mencari Manajer Pemulihan Zmanda untuk MySQL (saya akan melihat xtrabackup juga).
Dimitre Radoulov
Zmanda hanyalah manajer GUI untuk semua metode cadangan lainnya - Saya cukup yakin menggunakan xtrabackup didukung.
Morgan Tocker
Hai @Morgan Tocker, Zmanda juga menyediakan satu set skrip (zrm- *) yang sebenarnya menjalankan berbagai jenis cadangan: logis, mentah, dan snapshot. Semua basis data yang kami kelola adalah hibrid, jadi ada sedikit nilai menggunakan produk terpisah - kami tidak dapat menghindari kunci selama pencadangan.
Dimitre Radoulov
Jawaban ini mengatakan bahwa jika seseorang menggunakan mysqldump dan menentukan --lock-all-tablesmaka cadangan akan konsisten, bukan? Dan kita perlu menjalankan mysqldump hanya sekali: itu akan aman untuk InnoDB dan MyISAM pada saat yang sama, kan?
KajMagnus
2

Sebagai ide tambahan untuk situasi Anda, mungkin ada baiknya untuk memikirkan beberapa hal tentang pengaturan pengaturan master slave, di mana cadangan Anda dibuat dari slave.

MySQL db dengan campuran InnoDB dan MyISAM akan selalu (sejauh yang saya tahu di setiap konfigurasi dan dengan setiap alat cadangan) mengunci tabel MyISAM untuk fase cadangan MyISAM.

Untuk menghindari penguncian ini, gunakan pengaturan ini:

  • Server A: mysql Master
  • Server B: mysql Slave (terhubung ke Server A)

Semua menulis dan membaca masuk ke Server A (Master). Server B (Slave) hanya digunakan untuk cadangan. Pada slave, Anda menginstal alat cadangan atau skrip pilihan Anda, mis. Administrator MySQL.

Konfigurasikan cadangan Anda, mis. Setiap hari selama malam hari. Kunci ada di slave, menghasilkan lag sementara slave benar-benar terkunci, tetapi lag ini menyusul segera setelah cadangan selesai dan kunci dibuka.

Raffael Meier
sumber