1.說明 在做web應(yīng)用系統(tǒng)中,,如果數(shù)據(jù)庫出現(xiàn)了性能瓶頸,而你又是使用的MySQL數(shù)據(jù)庫,,那么就可以考慮采用數(shù)據(jù)庫集群的方式來實現(xiàn)查詢負(fù)載了,。因為一般來講任何一個系統(tǒng)中數(shù)據(jù)庫的查詢操作比更新操作要多的多,因此通過多臺查詢服務(wù)器將數(shù)據(jù)庫的查詢分擔(dān)到不同的查詢數(shù)據(jù)庫從而提高數(shù)據(jù)庫的查詢效率,。 MySQL數(shù)據(jù)庫支持?jǐn)?shù)據(jù)庫的主從復(fù)制功能,,使用主數(shù)據(jù)庫進(jìn)行數(shù)據(jù)的插入、刪除與更新操作,,而從數(shù)據(jù)庫則專門用來進(jìn)行數(shù)據(jù)庫查詢,,這樣就可以將更新操作與查詢操作分離到不同的數(shù)據(jù)庫上,從而提高查詢的效率,。 2.主數(shù)據(jù)庫配置 MySQL任何一臺數(shù)據(jù)庫服務(wù)器都可以作為主數(shù)據(jù)庫服務(wù)器,,我們只需要簡單的修改配置文件就可以使之成為主數(shù)據(jù)庫服務(wù)器。我們打開MySQL的配置文件(對于windows就是MySQL安裝目錄下的my.ini文件,,對于linux通常就是/etc/my.cnf文件),,我們在配置文件中加入如下兩行: server-id = 1 log-bin=mysql-bin 注意,MySQL進(jìn)行主從復(fù)制是通過二進(jìn)制的日志文件來進(jìn)行,,所以我們必須開啟MySQL的日志功能,,即我們上面的log-bin,同時每一臺數(shù)據(jù)庫服務(wù)器都需要指定一個唯一的server-id,,通常主數(shù)據(jù)庫服務(wù)器我們指定為1,。主數(shù)據(jù)庫服務(wù)器的配置就是如此了,然后我們還需要給主數(shù)據(jù)庫授予一個可以進(jìn)行復(fù)制的用戶,,命令如下: grant replication slave on *.* to 'repuser'@'%' identified by '123456'; replication slave是MySQL數(shù)據(jù)庫中表示復(fù)制的權(quán)限名稱,,repuser則是表示從數(shù)據(jù)庫服務(wù)器登陸到主數(shù)據(jù)庫服務(wù)器時用到的用戶名稱,123456表示登陸密碼,。這樣,,我們就在主數(shù)據(jù)庫服務(wù)器上創(chuàng)建了一個可以進(jìn)行復(fù)制的用戶賬號了。然后我們啟動主數(shù)據(jù)庫服務(wù)器就可以了,。
3.從數(shù)據(jù)庫配置 從數(shù)據(jù)庫服務(wù)器的配置稍微多一點,,主要也是修改MySQL的配置文件,加入如下行: server-id=2 log-bin=mysql-bin --在從服務(wù)器上啟動日志記錄,,不是必須,,但是官方建議 master-host=主機(jī) --主數(shù)據(jù)庫服務(wù)器的IP地址 master-user=用戶名 --執(zhí)行復(fù)制的用戶名稱,就是grant的用戶 master-password=密碼 --復(fù)制用戶的密碼,,就是grant的用戶密碼 master-port=端口 --主數(shù)據(jù)庫服務(wù)器的端口,,默認(rèn)是3306 相關(guān)的配置參數(shù)意義已做了說明,主要就是多了配置主數(shù)據(jù)庫服務(wù)器上的復(fù)制賬號的信息,。然后我們啟動從數(shù)據(jù)庫服務(wù)器,,注意啟動從數(shù)據(jù)庫服務(wù)器后,并沒有啟動復(fù)制線程,,我們需要在命令行中執(zhí)行如下命令來啟動復(fù)制功能: slave start 啟動后,,我們就可以通過如下命令來查看復(fù)制的狀態(tài)了: show slave status; 然后我們就可以看到系統(tǒng)的輸出,第一個就是Slave_IO_State,,它的值通常就是Waiting for master to send event,,然后我們也還可以看到我們剛才配置的主數(shù)據(jù)庫服務(wù)器的IP地址,、復(fù)制賬號等信息,。 我們還可以在從數(shù)據(jù)庫服務(wù)器上動態(tài)的改變對主數(shù)據(jù)庫的配置信息,通過如下命令來進(jìn)行: CHANGE MASTER TO MASTER_HOST=’主數(shù)據(jù)庫服務(wù)器的IP地址’, MASTER_PORT=3306,MASTER_USER=’主數(shù)據(jù)庫上的復(fù)制賬號’, MASTER_PASSWORD=’密碼’;
4.啟動與監(jiān)控 1)監(jiān)控主數(shù)據(jù)庫服務(wù)器的狀態(tài) 我們可以通過showmaster status來查看主數(shù)據(jù)庫服務(wù)器的狀態(tài),,它的輸出如下: +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ |mysql-bin.000003| 370558| | | +------------------+----------+--------------+------------------+ 1 row in set (0.00 sec) 其中File是表示日志記錄的文件,,而Position則是表示當(dāng)前日志在文件中的位置,這個也是從數(shù)據(jù)庫服務(wù)器上執(zhí)行復(fù)制操作必須的標(biāo)識,,后面的兩個字段分別表示要記錄的數(shù)據(jù)庫名稱和不需要記錄的數(shù)據(jù)庫名稱,,我們也可以在配置文件中進(jìn)行配置,。
2)監(jiān)控從數(shù)據(jù)庫服務(wù)器的狀態(tài) 我們可以通過show slave status來查看從數(shù)據(jù)庫服務(wù)器的狀態(tài),它的基本輸出如下: +----------------------------------+---------------+-------------+-------------+---------------+------------------+---------------------+-----------------------+---------------+-----------------------+------------------+-------------------+-----------------+---------------------+--------------------+------------------------+-------------------------+-----------------------------+------------+------------+--------------+---------------------+-----------------+-----------------+----------------+---------------+--------------------+--------------------+--------------------+-----------------+-------------------+----------------+-----------------------+ | 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 | 172.16.11.221 | repuser | 3306 | 60 |mysql-bin.000003| 370558| WEB2-relay-bin.000206 | 12251 | mysql-bin.000003 | Yes | Yes | | | | | | | 0 | | 0 | 370558 | 12251 | None | | 0 | No | | | | | | 0 | +----------------------------------+---------------+-------------+-------------+---------------+------------------+---------------------+-----------------------+---------------+-----------------------+------------------+-------------------+-----------------+---------------------+--------------------+------------------------+-------------------------+-----------------------------+------------+------------+--------------+---------------------+-----------------+-----------------+----------------+---------------+--------------------+--------------------+--------------------+-----------------+-------------------+----------------+-----------------------+ 1 row in set (0.00 sec) 我們看到紅色的部分,,分別表示的是Master_Log_File和Read_Master_Log_Pos,,即主數(shù)據(jù)庫服務(wù)器上的日志文件和要讀取的主數(shù)據(jù)庫服務(wù)器上的日志的位置,通常這個Read_Master_Log_Pos是和主數(shù)據(jù)庫服務(wù)器上的Position是一致的,,當(dāng)然這個是指同步以后的,,如果從數(shù)據(jù)庫服務(wù)器還沒有同步完畢,那么這個值通常比主數(shù)據(jù)庫服務(wù)器上的要小,。 如果從數(shù)據(jù)庫服務(wù)器在同步的過程中出現(xiàn)了問題,,那么我們可以通過reset slave來重置從數(shù)據(jù)庫服務(wù)器的復(fù)制線程,從數(shù)據(jù)庫服務(wù)器上的通常操作命令有: Slave start; --啟動復(fù)制線程 Slave stop; --停止復(fù)制線程 Reset slave; --重置復(fù)制線程 Show slave status; --顯示復(fù)制線程的狀態(tài) Change master to; --動態(tài)改變到主數(shù)據(jù)庫的配置
|