概述
在做web應(yīng)用系統(tǒng)中,如果數(shù)據(jù)庫(kù)出現(xiàn)了性能瓶頸,而你又是使用的MySQL數(shù)據(jù)庫(kù),那么就可以考慮采用數(shù)據(jù)庫(kù)集群的方式來(lái)實(shí)現(xiàn)查詢負(fù)載了。因?yàn)橐话銇?lái)講一個(gè)系統(tǒng)中數(shù)據(jù)庫(kù)的查詢操作比更新操作要多的多,因此通過(guò)多臺(tái)查詢服務(wù)器將數(shù)據(jù)庫(kù)的查詢分擔(dān)到不同的查詢數(shù)據(jù)庫(kù)從而提高數(shù)據(jù)庫(kù)的查詢效率。
MySQL數(shù)據(jù)庫(kù)支持?jǐn)?shù)據(jù)庫(kù)的主從復(fù)制功能,使用主數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)的插入、刪除與更新操作,而從數(shù)據(jù)庫(kù)則專門(mén)用來(lái)進(jìn)行數(shù)據(jù)庫(kù)查詢,從數(shù)據(jù)庫(kù)還可以建立多臺(tái),通過(guò)負(fù)載均衡來(lái)實(shí)現(xiàn)查詢,這樣就可以將更新操作與查詢操作分離到不同的數(shù)據(jù)庫(kù)上,從而提高查詢的效率,降低系統(tǒng)的負(fù)載。
配置
一、主數(shù)據(jù)庫(kù)配置
修改mysql的配置文件(對(duì)于windows就是MySQL安裝目錄下的my.ini文件,對(duì)于linux通常就
是 /etc/my.cnf文件),在配置文件中加入(或修改)
server-id = 1
log-bin=mysql-bin
binlog-do-db=dbname --要同步的數(shù)據(jù)庫(kù)名稱
binlog-ignore-db=dbname --不要同步的數(shù)據(jù)庫(kù)名稱
注:MySQL進(jìn)行主從復(fù)制是通過(guò)二進(jìn)制的日志文件來(lái)進(jìn)行,所以我們必須開(kāi)啟MySQL的日志功能,即我們上面的log-bin,同時(shí)每一臺(tái)數(shù)據(jù)庫(kù)服務(wù)器都需要指定一個(gè)唯一的server-id,通常主數(shù)據(jù)庫(kù)服務(wù)器我們指定為1。
給主數(shù)據(jù)庫(kù)授予一個(gè)可以進(jìn)行復(fù)制的用戶,如下:
grant replication slave on *.* to repuser@'host' identified by '123456';
replication slave——MySQL數(shù)據(jù)庫(kù)中表示復(fù)制的權(quán)限名稱
repuser——從數(shù)據(jù)庫(kù)服務(wù)器登陸到主數(shù)據(jù)庫(kù)服務(wù)器時(shí)用到的用戶名稱
host——從數(shù)據(jù)庫(kù)IP地址
123456——登陸密碼
如果上述權(quán)限設(shè)置后,無(wú)法同步,可將其改為
grant select,insert,update,delete,replication slave on *.* to repuser@'10.20.20.167' identified by '123456';
配置完上述步驟后,就可以啟動(dòng)主數(shù)據(jù)庫(kù)了。
二、從數(shù)據(jù)庫(kù)配置
修改配置文件
server-id=2
log-bin=mysql-bin --在從服務(wù)器上啟動(dòng)日志記錄,不是必須,但是官方建議
master-host=主機(jī) --主數(shù)據(jù)庫(kù)服務(wù)器的IP地址
master-user=用戶名 --執(zhí)行復(fù)制的用戶名稱,就是grant的用戶,即repuser
master-password=密碼 --復(fù)制用戶的密碼,就是grant的用戶密碼,即123456
master-port=端口 --主數(shù)據(jù)庫(kù)服務(wù)器的端口,默認(rèn)是3306
replicate-do-db=dbname --需要同步的數(shù)據(jù)庫(kù)
#replicate-ignore-db=dbname --不需要同步的數(shù)據(jù)庫(kù)
現(xiàn)在可以重啟從數(shù)據(jù)庫(kù),啟動(dòng)后,還需要啟動(dòng)復(fù)制線程
slave start
查看復(fù)制線程的狀態(tài)
show slave status;
我們還可以在從數(shù)據(jù)庫(kù)服務(wù)器上動(dòng)態(tài)的改變對(duì)主數(shù)據(jù)庫(kù)的配置信息,通過(guò)如下命令來(lái)進(jìn)行:
CHANGE MASTER TO MASTER_HOST='主數(shù)據(jù)庫(kù)服務(wù)器的IP地址',MASTER_PORT=3306,MASTER_USER='主數(shù)據(jù)庫(kù)上的復(fù)制賬號(hào)',MASTER_PASSWORD='密碼';
三、啟動(dòng)與監(jiān)控
1、監(jiān)控主數(shù)據(jù)庫(kù)服務(wù)器
show master status; --運(yùn)行于主數(shù)據(jù)庫(kù)
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 | 370558 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
其中File是表示日志記錄的文件,而Position則是表示當(dāng)前日志在文件中的位置,這個(gè)也是從數(shù)據(jù)庫(kù)服務(wù)器上執(zhí)行復(fù)制操作必須的標(biāo)識(shí),后面的兩個(gè)字段分別表示要記錄的數(shù)據(jù)庫(kù)名稱和不需要記錄的數(shù)據(jù)庫(kù)名稱,我們也可以在配置文件中進(jìn)行配置。
2、監(jiān)控從數(shù)據(jù)庫(kù)服務(wù)器
show slave status; --運(yùn)行于從數(shù)據(jù)庫(kù)
+----------------------------------+---------------+-------------+-------------+---------------+------------------+---------------------+-----------------------+---------------+-----------------------+------------------+-------------------+-----------------+---------------------+--------------------+------------------------+-------------------------+-----------------------------+------------+------------+--------------+---------------------+-----------------+-----------------+----------------+---------------+--------------------+--------------------+--------------------+-----------------+-------------------+----------------+-----------------------+
| Slave_IO_State | Master_Host | Master_User | Master_Port | Connect_Retry | Master_Log_File | Read_Master_Log_Pos | Relay_Log_File | Relay_Log_Pos | Relay_Master_Log_File | Slave_IO_Running | Slave_SQL_Running | Replicate_Do_DB | Replicate_Ignore_DB | Replicate_Do_Table | Replicate_Ignore_Table | Replicate_Wild_Do_Table | Replicate_Wild_Ignore_Table | Last_Errno | Last_Error | Skip_Counter | Exec_Master_Log_Pos | Relay_Log_Space | Until_Condition | Until_Log_File | Until_Log_Pos | Master_SSL_Allowed | Master_SSL_CA_File | Master_SSL_CA_Path | Master_SSL_Cert | Master_SSL_Cipher | Master_SSL_Key | Seconds_Behind_Master |
+----------------------------------+---------------+-------------+-------------+---------------+------------------+---------------------+-----------------------+---------------+-----------------------+------------------+-------------------+-----------------+---------------------+--------------------+------------------------+-------------------------+-----------------------------+------------+------------+--------------+---------------------+-----------------+-----------------+----------------+---------------+--------------------+--------------------+--------------------+-----------------+-------------------+----------------+-----------------------+
| Waiting for master to send event | 10.20.20.194 | repuser | 3306 | 60 | mysql-bin.000003 | 370558 | WEB2-relay-bin.000206 | 12251 | mysql-bin.000003 | Yes | Yes | | | | | | | 0 | | 0 | 370558 | 12251 | None |