MySQL 5.5.x 配置Master-Slave主從複製

神諭丶發表於2014-12-29
我的環境:
OS:CentOS-6.5-64bit
DBMS:MySQL 5.5.28
my.cnf位置是 /home/USERNAME/.my.cnf
(我的mysql安裝方法是http://blog.itpub.net/29773961/viewspace-1364808/
其中有一個步驟為cp support-files/my-medium.cnf  ~/.my.cnf
故配置檔案在此,為避免使用root使用者,故不放置在/etc/my.cnf


用的是兩個伺服器(建立在ESXi上的邏輯主機
master ip:192.168.1.214
slave ip:192.168.1.215


步驟很簡單,過程也很簡單,所以搭建這個環境也是很簡單的。

步驟可以分解為:
1.配置一個伺服器作為master
2.配置一個伺服器作為slave
3.將slave連線到master




首先為了避免防火牆和SELinux可能造成的不便,首先我將其關閉或置為不可用狀態。







【1.配置一個伺服器作為master】
在我的第一個master伺服器上作出如下配置。

修改~/.my.cnf
在[mysqld]下新增

# master
log-bin = master-bin
log-bin-index = master-bin.index
server-id = 1


其中log-bin選項給出了binlog產生的所有檔案的基本名,如果你建立了一個以log-bin為副檔名的檔案,該副檔名將被忽略,而只使用檔案的基本名。
log-bin-index選項給出了二進位制索引檔案的檔名,這個索引檔案儲存了所有binlog檔案的列表。
實際上,不需要為log-bin選項提供值,其預設值為hostname-bin,hostname的值來自於pid-file,預設值是主機名。
如果管理員後來修改了主機名,binlog檔名也會隨之改變,但是索引檔案仍可以獲取正確的值,最好為伺服器建立一個與機器無關且唯一的伺服器名,因為一系列的binlog檔案中途改名可能會很混亂。

如果沒有為log-bin-index賦予任何值,其預設值與binlog檔案的基本名相同(如果沒有為log-bin提供值,則預設為hostname-bin)。
同樣,如果你不給log-bin-index賦值,索引檔名會隨主機名的改變而改變,所以如果你改變主機名然後重啟伺服器,將找不到索引檔案,從而認為索引檔案不存在,導致二進位制日誌為空。

每一個伺服器都有唯一的伺服器ID,所以如果一個slave連線了master,而且其server-id的引數值與master相同,則會產生master和slave伺服器id相同的錯誤。

將log-bin和server-id選項新增到配置檔案後重啟伺服器,然後新增一個複製使用者,這樣便完成了配置。



將my.cnf修改之後,重新啟動mysql服務,讓其載入新的my.cnf檔案。

進入root使用者:

  1. CREATE USER repl_user;


  1. GRANT REPLICATION SLAVE ON *.* TO repl_user IDENTIFIED BY 'YOURPASSWORD';



REPLICATION SLAVE許可權並沒有其他特殊的地方,這個許可權可以使使用者能夠從master上取得二進位制日誌的轉儲資料。
雖然完全可以給一個常規使用者賦予REPLICATION SLAVE的許可權,但是最好還是將複製slave使用者與其他使用者區別開來,這樣的話,如果想禁止某些slave連線,只要刪除該使用者即可。





2.配置一個伺服器作為slave
在我的第二個slave伺服器上作出如下配置。

修改~/.my.cnf
在[mysqld]下新增

# slave
relay-log = slave-relay-bin
relay-log-index = slave-relay-bin.index
server-id = 2

與master配置檔案中的log-bin和log-bin-index一樣,relay-log和relay-log-index選項預設取值決定於hostname。
relay-log預設取值為hostname-relay-bin。
relay-log-index預設取值為hostname-relay-bin.index。

修改my.cnf檔案之後,重啟mysql服務,讓配置生效即可。


3.將slave連線到master】
做連線,你只需要知道以下幾個部分即可:

主機名
埠號
master上擁有REPLICATION SLAVE許可權的使用者賬號
該使用者的密碼

在slave機上進行如下操作

首先將slave指向master,當然master_host需要填你目標master機的ip地址。
  1. CHANGE MASTER TO
  2. MASTER_HOST = '192.168.1.214',
  3. MASTER_PORT = 3306,
  4. MASTER_USER = 'repl_user',
  5. MASTER_PASSWORD = 'YOURPASSWORD';

然後再開啟slave

  1. START SLAVE;


至此,master和slave之間的第一個複製已經完成。
你可以在master機上開啟一個terminal,然後對其進行一些資料操作,比如建立表,插入資料,再到對應的slave機上檢視這些變化。







【一些問題】:
如果出現一些warning,可以透過show warnings這個指令來檢查警告或者錯誤。
當然也可以使用show slave status\G來檢視一些關於slave的資訊。

我在配置中出現的問題:
檢視status發現:
Slave_IO_Running: Yes
Slave_SQL_Running: No

解決辦法:
  1. STOP SLAVE;

  1. SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;

可能出現的另外一個問題:
slave的server-id與master衝突。
可以透過
  1. SET GLOBAL SERVER_ID = 2;
來解決此問題。






來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29773961/viewspace-1384091/,如需轉載,請註明出處,否則將追究法律責任。

相關文章