隨著訪問量的增加,對于一些比較耗時的數(shù)據(jù)庫讀取操作,一般采用將寫入與讀取操作分開來緩解數(shù)據(jù)庫的壓力,數(shù)據(jù)庫引擎一般采用Master/Slave架構(gòu)。雖然這種架構(gòu)不能從根本上解決數(shù)據(jù)庫的失敗設計,但對于數(shù)據(jù)庫的性能優(yōu)化還是可以起到一些的作用的,特別是對于MySql,讀取的時候,沒有像SQL Server的unlock操作。
為了搭建一個Master/Slave環(huán)境,由于資源有限,就在本機上安裝了兩個MySql服務,一個用于Master,一個用于Slave同步數(shù)據(jù)。
一、在windows環(huán)境下面安裝兩個MySql服務
從mysql官方網(wǎng)站下載mysql,我下載的是5.1.46版。按照windows的向?qū)б徊揭徊桨惭b,安排過程不再詳述。
安裝完成之后,一般需要簡單的配置,根據(jù)你自己的機器配置,從my-huge.ini、my-innodb-heavy-4G.ini、my-large.ini、my-medium.ini、my-small.ini選擇一個合適的配置文件,將文件復制一份,更名為my.ini,修改里面的基本配置信息。
[mysqld]basedir=D:Program FilesMySQL Server 5.1 #MySql安裝路徑datadir=D:DataMySQLdata #MySql數(shù)據(jù)庫存放路徑,我不太喜歡將其存放在MySql安裝路徑中default-character-set=gbk #默認字符集port=3306 #端口號打開MS-DOS窗口,進入DOS環(huán)境,切換到"%MySQL_HOME%in"目錄
運行: %MySQL_HOME%in>mysqld --install mysql,創(chuàng)建mysql服務(去控制面板->服務中驗證)
啟動服務,進入mysql,show databases;一下,看是否正常運行。
安裝過一個服務之后,就可以安裝第二個服務了。
一、將安裝過的文件,復制一份,復制到合適的位置并更名,以我的為例,D:Program FilesMySQL Slave 5.1
二、修改端口號,basedir、datadir
三、通過命令行方式進行D:Program FilesMySQL Slave 5.1Bin,創(chuàng)建服務:mysqld --install mysql2
四、進入注冊表編輯器,找到 HKEY_LOCAL_MACHINE ->SYSTEM->CurrentControlSet->services->mysql2 .編輯ImagePath為:”"D:Program FilesMySQL Slave 5.1inmysqld" mysql2”,保存即可。
五、在命令提示符下,net start mysql2,即可啟動服務。
注意:如果你安裝的MySql已經(jīng)有一些數(shù)據(jù)了,需要將這些數(shù)據(jù)也拷貝到第二個MySql服務的datadir中。
創(chuàng)建成功后,啟動mysql2服務,進入mysql2(用相同的密碼),驗證是否創(chuàng)建成功。
二、搭建MySql的Master/Slave架構(gòu)
在Master(Mysql5.1)的數(shù)據(jù)庫中建立一個備份帳戶,命令如下:
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'localhost' IDENTIFIED BY '123';
Master修改如下(my.ini):
[mysqld] #Master start#日志輸入地址 主要同步使用log-bin=D:DatalogMasterlog-bin.log#同步數(shù)據(jù)庫binlog-do-db=renli#主機id 不能和從機id重復server-id=1#Master end
Slave修改如下(my.ini):
Slave修改
#Slave startlog-bin=D:DatalogSlavelog-bin.log#從機id,區(qū)別于主機idserver-id=2#主機ip,供從機連接主機用master-host=localhost#主機端口master-port=3306#剛才為從機復制主機數(shù)據(jù)新建的帳號master-user=slave#剛才為從機復制主機數(shù)據(jù)新建的密碼master-password=123#重試間隔時間10秒master-connect-retry=10#需要同步的數(shù)據(jù)庫replicate-do-db=renli#啟用從庫日志,這樣可以進行鏈式復制log-slave-updates#從庫是否只讀,0表示可讀寫,1表示只讀read-only=1#Slave end
在Master上面可以通過show master status G;查看當前Master的狀態(tài)
在Slave上面可以通過show slave status G;查看當前slave的狀態(tài)
請避免數(shù)據(jù)不同步的時候,設置Master/Slave架構(gòu)。可以通過start slave與stop slave來開啟和關(guān)閉同步。