web-dev-qa-db-ja.com

MySQLでマスターをスレーブに、またはその逆に切り替えるにはどうすればよいですか?

MySQLのインスタンスが2つあり、1つはマスター、もう1つはスレーブです。

ダウンタイムを回避しながら、スレーブをマスターに、またはその逆に切り替えるにはどうすればよいですか?

3
MB.

DBVIPを使用する場合は、マスターからDBVIPを削除して、スレーブで起動することができます。

10.1.2.30のようなDBVIPを作成しましょう。

これをOSのマスターに配置します

ip addr addr 10.1.2.30/24 dev eth1

アプリケーションのIPを10.1.2.30に置き換えます。アプリケーションがしばらく実行を続け、DBVIPがアプリケーションによって使用されていることを確認します。

これは攻撃的なものです:

  1. すべてのApacheサーバーでservice httpd stop
  2. マスターのservice mysql stop
  3. マスターのip addr del 10.1.2.30/24 dev eth1
  4. スレーブ上のip addr add 10.1.2.30/24 dev eth1
  5. すべてのApacheサーバーでservice httpd start
  6. スレーブのSHOW PROCESSLIST;は、着信DB接続があることを確認します

ApacheサーバーからのDB接続が表示される場合、[〜#〜] congratulations [〜#〜]フェイルオーバーを手動で実行しました。

PDATE 2012-09-19 14:28 EDT

DBVIPを使用できない場合は、代わりにさらに作業を行う必要があります

ステップ01)スレーブでバイナリログを有効にする

これをスレーブの/etc/my.cnfに追加します

[mysqld]
log-bin=mysql-bin

STEP02)スレーブ上のservice mysql restart

スレーブでバイナリログを有効にする必要があります

STEP03)マスターとしてスレーブを使用してマスターでCHANGE MASTER TOコマンドを実行します

  • Mysql-bin.000001をMaster_Log_Fileとして使用します
  • 次の番号をMaster_Log_Pos として使用します
    • MySQL 5.5の場合107
    • MySQL 5.1の場合は106
    • MySQL 5.0の98

STEP04)マスターでSTART SLAVE;を実行します

この時点で

  • マスターはスレーブのスレーブです
  • スレーブはマスタースレーブです

この構成は、

  • マスター/マスター
  • 循環レプリケーション

STEP05)すべてのApacheサーバーでのservice httpd stop

STEP06)アプリのIPアドレスを変更してスレーブに接続する

STEP07)すべてのApacheサーバーでservice httpd start

STEP08)スレーブのSHOW PROCESSLIST;は、着信DB接続があることを確認します

ApacheサーバーからのDB接続が表示される場合、[〜#〜] congratulations [〜#〜] MySQLダウンタイムなしで手動でフェイルオーバーを実行しました。唯一のダウンタイムは、STEP05からSTEP07の時間枠によるものです。

5
RolandoMySQLDBA