2ノードのマスター/マスター複製をセットアップしたい。このレプリケーションの失敗のポイントを知っています。その約1.5TBの巨大なデータベース。ヘビーOLTPが進行中です。しかし、今すぐ実装することが必須です。
2台のサーバーがあります。
1. Master1
2. Master2
最初に私がしたことは、
Master1:
レプリケーション用にmy.cnfを変更します。
--master-data = 2を使用してmysqldumpを取得します(正確なbinlog位置を取得するため)
Master2:
ダンプをMaster2に復元します。
My.cnfに変更を加えます。
レプリケーションをMaster1に設定します(master = 'Master1'を変更します)。
スレーブを起動します。
これで、Master1がMaster2に複製されています。
次に、Master2 to Master1
を複製する必要があります。 binlogの位置を取り、Master1に複製を設定するだけで機能しますが、問題はbinogファイルであり、位置が頻繁に変更されます。したがって、Master1でChange masterコマンドを実行する前に、binogが変更されます。
ダウンタイムなしでこれを達成するにはどうすればよいですか。
Mysqldump 1.5TBデータベースを作成できてうれしいです。あなたは確かに忍耐強い。
現実のチェックのために。再起動と一時停止のためにダウンタイムが発生します。
Mysqldumpはもう必要ありません。
この行を/etc/my.cnf
にMaster1とMaster2の両方で配置しましたか?
log-slave-updates
わからない場合は、Master1とMasterの両方でこれを実行します
select @@global.log_slave_updates;
Master1とMaster2の両方でこれを取得した場合
mysql> select @@global.log_slave_updates;
+----------------------------+
| @@global.log_slave_updates |
+----------------------------+
| 1 |
+----------------------------+
1 row in set (0.00 sec)
次にSTEP 02
に移動します。
これは、Master1とMaster2の両方の/etc/my.cnf
にある必要があります。
追加していない場合は、追加して、Master1とMaster2の両方でmysqldを再起動してください。
Master2でバイナリログを有効にしましたか?
このように、Master1の/etc/my.cnf
に行が必要です
log-bin = ....
Master2が持っていることを確認してください。
あるかどうか不明な場合は、Master2でMySQLにログインして実行します。
mysql> show binary logs;
反響する場合
mysql> show binary logs;
ERROR 1381 (HY000): You are not using binary logging
次に、そのlog-bin
行をMaster2の/etc/my.cnf
に追加し、Master2でmysqlを再起動します。
log-slave-updates と log-bin がMaster1とMaster2の両方で有効になると、反対方向にレプリケーションをセットアップする準備が整います。
Master2
STOP SLAVE;
FLUSH TABLES;
FLUSH LOGS;
SHOW BINARY LOGS;
Master1上
CHANGE MASTER TO
MASTER_Host='IP or Hostname of Master2',
MASTER_PORT=3306,
MASTER_USER='...',
MASTER_PASSWORD='...',
MASTER_LOG_FILE='First Binary Log On Master2',
MASTER_LOG_POS=4
;
SHOW SLAVE STATUS\G
Master1からMaster2への接続をテストする
Master1上
START SLAVE IO_THREAD;
DO SLEEP(10);
SHOW SLAVE STATUS\G
Slave_IO_Running
を探します。 「はい」である必要があります。
SHOW SLAVE STATUS\G
を3〜5回実行します。 Relay_Log_Space
は増加しているはずです。
リレーログからSQLの処理を開始する
これをMaster1で実行します
START SLAVE SQL_THREAD;
DO SLEEP(10);
SHOW SLAVE STATUS\G
Slave_SQL_Running
を探します。 「はい」である必要があります。
Seconds_Behind_Master
を探します。 0より大きい必要があります。0より大きい場合は、SHOW SLAVE STATUS\G
が0になるまでSeconds_Behind_Master
を実行し続けます。
まだコメントできないので、新しい答えを書く必要があります。 @RolandoMySQLDBAの6つのステップに、CHANGE MASTER TO
コマンドが機能しなかったことを追加したいと思います。 STEP 03の最後のコマンドとして、実行する必要があります
SHOW MASTER STATUS;
の代わりに
SHOW BINARY LOGS;
そして、STEP 04のMASTER_LOG_FILE
コマンドで、それぞれの出力をMASTER_LOG_POS
およびCHANGE MASTER TO
として使用します。