mysql master-slave復(fù)制是在主服務(wù)器完成更改后立即設(shè)置從服務(wù)器進(jìn)行更新。但是如果在從屬服務(wù)器上進(jìn)行了任何更改,它將不會更新master。本篇文章將介紹在mysql服務(wù)器之間設(shè)置master-master復(fù)制。
在此設(shè)置中,如果在任一服務(wù)器上進(jìn)行的任何更改將都在另一臺服務(wù)器上更新。
設(shè)置細(xì)節(jié):
Master-1:?192.168.1.15 Master-2:?192.168.1.16 Database:?mydb
步驟1:設(shè)置MySQL Master-1服務(wù)器
編輯MySQL配置文件并在[mysqld]部分下添加以下代碼。
#?vim?/etc/my.cnf
[mysqld] log-bin=mysql-bin binlog-do-db=mydb server-id=1
重啟MySQL服務(wù)器以使更改生效。
#?service?mysqld?restart
在Master-1服務(wù)器上創(chuàng)建一個具有REPLICATION SLAVE權(quán)限的mysql帳戶,復(fù)制客戶端將連接到master。
mysql>?GRANT?REPLICATION?SLAVE?ON?*.*?TO?'repl_user'@'%'?IDENTIFIED?BY?'secretpassword'; mysql>?FLUSH?PRIVILEGES;
所有表上都有block write語句,因此備份后不能進(jìn)行任何更改。
mysql>?use?mydb; mysql>?FLUSH?TABLES?WITH?READ?LOCK;
使用以下命令檢查當(dāng)前二進(jìn)制日志文件名(File)和當(dāng)前偏移量(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)
上面的輸出顯示當(dāng)前的二進(jìn)制文件使用的是mysql-bin.000003,偏移值為332。記下這些值,以便在下一步中在master-2服務(wù)器上使用。
備份數(shù)據(jù)庫并將其復(fù)制到另一個mysql服務(wù)器。
#?mysqldump?-u?root?-p?mydb?>?mydb.sql #?scp?mydb.sql?192.168.1.16:/opt/
完成備份后,從表中刪除READ LOCK,以便進(jìn)行更改。
mysql>?UNLOCK?TABLES;
步驟2:設(shè)置MySQL Master-2服務(wù)器
編輯mysql Master-2配置文件并在[mysqld]部分下添加以下值。
#vim?/etc/my.cnf [mysqld]? log-bin?=?mysql-bin? binlog-do-db?=?mydb? server-id?=?1
server-id始終為非零數(shù)值。這些值永遠(yuǎn)不會與其他主服務(wù)器或從服務(wù)器相似。
重啟MySQL服務(wù)器,如果已配置復(fù)制,請在啟動時使用-skip-slave-start,不要立即連接到主服務(wù)器。
#service?mysqld?restart
恢復(fù)從主服務(wù)器獲取的數(shù)據(jù)庫備份。
#mysql?-u?root?-p?mydb?/mydb.sql
在Master-1服務(wù)器上創(chuàng)建一個具有REPLICATION SLAVE權(quán)限的mysql帳戶,復(fù)制客戶端將連接到master。
mysql>?GRANT?REPLICATION?SLAVE?ON?*.*''repl_user'@'%'IDENTIFIED?BY'secretpassword';? mysql>?FLUSH?PRIVILEGES;
使用以下命令檢查當(dāng)前二進(jìn)制日志文件名(File)和當(dāng)前偏移量(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)
上面的輸出顯示當(dāng)前二進(jìn)制文件使用mysql-bin.000001,偏移值為847。記下這些值以在步驟3中使用。
使用以下命令在從屬服務(wù)器上設(shè)置選項值。
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服務(wù)器并執(zhí)行以下命令。
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:在兩臺服務(wù)器上啟動SLAVE
在兩臺服務(wù)器上執(zhí)行以下命令以啟動復(fù)制從屬進(jìn)程。
mysql>?SLAVE?START;
MySQL Master-Master Replication已在您的系統(tǒng)和工作模式下成功配置。要測試復(fù)制是否正常,請在任一服務(wù)器上進(jìn)行更改,并檢查更改是否反映在其他服務(wù)器上。