解決高併發的資料庫主從複製結構
高併發的企業架構
在高併發下企業架構主要是由叢集支撐的。本文主要是討論主從複製的資料庫叢集搭建。
主從複製的資料庫叢集架構
詳解:
資料庫的操作主要分為兩種,聯機事務處理(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