摘要:復(fù)制原理:Mysql中有一種日志叫做bin日志(二進制日志)。這個日志會記錄下所有修改了數(shù)據(jù)庫的SQL語句(INSERT,UPDATE,DELETE,ALTER TABLE,GRANT等等)。主從復(fù)制...
復(fù)制原理:
Mysql中有一種日志叫做bin日志(二進制日志)。這個日志會記錄下所有修改了數(shù)據(jù)庫的SQL語句(INSERT,UPDATE,DELETE,ALTER TABLE,GRANT等等)。
主從復(fù)制的原理其實就是
主服務(wù)器將改變記錄到二進制日志(binlog)中,從服務(wù)器將主服務(wù)器的binlog拷貝到它的中繼日志(relaylog),然后重做中繼日志中的事件,在本服務(wù)器上執(zhí)行一遍,這樣從服務(wù)器上的數(shù)據(jù)就和主服務(wù)器上的數(shù)據(jù)相同了。
環(huán)境說明:
兩臺服務(wù)器,192.168.1.1(當(dāng)做master),192.168.1.2(當(dāng)做slave)
一、配置二進制日志文件:
在master服務(wù)器上:
1:編輯主節(jié)點配置文件
vim /etc/my.cnf
2.啟用二進制日志文件,添加以下配置
server-id = 1 log-bin = mysql-bin binlog-format = mixed
server-id = 1 //給服務(wù)器起一個獨特的ID
log-bin = mysql-bin //聲明 二進制日志文件為 mysql-bin.XXXX
binlog-format = mixed //設(shè)置二進制復(fù)制模式,可選值有(mixed/statement/row)
在slave服務(wù)器上:
1:編輯主節(jié)點配置文件
vim /etc/my.cnf
2.啟用二進制日志文件,添加以下配置
server-id = 2 log-bin = mysql-bin binlog-format = mixed relay-log = relay-log
server-id = 2 //給服務(wù)器起一個獨特的ID
log-bin = mysql-bin //聲明 二進制日志文件為 mysql-bin.XXXX
binlog-format = mixed //設(shè)置二進制復(fù)制模式,可選值有(mixed/statement/row)
relay-log = relay-log //聲明 relay-log日志文件為 relay-log.XXXX
3重啟mysql:
service mysqld start
二、建立主從連接
1、在master的數(shù)據(jù)庫中建立一個備份帳戶:每個slave使用標(biāo)準(zhǔn)的MySQL用戶名和密碼連接master。進行復(fù)制操作的用戶會授予REPLICATION SLAVE權(quán)限。用戶名的密碼都會存儲在文本文件master.info中,命令如下:
GRANT REPLICATION SLAVE,RELOAD,SUPER ON *.* TO backup@'192.168.1.2' IDENTIFIED BY '1234';
說明:建立一個帳戶backup,并且只能允許從192.168.1.2這個地址上來登陸,密碼是1234。
主服務(wù)器配置完成.
注意:確保主服務(wù)器的iptables沒有阻斷3306的訪問端口。
2.在slave服務(wù)器上執(zhí)行以下命令,連接master服務(wù)器:
CHANGE MASTER TO MASTER_HOST='192.168.1.1', MASTER_USER='backup',MASTER_PASSWORD='1234',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=4;
說明:MASTER_LOG_FILE是指定讀取主服務(wù)器的哪個binlog日志文件,MASTER_LOG_POS是指定從該日志的哪個位置開始讀,這兩個選項要從master服務(wù)器上運行命令:SHOW MASTER STATUS; 查看
查看slave的設(shè)置是否正確:
SHOW SLAVE STATUS
Slave_IO_State: Master_Host: server1 Master_User: repl Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000001 Read_Master_Log_Pos: 4 Relay_Log_File: mysql-relay-bin.000001 Relay_Log_Pos: 4 Relay_Master_Log_File: mysql-bin.000001 Slave_IO_Running: No Slave_SQL_Running: No ...omitted... Seconds_Behind_Master: NULL
Slave_IO_State, Slave_IO_Running, 和Slave_SQL_Running是No,表明slave還沒有開始復(fù)制過程。
在slave上啟動復(fù)制線程 :
START SLAVE;
可以運行 SHOW SLAVE STATUS 查看輸出結(jié)果:
Slave_IO_State: Waiting for master to send event Master_Host: server1 Master_User: repl Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000001 Read_Master_Log_Pos: 164 Relay_Log_File: mysql-relay-bin.000001 Relay_Log_Pos: 164 Relay_Master_Log_File: mysql-bin.000001 Slave_IO_Running: Yes Slave_SQL_Running: Yes ...omitted... Seconds_Behind_Master: 0
當(dāng)看到Slave_IO_Running: YES、Slave_SQL_Running: YES才表明狀態(tài)正常。
至此,mysql的主從復(fù)制配置完成。
3.實際測試
登錄192.168.1.1主MySQL,添加一張數(shù)據(jù)表,并添加數(shù)據(jù),然后登陸192.168.1.2從MySQL,發(fā)現(xiàn)剛才新建的表和數(shù)據(jù)都出現(xiàn)了,主從復(fù)制的配置就是如此的簡單。
網(wǎng)友評論:
2018-10-30 16:10:23 回復(fù)