Masalah
Saya memiliki pengaturan replikasi MySQL antara 2 server, master ( A ) dan slave ( B ). Saya perlu menambahkan budak baru ke dalam campuran ( C ). Saya ingin budak ini mendapatkan pembaruan langsung dari master, saya tidak ingin replikasi berantai dari budak. Namun, masternya "panas", saya biasanya menggunakan Xtrabackup untuk membuat cadangan lengkap master, tetapi ini akan menguncinya selama 10 menit, karena database berukuran sekitar 20GB.
Kemungkinan Solusi
FLUSH TABLES DENGAN READ LOCK pada slave B , gunakan SHOW SLAVE STATUS pada B , tuliskan binlog dan posisikan. Kemudian backup database dengan Xtrabackup, kirimkan backup ke C dan gunakan untuk membuat slave, dan atur replikasi ke titik A dengan posisi binlog yang baru saja saya tulis.
Pertanyaan
Apakah ada cara yang lebih baik yang tidak mengharuskan saya mengunci B begitu lama? Atau sesuatu yang lebih mudah diotomatisasi?
sumber
start slave
(SlaveC) saya mendapatkan "Gagal membuka log relay '/var/log/mysql/mysql-relay-bin.001603"Ketika kami menambahkan budak ke dalam campuran kami, kami melakukan hal berikut:
sumber
Saya melakukan apa yang disarankan @RolandoMySQLDBA tetapi juga menambahkan langkah 6 ' dan 8' (ini memecahkan apa yang komentar @Hussain Tamboli .):
Langkah 1) Menyiapkan Server Baru (ServerC)
Langkah 2) Di ServerC, Instal MySQL (versi yang sama dengan ServerB)
Langkah 3) Pada ServerC, layanan berhenti mysql
Langkah 4) Salin /etc/my.cnf dari ServerB ke ServerC
Langkah 5) Pada ServerC, ubah server_id ke nilai yang berbeda dari ServerA dan ServerB
Langkah 6) rsync / var / lib / mysql di ServerB ke ServerC
Langkah 6 ') rsync / var / log / mysql di ServerB ke ServerC
Langkah 7) Ketika rsync selesai, jalankan "STOP SLAVE;" di ServerB
Langkah 8) rsync / var / lib / mysql di ServerB ke ServerC
Langkah 8 ') rsync / var / log / mysql di ServerB ke ServerC
Langkah 9) Di ServerB, jalankan "START SLAVE;"
Langkah 10) Pada ServerC, layanan mysql mulai
Langkah 11) Pada ServerC, jalankan "START SLAVE;" (Lakukan ini jika skip-slave-start ada di /etc/my.cnf)
sumber
Anda memiliki opsi "LOAD DATA FROM MASTER" tetapi itu sangat tidak disarankan.
Apakah Anda mengambil backup malam / mingguan pada sistem Anda? Jika demikian, perhatikan juga posisi dengan cadangan Anda maka Anda dapat menggunakan cadangan itu untuk menyiapkan budak baru. Biarkan saja dan biarkan up to date untuk beberapa waktu.
sumber
Saya mencoba jawaban Rolando dan bekerja dengan baik, tetapi mulai diputar ulang dari awal dan saya harus menambahkan lebih banyak kode kesalahan untuk dilewati (saya tahu itu tidak disarankan, tetapi saya tahu apa yang saya lakukan).
Setelah selesai dengan langkah 7, saya telah memeriksa log mysql dan mencatat nama dan posisi bin log dan melanjutkan hingga langkah ke-9. Sebelum langkah ke 10, saya baru dieksekusi
change master
untuk file log dan posisi log. Dan dilanjutkan dari langkah 11. Semua terlihat baik bagi saya.sumber
Anda perlu mengubah slave uuid di auto.cnf sehingga master dapat membedakan dua slave.
sumber