Cara mengatur replikasi MySQL dengan downtime minimal

12

Pada dasarnya kami memiliki database MySQL yang besar dan kami ingin melakukan replikasi ke slave (master slave setup). Apakah Anda memiliki panduan langkah demi langkah tentang cara melakukan ini dengan MINIMAL downtime pada database? Mencadangkan basis data dan mentransfer cadangan ke server slave (bahkan melalui jaringan pribadi) membutuhkan waktu sekitar 40 menit. Cukup lama downtime.

Patrick
sumber

Jawaban:

15

Saya berasumsi Anda menggunakan InnoDB sebagai mesin penyimpanan. Jika demikian, Anda harus mengaktifkan pencatatan bin . Jika tidak aktif sekarang, Anda harus me-restart MySQL setelah memodifikasi my.cnf. Ini adalah satu-satunya downtime, setelah itu Anda dapat melakukan dump database dengan posisi binlog tanpa memblokir database:

mysqldump --skip-lock-tables --single-transaction --flush-logs --hex-blob --master-data=2 -A

Berdasarkan cadangan ini, pulihkan data pada slave. Setelah ini, Anda dapat mengikuti tutorial replikasi MySQL dan membiarkan budak mengejar / menjalankannya bersama dengan master.

pQd
sumber
apa yang akan terjadi jika beberapa tabel tidak menggunakan innodb? Dan apakah cadangan di atas masih valid jika saya menggunakan --databases untuk membuang sebagian dari basis data alih-alih -A?
mathieu
jika beberapa tabel tidak menggunakan innodb, cadangan mungkin tidak konsisten. lihat di sini: stackoverflow.com/a/7461466/104398 ; cadangan tidak akan berisi database yang dilompati. jika Anda mengatur replikasi berdasarkan cadangan tersebut dan jangan memfilter apa yang direplikasi - replikasi Anda akan rusak segera setelah ada beberapa operasi pada database yang dihilangkan.
pQd
Ok, saya mengonversi tabel myisam saya yang tersisa ke innodb dan memastikan bahwa hanya database yang saya inginkan yang direplikasi / dicadangkan.
mathieu
3

untuk memulai replikasi Anda memerlukan salinan database Anda secara konsisten pada slave

Apakah meja Anda myisam atau innodb didukung? untuk mencari tahu masalah

show table status

dan lihat kolom 'Mesin'

jika semua tabel innodb dari yang Anda bisa lakukan nol pengaturan downtime menggunakan mysqldump --satu transaksi dan mengimpornya ke dalam slave

jika tabel adalah myisam maka harus ada downtime karena Anda harus mengunci tabel untuk ditulis saat sedang disalin. mysqlhotcopy adalah alat untuk membantu Anda dengan itu.

sebagai alternatif, jika Anda menggunakan LVM (manajer volume logis), Anda dapat menghentikan basis data, mengambil snapshot LVM dalam beberapa detik dan memulai db lagi. Kemudian Anda dapat membuat salinan yang konsisten dari foto itu.

Aleksandar Ivanisevic
sumber
1

Untuk mengatur slave, Anda perlu mengambil snapshot data dan merekam posisi log biner. Membuat cadangan basis data seharusnya tidak menyebabkan downtime meskipun akan menyebabkan penurunan kinerja, tetapi Anda sudah membuat cadangan basis data, bukan? Anda mungkin menemukan kebutuhan cadangan untuk mengunci beberapa tabel dan ini dapat menyebabkan penguncian pada aplikasi Anda, benar-benar perlu melihat bagaimana itu diterapkan untuk itu.

Bisakah Anda snapshot disk? Itu akan sangat mengurangi waktu henti jika Anda dapat melakukan hotbackup.

hellomynameisjoel
sumber