mysql主従切替


プライマリ・ライブラリのダウンタイム・ソリューション
バーストイベントが発生したと仮定すると、masterはダウンタイムし、現在のニーズは192.168.1.1.1102をプライマリ・ライブラリに昇格させ、もう1つはスレーブ・ライブラリである.
手順:
1.すべてのrelay logがすべて更新されたことを確認し、各スレーブライブラリでstop slave io_を実行するthread; show processlist;Has read all relay logが表示されるまで、ライブラリからの更新が完了したことを示します.
2.すべてのスレーブライブラリにログインし、masterを表示します.infoファイルは、posより最大を新しいプライマリライブラリとして選択します.ここでは192.168.1.1102を新しいプライマリライブラリとして選択します.
3.192.168.1.1.1102にログインし、stop slaveを実行する.データベースディレクトリに入り、masterを削除します.infoとrelay-log.infoファイル(reset slave allと同様、非スレーブモードで起動).構成my.cnfファイル、log-binを開きます.log-slaves-updatesとread-onlyがある場合はコメントしてreset masterを実行します.同期用のユーザーを作成し、slaveを許可します(以前のマスターライブラリのユーザー&パスワードと一致することが望ましい).
5.別のスレーブライブラリにログインし、stop slaveを実行して同期を停止する.新しいマスターライブラリに接続します.start slave;;slaveが更新を同期しているかどうかを確認&テスト
マスタスレーブを正常に切り替え
1.slave同期状態の確認
切り替えを開始する前に、マスターライブラリをロックします.
flush tables with read lock
(実行完了後、本番環境ではすべての文の実行完了を待つ必要があります)
flush tables with read lockがロックに成功するまで、SELECTを含むすべての文の実行が完了するのを待つ必要があります.したがって、遅いクエリーが実行されているか、開いているトランザクションがあるか、他のプロセスがテーブルロックを持っている場合、flush tables with read lockはすべてのロックが解放されるまでブロックされます.次の例を見てください.
mysql> show processlist;
+----+------+-----------+------+------------+------+-------------------+----------------------------------------------------------------------+
| Id | User | Host      | db   | Command    | Time | State             | Info                                                                 |
+----+------+-----------+------+------------+------+-------------------+----------------------------------------------------------------------+
|  4 | root | localhost | test | Query      |   80 | Sending data      | select count(*) from t t1 join t t2 join t t3 join t t4 where t1.b=0 |
|  5 | root | localhost | test | Query      |   62 | Flushing tables   | flush tables with read lock                                          |
|  6 | root | localhost | test | Field List |   35 | Waiting for table |                                                                      |
|  7 | root | localhost | test | Query      |    0 | NULL              | show processlist                                                     |
+----+------+-----------+------+------------+------+-------------------+----------------------------------------------------------------------+
4 rows in set (0.00 sec)

スイッチが完了したらロックを解除できます
unlock tables
1)masterで実行:show processlist;
Master has sent all binlog to slaveを表示します.waiting for binlog to be updated
2)slaveで実行:show processlist;
Slave has read all relay logを表示します.waiting for the slave I/O thread to update it
mysql> show slave status\G;
IOおよびSQLスレッドが正常かどうかを確認し、NOで同期が一致しないことを示す場合は、slave同期をプライマリ・スレーブ・データと一致させる必要があります.
通常切替マスタ/バースト切替マスタ、メインステップ
3)slave ioスレッドの停止
slaveで実行:
mysql> STOP SLAVE IO_THREAD
mysql> SHOW PROCESSLIST;
ステータスがhas read all relay logであることを確認します.
stop slave io_thread実行は、プライマリ・スレーブ同期のioプロセスを停止し、プライマリ・ライブラリからbinlogログ・ファイルを同期しない.show processlist;すべてのsql文が実行されたかどうかを確認し、同期されたデータがライブラリに更新されていることを確認します.
以上を実行した後、slaveをmasterに昇格させることができます.
4)slaveをmasterにする
Stop slave;
Reset master;
Reset slave all; 5.6.3以降
Reset slave; バージョン5.6.3より前
メモ:reset slave allコマンドは、ライブラリからのreplicationパラメータを削除し、show slave statusGの情報が空に戻ります.(サーバ上のmaster.infoとrelay-log.infoファイルを削除するのと同じように、次回ライブラリを再起動するときに非ライブラリから起動させます)
slaveが読み取り専用モードかどうかを確認する:show variables like'rad_only';
読み取り専用モードはmyを変更する必要があります.cnfファイル、注釈read-only=1、mysqlサービスを再起動します.
または、コマンドを再起動せずに読み取り専用を閉じますが、次回の再起動後に失効します:set global read_only=off;
##ライブラリからのユーザーと承認の作成
grant replication slave on *.* to 'repl'@''192.168.0.104' identified by 'xxxx'
##認証された同期ユーザーとパスワードは、以前のものと一致しています.
show master status;
##プライマリ・ライブラリのbinlogログとposの場所を記録し、他のセカンダリ・ライブラリにプライマリ・セカンダリ使用を確立します.
5)もとのマスターをslaveにする
新しいslaveでbinlogをリセットするには:
Reset master;
change master to master_host='192.168.0.104',##MasterサーバIp
master_port=3306,
master_user='repl',
master_password='xxx',
master_log_file='master-bin.000001',##Masterサーバが生成したログ
master_log_pos=000001; ##前に記録したメインライブラリpos位置
start slave;##slaveの起動
show slave status\G; ##slaveステータスの表示
         
異常切替(ホスト障害またはダウンタイム)
1)salveで実行:
stop slave;
reset master;
読み取り専用モードを確認する:show variables like'read_only';
読み取り専用モードはmyを変更する必要があります.cnfファイル、注釈read-only=1、mysqlサービスを再起動します.
または、コマンドを再起動せずに読み取り専用を閉じますが、次回の再起動後に失効します:set global read_only=off;
表示show slave statusG;
表示show master statusG;
業務応用上、メインライブラリのIPアドレスを修正し、応用接続が正常かどうかをテストする.
##reset masterは主従の構成を直接削除し、シングルライブラリモードで実行します.