Bagaimana mengubah budak MySQL sebelumnya menjadi master dan menghapus informasi status budak?


10

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:

  1. RESET SLAVEyang tampaknya tidak menghapus pengaturan itu. [[Sebenarnya itu menghapus master.infofile tetapi tidak pengaturan memori. Lihat di bawah.]]
  2. CHANGE MASTER TO MASTER_HOST='' yang hanya meludahi kesalahan karena sudah usang baru-baru ini.
  3. Memeriksa my.cnfyang tidak memiliki informasi master karena mereka ditambahkan secara terprogram.
  4. RESET MASTERkarena beberapa dokumen mysql merekomendasikannya. Itu hanya me-reset log bin.
  5. 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 SLAVEmenghapus master.infofile 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?


Jawaban:


10

Di MySQL 5.5.16 dan yang lebih baru, Anda dapat menggunakan RESET SLAVE ALLuntuk melakukan semua yang RESET SLAVEdilakukan dan mengatur ulang parameter koneksi dari memori, dengan cara ini tidak memerlukan restart mysqld.


6

Cara tercepat dan paling kotor untuk menghapus informasi slave dari instance MySQL

  • Tambahkan skip-slave-startke /etc/my.cnf di bawah[mysqld]
  • service mysql stop
  • rm -f /var/lib/mysql/master.info /var/lib/mysql/relay-*
  • service mysql start
  • Hapus skip-slave-startdari /etc/my.cnf

Itu harus dilakukan untukmu !!!

Ini akan diperlukan karena menurut Dokumentasi MySQL padaRESET SLAVE :

Di MySQL 5.5 (tidak seperti case di MySQL 5.1 dan yang lebih lama), RESET SLAVE tidak mengubah parameter koneksi replikasi seperti master host, master port, master user, atau master password, yang disimpan dalam memori. Ini berarti bahwa MULAI PERLENGKAPAN dapat diterbitkan tanpa memerlukan pernyataan MENGUBAH MASTER KE RESET berikut.

Dengan demikian, informasi replikasi masih dalam memori. Restart mysql adalah satu-satunya cara.


Terima kasih @Rando. +1 Saya melihat itu tetapi tidak mencobanya. Saya mencoba untuk tidak harus me-restart mysqld untuk memperbaikinya.
Gray - BEGITU berhenti menjadi jahat

Juga, saya tidak melihat master.infofile apa pun . Apakah itu selalu ada pada "tuan" atau "budak"?
Gray - BEGITU berhenti menjadi jahat

master.info selalu ada di Slave Server.
Abdul Manaf

5

RESET SLAVEdiikuti oleh restart tidak menghapus informasi budak sejauh menyangkut phpmyadmin. Anda juga perlu mengatur CHANGE MASTER TO MASTER_HOST=''.


3

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. :)


Terima kasih atas jawaban @Lena. Itu ide yang bagus. Saya akan memeriksanya.
Gray - SO berhenti menjadi jahat
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.