1.建立專門用於Replication的賬戶
首先Replication操作會涉及到的兩個重要許可權,這裡先做一下說明:
The REPLICATION CLIENT privilege enables the use of SHOW MASTER STATUS and SHOW SLAVE STATUS.
REPLICATION CLIENT 使得使用者可以使用SHOW MASTER STATUS和SHOW SLAVE STATUS命令,也就是說這個許可權是用於授予賬戶監視Replication狀況的權力。
The REPLICATION SLAVE privilege should be granted to accounts that are used by slave servers to connect to the current server as their master. Without this privilege, the slave cannot request updates that have been made to databases on the master server.
REPLICATION SLAVE則是一個必須而基本的許可權,它直接授予slave伺服器以該賬戶串連master後可以執行replicate操作的權利。
一般來說,我們會單獨在主伺服器建立一個專門用於Replication的賬戶。這個賬戶必須具有REPLICATION SLAVE許可權,除此之外沒有必要添加不必要的許可權,保證該使用者的職責單一。假定我們要建立的這個賬戶為repl,密碼為repl,那麼這一操作的命令如下:
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.0.%' IDENTIFIED BY 'repl';
其中要特別說明一下192.168.0.%,這個配置是指明repl使用者所在伺服器,這裡%是萬用字元,表示192.168.0.0-192.168.0.255的Server都可以以repl使用者登陸主伺服器。如果沒有使用萬用字元,而訪問的伺服器又不在上述配製裡,那麼你將無法使用該賬戶從你的伺服器replicate主伺服器.
另外在《Hight Performance MySql》一書中對使用者權限的設定有所不同,作者建議在主機和從機上都配置repl賬戶,並同時賦予REPLICATION SLAVE和REPLICATION CLIENT許可權,命令如下:
mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO repl@'192.168.0.%' IDENTIFIED BY 'repl';
作者解釋了這樣做的好處:一方面使用同一賬戶對Replication進行監視管理會很方便,不必區分slave,master,另一方面,repl賬戶在slave和master上的配製是一樣的,這樣如果我們切換slave和master,賬戶不需要做任何改動。
2.配置主從伺服器
主從伺服器的配置都是通過改寫my.cnf/my.ini檔案來完成的。
下面是主從伺服器的必須的配置項:
主機必須的配置項:
log-bin //自訂,比如 log-bin=mysql-bin
server_id //為server起一個唯一的id,預設是1,推薦使用IP的最後一節。
從機必須的配置項:
server_id //為server起一個唯一的id,預設是1,推薦使用IP的最後一節.
注意:一般,我們也會為從機設定log-bin,這是因為預設的log-bin檔案是根據主機名稱命名的,一旦機器更改主機名稱就會出問題,再者保持主從機的配製一致也方便做主從機切換!
主機可選的配置項:(用於配置主機哪些庫會做二進位日誌用以Replicate)
binlog-do-db
binlog-ignore-db
從機可選的配置項:(用於配置從機會Replicate哪些庫和表)
replicate-do-db, replicate-ignore-db
replicate-do-table, replicate-ignore-table
replicate-wild-do-table
replicate-wild-ignore-table
注意:一條建議是不要在my.cnf/my.ini中配製master_host等選項,而應該使用CHANGE MASTER TO命令來動態設定!
對於Master端,我只需簡單地設定server_id和log_bin兩項即可,對於Slave端其實只需要設定server_id,但是還有一些推薦的設定項。以下是《Hight Performance MySql》一書中給出的Slave端的推薦設定
# SLAVE-END replication-related configuration.
# The only required option for slave-end is server_id.
# The other options are recommanded on P 349 of《Hight Performance MySql》
server_id=234
log_bin=mysql_bin_log
relay_log = mysql_relay_bin_log
log_slave_updates = 1
read_only = 1
3.串連從伺服器至主伺服器進行Replicate
通過在從伺服器上輸入CHANGE MASTER TO命令可以使從服務串連到某個主伺服器上進行replication.
mysql> CHANGE MASTER TO MASTER_HOST='192.168.0.246',
-> MASTER_USER='repl',
-> MASTER_PASSWORD='repl',
-> MASTER_LOG_FILE='mysql-bin.000001',
-> MASTER_LOG_POS=0;
輸入上述命令後即完成了全部配置工作,通過:
start slave;
啟動從服務的replication工作,這樣主從伺服器就開始同步了。你可以通過:
SHOW SLAVE STATUS/G;
命令來查看從伺服器的狀態,如果是Slave_IO_State一項顯示:Waiting for master to send event,表示所有工作已經就緒。