1. 程式人生 > >解決高併發的資料庫主從複製結構

解決高併發的資料庫主從複製結構

高併發的企業架構

    在高併發下企業架構主要是由叢集支撐的。本文主要是討論主從複製的資料庫叢集搭建。

主從複製的資料庫叢集架構

詳解:

    資料庫的操作主要分為兩種,聯機事務處理(OLTP):增刪改,聯機分析處理(OLAP):查,這裡主要是將這兩種操作用資料庫路由器分開,有寫伺服器叢集和讀伺服器叢集。

    對於讀伺服器叢集來說,只是讀取資料,並不會對資料的一致性造成影響。但是對於寫操作來說,在寫操作完成之後,必須讓所有的伺服器同步此操作,因此才有了主從複製的架構。

    如圖,寫操作的伺服器為雙主伺服器,當然也可以為多主伺服器。(須知:在整體架構上,寫伺服器為主伺服器群,讀伺服器為從伺服器群,在主伺服器群中,又分為主伺服器和從伺服器)。在一臺寫伺服器寫完成操作後,會產生一個二進位制日誌,之後將二進位制日誌分發給其他寫伺服器和效能較好的讀伺服器,收的日誌我們稱之為中繼日誌,這些伺服器會根據中繼日誌來更新資料庫中的資料,保持資料的一致性,較好的讀伺服器收到中繼日誌後先對自己進行資料更新,之後產生二進位制日誌再分發給其他的讀伺服器,這樣來保持整個伺服器群的資料一致性。

詳細配置

說明:這裡我們使用兩臺windows server2008來模擬兩臺資料庫伺服器,每臺windows server2008上裝有一臺mysql(免安裝版,自己配置叢集方便)。

第一步:準備兩臺windowsserver2008並把免安裝版的mysql放在c盤。

第二步:修改配置檔案

    這裡提供了兩個.ini簡要配置檔案(my-master.ini和my-slave.ini),重新命名為my.ini後分別放在mysql根目錄下,並修改內部的相應配置項。

第三步:在兩臺伺服器上安裝並啟動mysql服務

         命令名字--install 服務名字 --defaults-file="配置檔案"

         mysqld.exe--install MySQL0930 --defaults-file="my檔案的路徑"

第四步:進入master伺服器,並新增使用者

         登入

         mysql-u root -p

         新增使用者

         mysql>create user jk;

         新增使用者的許可權

         mysql>grant replication slave on *.*to jk identified by '密碼';

第五步:登入slave伺服器,並修改配置

         先用root使用者登入

         再修改:

         changemaster to

         master_host='192.168.57.128',

         master_port=3306,

         master_user='cll',

         master_password='123456';

         最後開啟主從複製

         startslave;

第六步:驗證,在主資料庫上建立資料庫後,從資料庫會也會有相應的改變。

附錄

【my-master.ini】

[client]
port=3306
default-character-set=utf8

[mysqld]
port=3306

character_set_server=utf8
#character_set_server=utf8 一定要這樣寫;

basedir=C:\Program Files\MySQL\mysql-5.6.16-win32
#解壓目錄

datadir=C:\Program Files\MySQL\mysql-5.6.16-win32\data
#解壓目錄下data目錄,必須為data目錄

#sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 這個有問題,在建立完新使用者登入時報錯
sql_mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION


#主伺服器的配置
#開啟二進位制日誌
log-bin=master-bin
#使用二進位制日誌的索引檔案
log-bin-index=master.bin.index
#為伺服器新增唯一的編號
server-id=1

【my-slave.ini】

[client]
port=3306
default-character-set=utf8

[mysqld]
port=3306

character_set_server=utf8
#character_set_server=utf8 一定要這樣寫;

basedir=C:\Program Files\MySQL\mysql-5.6.16-win32
#解壓目錄

datadir=C:\Program Files\MySQL\mysql-5.6.16-win32\data
#解壓目錄下data目錄,必須為data目錄

#sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 這個有問題,在建立完新使用者登入時報錯
sql_mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

server-id=2
relay-log=slave-relay-log-bin
relay-log-index=slave-relay-log-bin.index