web-dev-qa-db-ja.com

方法::マスターマスターレプリケーション

2つのサーバーにマスターマスターレプリケーションをセットアップしました。さて、私の質問は、2番目のマスターを読み取り専用にする必要がある場合、どうすればよいですか?やってみた

_mysql> flush tables with read lock;_ Query OK, 0 rows affected (0.00 sec)

_mysql> set global read_only=ON;_ Query OK, 0 rows affected (0.00 sec)

しかし、これにより、2番目のマスター(スレーブ1)に読み取りロックが作成されます。マスター1で行った変更がマスター2に反映されません(読み取り専用)。

マスター1の変更がマスター2に更新されますが、マスター2は書き込みモードではないはずです、マスター-マスター(アクティブ/パッシブ)。これは可能ですか?

Regds

2
tesla747

1最初のマスターのスレーブを停止します

mysql> STOP SLAVE;

2番目のマスターが読み取り専用になると、最初のマスターは複製されなくなります。

2 2番目のマスターの設定を読み取り専用に変更します。

mysql> SET GLOBAL READ_ONLY=1;

次の再起動のためにmy.cnfにread_only = 1を追加します

読み取り専用変数

3 2番目のマスターのテーブルのロックを解除します

UNLOCK TABLES;

2番目のマスター(現在はスレーブ)のテーブルをロックする必要はありません。

4安全な権限

2番目のマスターの権限を再定義し、ここでこの回答に従います。 MySQLレプリケーションスレーブを読み取り専用に設定する必要がありますか?

5 2番目のマスター(現在はスレーブ)でスレーブのステータスを確認します。

mysql> show slave status \G;
Slave_IO_State: Waiting for master to send event
Master_Host: 10.11.128.52

2番目のマスターが複製していない場合は、最初のマスターへの複製を再初期化する必要があります。

A.最初のマスターで、現在のログと位置を特定します

SHOW MASTER STATUS;

+------------------+----------+--------------------------+------------------+
| File             | Position | Binlog_Do_DB             | Binlog_Ignore_DB |
+------------------+----------+--------------------------+------------------+
| mysql-bin.000001 |      107 | base1, base2             |                  |
+------------------+----------+--------------------------+------------------+
1 row in set (0.00 sec)

B. 2番目のマスターがスレーブになり、レプリケーションを再初期化する

Stop SLAVE ;
CHANGE MASTER TO MASTER_Host = '10.11.128.52', 
MASTER_USER = 'repli', MASTER_PASSWORD = 'repli', 
MASTER_LOG_FILE = 'mysql-bin.000001', MASTER_LOG_POS = 107;
Start SLAVE;

C. 2番目のマスター(現在はスレーブ)のステータスを表示する

mysql> show slave status \G;
Slave_IO_State: Waiting for master to send event
Master_Host: 10.11.128.52
1
Craig Efrein