做雙機熱備和負載均衡,master/slave , master/master
(1)
先簡要介紹一下mysql雙向熱備:mysql從3.23.15版本以後提供數據庫複製功能。利用該功能可以實現兩個數據庫同步,主從模式(A->B),互相備份模式(A<=>B)的功能。
mysql數據庫雙向熱備的操作實際說明:
1、mysql數據庫同步複製功能的設置都在mysql的配置文件中體現。在linux環境下的配置文件一般在/etc/mysql/my.cnf或者在 mysql用戶的home目錄下的my.cnf,筆者的my.cnf則在/etc/my.cnf;windows環境下則可到mysql安裝路徑下找到 my.ini。
2、配置數據同步(A->B)(以mysql版本 5.0.26爲例):
假設數據庫A爲主機:
A機器:
IP = 192.168.1.101
B機器:
IP = 192.168.1.102
(1)在A機器中有數據庫如下:
//數據庫A
CREATE DATABASE backup_db;
USE backup_db;
(2)
MySQL數據庫沒有增量備份的機制,但它提供了一種主從備份的機制,就是把主數據庫的所有的數據同時寫到備份數據庫中。實現MySQL數據庫的熱備份。
下面是具體的主從熱備份的步驟:
假設主服務器A(master)、從服務器爲B(slave)
A:192.168.0.104
B:192.168.0.169
1.主服務器授權
授權副服務器可以連接主服務器並可以進行更新。這是在主服務器上進行的,創建一個username和password供副服務器訪問時使用。也可以使用主服務器默認的帳號和密碼。
2.數據複製
將master上已有的數據複製到slave上,以便主從數據庫建立的時候兩個數據庫的數據保持一致。導出導入數據庫就不詳述了。
3.配置主服務器
修改master上mysql的根目錄下的my.ini配置文件
在選項配置文件中賦予主服務器一個server-id,該id必須是1到2^23-1範圍內的唯一值。主服務器和副服務器的server-id不能相同。另外,還需要配置主服務器,使之啓用二進制日誌,即在選項配置文件中添加log-bin啓動選項。
注意:如果主服務器的二進制日誌已經啓用,關閉並重新啓動之前應該對以前的二進制日誌進行備份。重新啓動後,應使用RESET MASTER語句清空以前的日誌。
原因:master上對數據庫cartrader的一切操作都記錄在日誌文件中,然後會把日誌發給slave,slave接收到master傳來的日誌文 件之後就會執行相應的操作,使slave中的數據庫做和master數據庫相同的操作。所以爲了保持數據的一致性,必須保證日誌文件沒有髒數據。
4.重啓master
配置好以上選項後,重啓MySQL服務,新選項將生效。現在,所有對數據庫中信息的更新操作將被寫進日誌中。
5.配置slave
在副服務器上的MySQL選項配置文件中添加以下參數:
[mysqld]
#唯一,並與主服務器上的server-id不同。
server-id=2
#主服務器的主機名或者ip地址
master-host=192.168.0.104
#如果主服務器沒有在默認的端口上監聽,則需確定master-port選項
master-port=3306
#步驟2.1中創建的用戶名和密碼
master-user=root
master-password=123456
#複製操作要針對的數據庫(可選,默認爲全部)
replicate-do-db=cartrader
#如果主副服務器間連接經常失敗,需增加master-retry-count和master-connect-retry
#master-retry-count連接重試的次數
#master-connect-retry 連接失敗後等待的秒數
master-retry-count =999
master-connect-retry=60
5.重啓slave
副服務器上MySQL服務重啓後,還在數據目錄中創建一個master.info文件,其中包含
所有有關複製過程的信息(連接主服務器的相關信息及與主服務器交換數據的相關信息)。在初次啓動以後,副服務器將檢查這個master.info文件,以得到相關信息。
如果想修改複製選項,刪除master.info並重啓MySQL服務,在啓動過程中使用選項配置文件中的新選項進行重新創建了master.info文件。
將主服務器上備份好的數據庫腳本文件(cartrader.sql)導入到副服務器數據庫中,以便保
證主-副服務器上進行復制操作的起點一樣。
6.查看master的狀態與設置的是否一致
7.查看slave
一般情況下重啓了slave之後,自動就會開啓複製功能,可以通過下面的語句查看
在slave上
mysql>show slave status
如果顯示waiting for master to send event 的話就表示已經啓動了,反之就運行
來啓動slave
在SHOW SLAVE STATUS的命令輸出後,應該包含Slave_IO_Running對應的值爲YES,
Slave_SQL_Running對應的值爲YES,只有這樣才保證主從機能正常備份。
暫時停止主從熱備份的命令是:
mysql>stop slave
CREATE TABLE `backup_table`(
`id`int(11) NOT NULL auto_increment,
`name` varchar(20) character set utf8 NOT NULL,
`sex` varchar(2) character set utf8 NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
A機器的my.cnf(或my.ini)中應該配置:
server-id=1
log-bin=c:\mysqlback #同步事件的日誌記錄文件
binlog-do-db=backup_db #提供數據同步服務的數據庫
(2)在B機器中有數據庫如下:
//數據庫B
CREATE DATABASE backup_db;
USE backup_db;
CREATE TABLE `backup_table`(
`id`int(11) NOT NULL auto_increment,
`name` varchar(20) character set utf8 NOT NULL,
`sex` varchar(2) character set utf8 NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
注:數據庫A和B的數據庫結構一定要相同,否則無法構成同步。
B機器的my.cnf(或my.ini)中應該配置:
server-id=2
master-host=192.168.1.101#主機A的地址
master-user=ym #主機A提供給B的用戶,該用戶中需要包括數據庫backup_db的權限
master-password=ym #訪問密碼
master-port=3306#端口,主機的MYSQL端口
master-connect-retry=60#重試間隔60秒
replicate-do-db=backup_db #同步的數據庫
(3)完成了以上配置之後,將A的mysql數據的權限給B。
A機器:
(4)重啓AB數據庫,後:
B機器:
mysql>slave start;
查看同步配置情況
A機器:
mysql>show master status;
B機器:
(5)在A中的backup_db.backup_table表中插入一些數據,查看B中的backup_db.backup_table表是否同步了數據改動。如果沒有看到同步數據結果,即同步不成功,請查看錯誤(如下)。
當有錯誤產生時*.err日誌文件(可到mysql安裝目錄下找),同步的線程退出。當糾正錯誤後重復步驟(4)。
3、實現雙向熱備(A<=>B):
將以上的(1)-(5)步驟按A-B雙向配置即可。
總結一下:
主要是兩邊建立同樣的數據庫,然後在數據庫配置文件里加入更新的語句即可。
相互開通互有權限的用戶,然後這條命令就是同步頻率和同步數據庫:
master-connect-retry=60#重試間隔60秒
replicate-do-db=backup_db #同步的數據庫