mysql集羣:主從數據庫配置 實現查詢負載

MySQL集羣:主從數據庫配置 實現查詢負載

 在做web應用系統中,如果數據庫出現了性能瓶頸,而你又是使用的MySQL數據庫,那麼就可以考慮採用數據庫集羣的方式來實現查詢負載了。因爲一般來講任何一個系統中數據庫的查詢操作比更新操作要多的多,因此通過多臺查詢服務器將數據庫的查詢分擔到不同的查詢數據庫從而提高數據庫的查詢效率。

      MySQL數據庫支持數據庫的主從複製功能,使用主數據庫進行數據的插入、刪除與更新操作,而從數據庫則專門用來進行數據庫查詢,這樣就可以將更新操作與查詢操作分離到不同的數據庫上,從而提高查詢的效率。

1、主數據庫配置

      MySQL任何一臺數據庫服務器都可以作爲主數據庫服務器,我們只需要簡單的修改配置文件就可以使之成爲主數據庫服務器。我們打開MySQL的配置文件(對於windows就是MySQL安裝目錄下的my.ini文件,對於linux通常就是/etc/my.cnf文件),我們在配置文件中加入如下兩行:

  1. server-id = 1
  2. log-bin=mysql-bin

      注意,MySQL進行主從複製是通過二進制的日誌文件來進行,所以我們必須開啓MySQL的日誌功能,即我們上面的log-bin,同時每一臺數據庫服務器都需要指定一個唯一的server-id,通常主數據庫服務器我們指定爲1。主數據庫服務器的配置就是如此了,然後我們還需要給主數據庫授予一個可以進行復制的用戶,命令如下:

  1. GRANT replication slave ON *.* TO 'repuser'@'%' IDENTIFIED BY '123456';

      replication slave是MySQL數據庫中表示覆制的權限名稱,repuser則是表示從數據庫服務器登陸到主數據庫服務器時用到的用戶名稱,123456表示登陸密碼。這樣,我們就在主數據庫服務器上創建了一個可以進行復制的用戶賬號了。然後我們啓動主數據庫服務器就可以了。

2、從數據庫配置

      從數據庫服務器的配置稍微多一點,主要也是修改MySQL的配置文件,加入如下行:

  1. server-id=2
  2. log-bin=mysql-bin --在從服務器上啓動日誌記錄,不是必須,但是官方建議
  3. master-host=主機 --主數據庫服務器的IP地址
  4. master-user=用戶名 --執行復制的用戶名稱,就是grant的用戶
  5. master-password=密碼 --複製用戶的密碼,就是grant的用戶密碼
  6. master-port=端口 --主數據庫服務器的端口,默認是3306

      相關的配置參數意義已做了說明,主要就是多了配置主數據庫服務器上的複製賬號的信息。然後我們啓動從數據庫服務器,注意啓動從數據庫服務器後,並沒有啓動複製線程,我們需要在命令行中執行如下命令來啓動複製功能:

  1. slave start

      啓動後,我們就可以通過如下命令來查看複製的狀態了:

  1. show slave status;

      然後我們就可以看到系統的輸出,第一個就是Slave_IO_State,它的值通常就是Waiting for master to send event,然後我們也還可以看到我們剛纔配置的主數據庫服務器的IP地址、複製賬號等信息。

      我們還可以在從數據庫服務器上動態的改變對主數據庫的配置信息,通過如下命令來進行:

  1. CHANGE MASTER TO MASTER_HOST=’主數據庫服務器的IP地址’, MASTER_PORT=3306,MASTER_USER=’主數據庫上的複製帳號’, MASTER_PASSWORD=’密碼’;

3、啓動與監控

      監控主數據庫服務器的狀態,我們可以通過showmaster status來查看主數據庫服務器的狀態,它的輸出如下:

  1. +------------------+----------+--------------+------------------+
  2. | File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
  3. +------------------+----------+--------------+------------------+
  4. | mysql-bin.000003 | 370558 | | |
  5. +------------------+----------+--------------+------------------+
  6. 1 row IN SET (0.00 sec)

      其中File是表示日誌記錄的文件,而Position則是表示當前日誌在文件中的位置,這個也是從數據庫服務器上執行復制操作必須的標識,後面的兩個字段分別表示要記錄的數據庫名稱和不需要記錄的數據庫名稱,我們也可以在配置文件中進行配置。

      監控從數據庫服務器的狀態,我們可以通過show slave status來查看從數據庫服務器的狀態,它的基本輸出如下:

  1. +----------------------------------+---------------+-------------+-------------+---------------+------------------+---------------------+-----------------------+---------------+-----------------------+------------------+-------------------+-----------------+---------------------+--------------------+------------------------+-------------------------+-----------------------------+------------+------------+--------------+---------------------+-----------------+-----------------+----------------+---------------+--------------------+--------------------+--------------------+-----------------+-------------------+----------------+-----------------------+
  2. | 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 |
  3. +----------------------------------+---------------+-------------+-------------+---------------+------------------+---------------------+-----------------------+---------------+-----------------------+------------------+-------------------+-----------------+---------------------+--------------------+------------------------+-------------------------+-----------------------------+------------+------------+--------------+---------------------+-----------------+-----------------+----------------+---------------+--------------------+--------------------+--------------------+-----------------+-------------------+----------------+-----------------------+
  4. | 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 |
  5. +----------------------------------+---------------+-------------+-------------+---------------+------------------+---------------------+-----------------------+---------------+-----------------------+------------------+-------------------+-----------------+---------------------+--------------------+------------------------+-------------------------+-----------------------------+------------+------------+--------------+---------------------+-----------------+-----------------+----------------+---------------+--------------------+--------------------+--------------------+-----------------+-------------------+----------------+-----------------------+
  6. 1 row IN SET (0.00 sec)

      上面顯示的結果中的mysql-bin.000003370558分別表示的是Master_Log_File和Read_Master_Log_Pos,即主數據庫服務器上的日誌文件和要讀取的主數據庫服務器上的日誌的位置,通常這個Read_Master_Log_Pos是和主數據庫服務器上的Position是一致的,當然這個是指同步以後的,如果從數據庫服務器還沒有同步完畢,那麼這個值通常比主數據庫服務器上的要小。

      如果從數據庫服務器在同步的過程中出現了問題,那麼我們可以通過reset slave來重置從數據庫服務器的複製線程,從數據庫服務器上的通常操作命令有:
  1. Slave start; --啓動複製線程
  2. Slave stop; --停止複製線程
  3. Reset slave; --重置複製線程
  4. Show slave status; --顯示覆制線程的狀態
  5. Change master to; --動態改變到主數據庫的配置

      至此,我們就完成了mysql的主從數據庫的配置,這也也爲我們的應用在集羣中的使用打下了一個基礎。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章