MySQL Master-Slave複制是在主伺服器完成更改後立即設定從伺服器進行更新。但是如果在從屬伺服器上進行了任何更改,它将不會更新Master。本篇文章将介紹在MySQL伺服器之間設定Master-Master複制。

在此設定中,如果在任一伺服器上進行的任何更改将都在另一台伺服器上更新。
設定細節:Master-1: 192.168.1.15
Master-2: 192.168.1.16
Database: mydb
步驟1:設定MySQL Master-1伺服器
編輯MySQL配置檔案并在[mysqld]部分下添加以下代碼。# vim /etc/my.cnf[mysqld]
log-bin=mysql-bin
binlog-do-db=mydb
server-id=1
重新開機MySQL伺服器以使更改生效。# service mysqld restart
在Master-1伺服器上建立一個具有REPLICATION SLAVE權限的mysql帳戶,複制用戶端将連接配接到master。mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%' IDENTIFIED BY 'secretpassword';
mysql> FLUSH PRIVILEGES;
所有表上都有block write語句,是以備份後不能進行任何更改。mysql> use mydb;
mysql> FLUSH TABLES WITH READ LOCK;
使用以下指令檢查目前二進制日志檔案名(File)和目前偏移量(Position)值。mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 | 332 | mydb | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
上面的輸出顯示目前的二進制檔案使用的是mysql-bin.000003,偏移值為332。記下這些值,以便在下一步中在master-2伺服器上使用。
備份資料庫并将其複制到另一個mysql伺服器。# mysqldump -u root -p mydb > mydb.sql
# scp mydb.sql 192.168.1.16:/opt/
完成備份後,從表中删除READ LOCK,以便進行更改。mysql> UNLOCK TABLES;
步驟2:設定MySQL Master-2伺服器
編輯mysql Master-2配置檔案并在[mysqld]部分下添加以下值。#vim /etc/my.cnf
[mysqld]
log-bin = mysql-bin
binlog-do-db = mydb
server-id = 1
server-id始終為非零數值。這些值永遠不會與其他主伺服器或從伺服器相似。
重新開機MySQL伺服器,如果已配置複制,請在啟動時使用-skip-slave-start,不要立即連接配接到主伺服器。#service mysqld restart
恢複從主伺服器擷取的資料庫備份。#mysql -u root -p mydb
在Master-1伺服器上建立一個具有REPLICATION SLAVE權限的mysql帳戶,複制用戶端将連接配接到master。mysql> GRANT REPLICATION SLAVE ON *.*''repl_user'@'%'IDENTIFIED BY'secretpassword';
mysql> FLUSH PRIVILEGES;
使用以下指令檢查目前二進制日志檔案名(File)和目前偏移量(Position)值。mysql > SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 847 | mydb | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
上面的輸出顯示目前二進制檔案使用mysql-bin.000001,偏移值為847。記下這些值以在步驟3中使用。
使用以下指令在從屬伺服器上設定選項值。mysql> CHANGE MASTER TO MASTER_HOST ='192.168.1.15',
- > MASTER_USER ='repl_user',
- > MASTER_PASSWORD ='secretpassword',
- > MASTER_LOG_FILE ='mysql-bin.000003',
- > MASTER_LOG_POS = 332;
步驟3:完成MySQL Master-1的安裝
登入MySQL Master-1伺服器并執行以下指令。mysql> CHANGE MASTER TO MASTER_HOST ='192.168.1.16',
MASTER_USER ='repl_user',
MASTER_PASSWORD ='secretpassword',
MASTER_LOG_FILE ='mysql-bin.000001',
MASTER_LOG_POS = 847;
步驟4:在兩台伺服器上啟動SLAVE
在兩台伺服器上執行以下指令以啟動複制從屬程序。mysql> SLAVE START;
MySQL Master-Master Replication已在您的系統和工作模式下成功配置。要測試複制是否正常,請在任一伺服器上進行更改,并檢查更改是否反映在其他伺服器上。