msyql數據庫主從架構

在Web應用系統中,數據庫性能是導致系統性能瓶頸最主要的原因之一。尤其是在大規模系統中,數據庫集羣已經成爲必備的配置之一。集羣的好處主要有:查詢負載、數據庫複製備份等。

      MySQL數據庫支持數據庫的主從複製功能,因此在集羣方面具有其獨特的優勢。衆多國內外大型網站架構體系中,均採用了MySQL的主從數據庫配置來實現查詢負載、數據庫熱備等功能。本人在實際的Web項目中也涉及到這一需求,在此將如何配置實現做個簡單小結。

      1、實驗環境

           主庫:Ubuntu  IP:192.168.1.189

           從庫:Ubuntu  IP:192.168.1.188

      2、主數據庫配置

      A、修改配置文件/etc/mysql/my.cnf

      任何一臺MySQL數據庫服務器都可以配置爲集羣主服務器,打開MySQL的配置文件,在配置文件中加入下面兩行:

      server-id = 1

      log-bin = binlog_repl

      binlog-do-db = test     //設置需要同步的數據庫,如果需要設置多個,則加入多條這行語句。

      注:MySQL是通過二進制的日誌文件來進行主從數據庫複製的,所以必須開啓日誌功能,即上述的log-bin;另外在集羣中,每臺數據庫服務器都需要指定一個唯一ID,這裏我們指定爲1。

      給主數據庫授權一個可以進行復制的用戶,執行如下命令:

      grant replication slave on *.* to 'slave'@'%' identified by '123';

      執行成功後,重啓MySQL。

      B、鎖定數據庫並備份

      mysql>flush tables with read lock;

      備份數據庫,傳輸到從數據庫的數據目錄下/var/lib/mysql;

      C、用show master status;命令查看主數據庫狀態

      +--------------------+----------+--------------+------------------+
       | File               | Position | Binlog_Do_DB | Binlog_Ignore_DB |
      +--------------------+----------+--------------+------------------+
       | binlog_repl.000001 |      106 | test         |                  |
      +--------------------+----------+--------------+------------------+

       記錄下File和Position的值。

       D、主數據庫解鎖:unlock tables;

      3、從數據庫配置

      A、修改配置文件/etc/mysql/my.cnf

       在mysqld下加入如下代碼:

      server-id=2

      master-host=192.168.1.189

      master-user=slave

      master-password=123

      保存後,重啓mysql服務。

      B、設置slave參數,啓動

      在mysql下執行slave stop命令,停止slave服務;

      mysql> change master to

       -> master_host='192.168.1.189',

       -> master_user='slave',

       -> master_password='123',

       -> master_log_file='binlog_repl.000001',

       -> master_log_pos=106;

      注意:這裏的master_log_file,master_log_pos的值要和master的值一致。否則會無法同步。

      執行slave start命令,啓動服務。

      4、驗證同步

      從數據庫下運行show slave status \G;

      如果能看到:

       Slave_IO_Running: Yes

       Slave_SQL_Running: Yes

      說明已經成功啓動了主從數據庫的數據同步。

      在主數據庫中執行插入語句 insert into user values('kangqing','1234567890');

      在從數據庫中執行查詢,可以看到主數據庫插入的數據已經同步到從數據庫表中。

      本人在配置的時候出現過這樣的問題:

      Slave_IO_Running和Slave_SQL_Running的值都爲Yes,但是無法和主數據庫同步。在主數據庫插入記錄時,從數據庫表無任何變化,執行show slave status時可以看到這樣的錯誤:

     Last_SQL_Error: Error 'Table 'user' is read only' on query. Default database: 'test'. Query: 'insert into user values('gaga','5436897')'

     估計是權限問題。

     解決方法:修改/var/lib/mysql文件夾的權限,對mysql.mysql用戶賦予讀寫權限即可。

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