web-dev-qa-db-ja.com

MySQL-Live Productionでのダウンタイムなしのマスターからマスターへのレプリケーション

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が変更されます。

ダウンタイムなしでこれを達成するにはどうすればよいですか。

4
Bhuvanesh

Mysqldump 1.5TBデータベースを作成できてうれしいです。あなたは確かに忍耐強い。

現実のチェックのために。再起動と一時停止のためにダウンタイムが発生します。

Mysqldumpはもう必要ありません。

ステップ01

この行を/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を再起動してください。

ステップ02

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-updateslog-bin がMaster1とMaster2の両方で有効になると、反対方向にレプリケーションをセットアップする準備が整います。

ステップ03

Master2

STOP SLAVE;
FLUSH TABLES;
FLUSH LOGS;
SHOW BINARY LOGS;

ステップ04

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

ステップ05

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は増加しているはずです。

ステップ06

リレーログから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を実行し続けます。

2
RolandoMySQLDBA

まだコメントできないので、新しい答えを書く必要があります。 @RolandoMySQLDBAの6つのステップに、CHANGE MASTER TOコマンドが機能しなかったことを追加したいと思います。 STEP 03の最後のコマンドとして、実行する必要があります

SHOW MASTER STATUS;

の代わりに

SHOW BINARY LOGS;

そして、STEP 04のMASTER_LOG_FILEコマンドで、それぞれの出力をMASTER_LOG_POSおよびCHANGE MASTER TOとして使用します。

1
dirkaholic