Saya memiliki konfigurasi master -> slave di mana master gagal. Saya bisa mengatur ulang budak lama menjadi master dan master lama menjadi budak dari itu. Baik.
Apa yang sepertinya tidak bisa saya lakukan adalah menghapus informasi master pada budak lama yang sekarang menjadi master baru. Saya melihat:
mysql> show slave status \G
*************************** 1. row ***************************
Slave_IO_State:
Master_Host: 10.1.2.101
Master_User: replicationSlave
Master_Port: 3306
...
Slave_IO_Running: No
Slave_SQL_Running: No
Saya telah membaca banyak dokumentasi MySQL tetapi saya masih belum menemukan cara untuk menghapus informasi slave dari master-baru. Saya sudah mencoba:
RESET SLAVE
yang tampaknya tidak menghapus pengaturan itu. [[Sebenarnya itu menghapusmaster.info
file tetapi tidak pengaturan memori. Lihat di bawah.]]CHANGE MASTER TO MASTER_HOST=''
yang hanya meludahi kesalahan karena sudah usang baru-baru ini.- Memeriksa
my.cnf
yang tidak memiliki informasi master karena mereka ditambahkan secara terprogram. RESET MASTER
karena beberapa dokumen mysql merekomendasikannya. Itu hanya me-reset log bin.- Melihat-lihat dalam tabel MySQL internal untuk melihat apakah saya dapat menemukan bidang untuk menghapus.
Apa cara yang tepat untuk melakukan ini pada MySQL ~ 5.5.9? Terima kasih atas bantuannya.
Edit:
Jadi ternyata RESET SLAVE
menghapus master.info
file seperti tersirat @RolandoMySQLDBA. Namun, Anda masih perlu me-restart server sebelum informasi budak dihapus.
Apakah ada cara untuk menghapus informasi budak ini tanpa harus me-restart mysqld?
sumber
Jawaban:
Di MySQL 5.5.16 dan yang lebih baru, Anda dapat menggunakan
RESET SLAVE ALL
untuk melakukan semua yangRESET SLAVE
dilakukan dan mengatur ulang parameter koneksi dari memori, dengan cara ini tidak memerlukan restart mysqld.sumber
Cara tercepat dan paling kotor untuk menghapus informasi slave dari instance MySQL
skip-slave-start
ke /etc/my.cnf di bawah[mysqld]
service mysql stop
rm -f /var/lib/mysql/master.info /var/lib/mysql/relay-*
service mysql start
skip-slave-start
dari /etc/my.cnfItu harus dilakukan untukmu !!!
Ini akan diperlukan karena menurut Dokumentasi MySQL pada
RESET SLAVE
:Dengan demikian, informasi replikasi masih dalam memori. Restart mysql adalah satu-satunya cara.
sumber
master.info
file apa pun . Apakah itu selalu ada pada "tuan" atau "budak"?RESET SLAVE
diikuti oleh restart tidak menghapus informasi budak sejauh menyangkut phpmyadmin. Anda juga perlu mengaturCHANGE MASTER TO MASTER_HOST=''
.sumber
Saya akan merekomendasikan mempertahankan perintah skip-slave-start dalam file config Anda ('di /etc/my.cnf') di bawah 'mysqld' Anda untuk menghindari pengesampingan data master-slave. Untuk memberi Anda contoh - ketika bekerja di lingkungan cloud, katakanlah master lama crash dan kemudian berhasil restart ketika Anda penyedia Anda memperbaiki masalah apa pun - budak lama (sekarang master baru) akan mereplikasi dari master lama, menimpa data sebelum DBA memiliki kesempatan untuk menyadari hal ini.
BTW, ini juga relevan di lingkungan non-cloud. Jika, katakanlah, admin lain menampilkan master lama tanpa koordinasi. Juga, masalah lain mengapa itu adalah ide yang baik untuk mempertahankan perintah 'lewati-budak-memulai' bahkan jika itu adalah budak - tidak ada replikasi otomatis, yang berarti Anda memiliki kontrol lebih besar untuk mencegah hasil yang tidak terduga. :)
sumber