|
搞定MySQL雙機備份
為了數據的安全,客戶有兩台機器作為互相備份,當一台機器出現故障時,自動切換到另外一台服務器。大部分的軟件我們是通過LifeKeeper來實現的,但是MySQL的雙機備份在LifeKeeper裡沒有實現,看來,只有我手動來實現MySQL的雙機備份了哦。
先說說環境
QUOTE:
操作系統:windows 2003 server
MySQL版本:v4.1
互備數據庫:bbs
Server1:10.2.2.3
Server2:10.2.2.4
其實,MySQL的雙機備份有一個很簡單的第三方軟件可以實現,那就是SQLyog (http://www.webyog.com/),他有一個功能叫sja(SQLyog Job Agent ,http://www.webyog.com/sqlyog/sja.html),可以輕鬆實現,但是卻有一個不足,那就是MySQL表裡必須有一個primary key,如果沒有,則此表不能用sja來實現。我查看了一下,我們需要互備的數據中就有兩三個表沒有primary key,看來要放棄這個方法了。
第二種方法就是用MySQL自身的Replication機制來實現了。據說MySQL 3.23以上的版本都有此功能。下面來說說具體的步驟。
1)先在每台服務器上各安裝好mysql,保證正常運行,在Mysql的安裝目錄裡各建立一個目錄logs,如F:\Mysql4.1\logs,供後面步驟使用。
2)將要互備的初始化數據在每台服務器上各導入一份,且保持兩台服務器要互備的初始化數據一致。這個步驟很重要。
3)在每個server上各增加一個備份用戶,且賦予一定的權限。
3.1)在Server1上
QUOTE:
GRANT REPLICATION SLAVE,RELOAD,SUPER ON *.* TO backup@'10.2.2.4' IDENTIFIED BY '123456';
之後立即在Server2上用如下命令來測試backup用戶是否能連接上Server1
QUOTE:
F:\Mysql4.1\bin\mysql.exe -h10.2.2.3 -ubackup -p123456
如果能連接上,表明互備帳戶增加OK!
3.2)重複上述動作,在Server2上
QUOTE:
GRANT REPLICATION SLAVE,RELOAD,SUPER ON *.* TO backup@'10.2.2.3' IDENTIFIED BY '123456';
之後立即在Server1上用如下命令來測試backup用戶是否能連接上Server2
QUOTE:
F:\Mysql4.1\bin\mysql.exe -h10.2.2.4 -ubackup -p123456
如果能連接上,表明互備帳戶增加OK!
4)修改mysql配置文件,增加互備參數配置。
4.1)停掉server1的mysql,修改my.ini,在[mysqld]區域內增加如下信息:
QUOTE:
#####################################################
#MySQL的雙機備份,by longware,2006-05-26
server-id=1
log-bin=F:/MySQL4.1/logs/sync
master-host=10.2.2.4
master-user=backup
master-password=123456
master-port=3306
master-connect-retry=60
replicate-do-db=bbs
#####################################################
保存並關閉my.ini文件,重啟mysql服務,觀察logs目錄下面有沒有類似sync.000001、sync.index的文件生成,觀察data目錄裡有沒有*.info、*-relay-bin.000001、*-relay-bin.index的文件生成,如果兩個目錄都有,說明互備參數配置正確。
4.2)停掉server2的mysql,修改my.ini,在[mysqld]區域內增加如下信息:
QUOTE:
#####################################################
#MySQL的雙機備份,by longware,2006-05-26
server-id=2
log-bin=F:/MySQL4.1/logs/sync
master-host=10.2.2.3
master-user=backup
master-password=123456
master-port=3306
master-connect-retry=60
replicate-do-db=bbs
#####################################################
保存並關閉my.ini文件,重啟mysql服務,觀察logs目錄下面有沒有類似sync.000001、sync.index的文件生成,觀察data目錄裡有沒有*.info、*-relay-bin.000001、*-relay-bin.index的文件生成,如果兩個目錄都有,說明互備參數配置正確。
4.3)如果沒有看到上步中說的文件,說明配置文件沒有起作用,請檢查mysql配置文件的位置,很可能在c:\windows\下面,也可能在C:\Documents and Settings\Administrator\windows下面,還可能在F:\Mysql4.1\下面,具體要看您的mysql服務的啟動參數,您可以去windows的「開始-控制面板-管理工具-服務」中,雙擊mysql的服務名稱,查看」可執行文件的路徑「項的值,如果是
QUOTE:
F:/mysql4.1/bin/mysqld-nt.exe
則my.ini可能就在c:\windows\下面,如果是
QUOTE:
"F:\MySQL4.1\bin\mysqld-nt" --defaults-file="F:\MySQL4.1\my.ini" MySQL
則my.ini就在F:\MySQL4.1下面。我的一個朋友就因為沒有搞清楚my.ini的位置,折騰了大半天也每搞定。
5)分別停掉兩台機器的mysql服務,再次確保兩台機器的要互備的初始化數據一致,刪除logs下面的文件,刪除data下面的非目錄文件,確保網絡暢通,再分別啟動server1和server2的mysql服務,mysql雙機互備成功了。
6)互備測試,在server1里的bbs數據庫裡建一張表,插幾條數據,再登陸到server2里,看看數據是否存在,存在表明OK。
7)注意:兩台機器的mysql互備的初始化數據要相同。如果要單向備份,將其中的一台服務器的my.ini的互備配置註釋掉重啟即可。
8)官方參考資料:
http://dev.mysql.com/doc/refman/5.1/en/ndbcluster.html
http://dev.mysql.com/doc/refman/ ... er-replication.html
Reference: http://soft.hanweb.com/viewthread.php?tid=158&fpage=1&highlight= |
|