MySQLの以前のスレーブをマスターに変更し、スレーブステータス情報を削除する方法は?


10

マスターが失敗したマスター->スレーブ構成があります。私は古いスレーブをマスターに、古いマスターをスレーブにリセットすることができました。いいね。

私ができないように見えるのは、現在新しいマスターになっている古いスレーブのマスター情報を削除することです。そうですか:

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

多くのMySQLドキュメントを読みましたが、スレーブ情報をnew-masterからクリアする方法がまだ見つかりません。私はもう試した:

  1. RESET SLAVEこれらの設定はクリアされないようです。[実際には、master.infoファイルは削除されますが、メモリ設定は削除されません。下記参照。]]
  2. CHANGE MASTER TO MASTER_HOST='' これは最近廃止されたため、エラーが発生しただけです。
  3. my.cnfそれらがプログラムで追加されたため、マスター情報がないものをチェックしています。
  4. RESET MASTER一部のmysqlドキュメントで推奨されているため。これは、binログのみをリセットします。
  5. 内部のMySQLテーブルを調べて、クリアするフィールドが見つかるかどうかを確認します。

MySQL〜5.5.9でこれを行う適切な方法は何ですか?助けてくれてありがとう。


編集:

したがって、@ RolandoMySQLDBAが暗示するようにファイルをRESET SLAVE削除することがmaster.infoわかりました。ただし、スレーブ情報を削除する前に、サーバーを再起動する必要があります。

mysqldを再起動せずにこのスレーブ情報を削除する方法はありますか?


回答:


10

MySQLの5.5.16以降では、使用できるRESET SLAVE ALLことすべてやってRESET SLAVEないの、メモリからそれはmysqldの再起動を必要としないこのように、接続パラメータをリセットします。


6

MySQLインスタンスからスレーブ情報をクリアする最も速くて汚い方法

  • skip-slave-start以下の/etc/my.cnfに追加します[mysqld]
  • service mysql stop
  • rm -f /var/lib/mysql/master.info /var/lib/mysql/relay-*
  • service mysql start
  • skip-slave-start/etc/my.cnfから削除

それでうまくいくはずです!!!

これは、に応じているため必要となる上でMySQLのドキュメントRESET SLAVE

MySQL 5.5では(MySQL 5.1以前の場合とは異なり)、RESET SLAVEは、メモリに保持されているマスターホスト、マスターポート、マスターユーザー、マスターパスワードなどのレプリケーション接続パラメーターを変更しません。つまり、RESET SLAVEの後にCHANGE MASTER TOステートメントを必要とせずにSTART SLAVEを発行できます。

したがって、レプリケーション情報はまだメモリ内にあります。mysqlの再起動が唯一の方法です。


@Rolandoに感謝します。+1見ましたが、試しませんでした。これを修正するためにmysqldを再起動する必要がないようにしてます。
グレー-

また、master.infoファイルが表示されません。それは常に「マスター」または「スレーブ」にありますか?
グレー-

master.infoは常にスレーブサーバー上にあります。
Abdul Manaf 2012

5

RESET SLAVEphpmyadminに関する限り、その後に再起動してもスレーブ情報は消去されません。また、を設定する必要がありますCHANGE MASTER TO MASTER_HOST=''


3

マスタースレーブデータの上書きを回避するために、mysqldの下のconfigファイル(/etc/my.cnf内)でskip-slave-startコマンドを維持することをお勧めします。例として、クラウド環境で作業しているときに、古いマスターがクラッシュし、プロバイダーが問題を修正したときに正常に再起動するとします。古いスレーブ(現在は新しいマスター)は古いマスターから複製し、以前にデータを上書きしますDBAはこれを実現する機会があります。

ところで、これは非クラウド環境にも関係します。たとえば、別の管理者が調整せずに古いマスターを起動したとします。また、スレーブであっても 'skip-slave-start'コマンドを維持することをお勧めする別の問題–自動レプリケーションがないため、予期しない結果を防ぐための制御が強化されます。:)


回答@Lenaをありがとう。良い考えです。調べてみます。
グレー-SOは悪を止める
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.