星期三, 3月 21, 2007

在 Mysql 實現複製( Replication )


圖書館系統目前運行中,為了避免更新程式或系統 Crash 時造成資料遺失的問題,在 DNS 這台機器也裝上 Mysql,然後兩台做 Replication,這兩邊的資料同步。


目前配置方式 :


A電腦: Master 1 / Slave 2
C:/Windows/my.ini 內 Replication 設定內容 (Windows 2003, MySQL 5.0.16 IP:192.168.1.23)
#################################################
#### Setting For Replication of MASTER
# old_passwords=1
server-id=1
log-bin
binlog-do-db=library
binlog-do-db=bank # input the database which should be replicated
binlog-ignore-db=mysql # input the database that should be ignored for replication
binlog-ignore-db=test
log-bin=win2k3-bin
relay-log=win2k3-relay-bin
#################################################
#### Setting For Replication of Slave
master-host = 192.168.1.1
master-user = replication
master-password = slave
master-port = 3306



B電腦: Master 2 / Slave 1
/etc/my.cnf 內 Replication 設定內容 (FreeBSD 6.1 R, MySQL 5.0.37 IP:192.168.1.1)
#################################################
server-id=2
log-bin=dns-bin
log-bin
relay-log=dns-relay-bin
binlog-do-db=library
#binlog-do-db=bank # input the database which should be replicated
binlog-ignore-db=mysql # input the database that should be ignored for replication
binlog-ignore-db=test


master-host = 192.168.1.23
master-user = replication
master-password = slave
master-port = 3306
#################################################


Step 1: 修改兩台電腦的 mysql設定檔(my.ini 或 my.cnf)


Step 2: 進入A電腦的 mysql, 在 mysql> 執行 grant replication slave on *.* to 'replication'@192.168.1.1 identified by 'slave';


Step 3: 進入B電腦的 mysql, 在 mysql> 執行 grant replication slave on *.* to 'replication'@192.168.1.23 identified by 'slave';


Step4: 將兩台電腦 MySQL Shutdown,並重新啟動。


Step5: 進入A電腦的 mysql,在 mysql> 執行 start slave;


Step6: 進入B電腦的 mysql,在 mysql> 執行 start slave;


-----------------------------------------------------------------------------------------------------------


檢查Replication 狀況:


mysql> show master status;


mysql> show slave status \G;


如果沒有問題的話,就完成 MySQL Replication 的設定了,若有問題的話,可以把開啟錯誤訊息檔來檢視,這個檔案通常會和 database放在一起,並以電腦名稱為檔案,副檔名為 err;如: windows安裝在 C:/AppServ/MySQL/,則該檔案預設會放在 C:/Windows/MySQL/DATA 目錄中;在FreeBSD裡,則會放在 /var/db/mysql/ 底下。