Mysql

如何:: 主-主複製

  • August 26, 2015

我已經在兩台伺服器上設置了 Master-Master 複製。現在,我的問題是,如果我需要將第二個 master 設置為只讀,我該怎麼辦?我試著做

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)

但是因為這會在我的第二個主控(從屬設備 1)中創建一個讀鎖。我在 Master 1 中所做的更改不會傳播到 Master 2(只讀)。

我應該怎麼做 - Master 1 中的更改正在更新到 Master 2 但 Master 2 不應該處於寫入模式,Master-master(主動/被動)。是否有可能做到這一點?

系統資料庫

1 停止第一個主站上的從站

mysql> STOP SLAVE;

如果第二個 master 變為只讀,則第一個 master 不應再從它複製。

2 將第二個主設備的配置更改為只讀。

mysql> SET GLOBAL READ_ONLY=1;

將 read_only=1 添加到 my.cnf 以便下次重新啟動

只讀變數

3 解鎖第二個主機上的表

UNLOCK TABLES;

您不需要在第二個主機(現在是從機)上鎖定表

4 安全特權

重新定義第二個主伺服器的權限,請在此處遵循以下答案:MySQL 複製從伺服器是否應設置為只讀?

5 驗證第二個主站上的從站狀態,現在是從站。

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

如果第二個 master 沒有複製,那麼您可能必須重新初始化到第一個 master 的複制。

A. 在第一個 master 上,辨識目前日誌和位置

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. 在第二個 master 現在是 slave,重新初始化複製

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. 在第二個主機上顯示狀態(現在是從機)

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

引用自:https://dba.stackexchange.com/questions/112215