1. 程式人生 > >Mysql資料庫的主從複製讀寫分離搭建過程與原理介紹

Mysql資料庫的主從複製讀寫分離搭建過程與原理介紹

首先說明一下在搭建Mysql資料庫的主從複製與讀寫分離的過程中十分容易出錯,所以在搭建的過程中一定要謹慎注重每一步的細節。

  • 傳統資料庫中存在的問題

1.傳統資料庫設計時,如果伺服器宕機,將不能為使用者提供服務導致整個系統崩潰.

2.如果資料庫突然宕機.會導致資料丟失.

3.為了防止資料丟失,要進行實時備份

冷備份:通過資料庫工具進行人為的匯出sql.但是手動匯出資料可能在中間節點宕機時也會造成資料庫的丟失.

熱備份:

通過程式進行控制,定時轉儲.儘可能的保證資料的完整性.但是還有大量的問題.

  • 資料庫主從複製

說明:

由於傳統的資料庫設計在資料備份時,不能滿足業務條件,可能會造成資料丟失,為了防止資料丟失採用實時備份

方式:Mysql主從複製技術

主從複製原理:

1.角色劃分:

主庫Master:主要進行的是資料的"更新操作"

從庫Slave: 實時備份主庫的更新資訊

二進位制日誌:實時記錄主庫的更新操作,並且形式二進位制碼.

中繼日誌:  儲存主庫的更新資訊

2.呼叫原理

1.當主庫更新資料後,會實時的寫入到二進位制日誌檔案中

2.從庫的IO執行緒,實時的監聽主庫的二進位制檔案,如果二進位制檔案傳送了改變則啟動執行緒進行讀取修改後的內容.

3.通過IO執行緒將讀取的二進位制檔案寫入到中繼日誌中.

4.Sql執行緒實時讀取中繼日誌中的訊息,進行資料庫的"更新操作"

  • 資料庫主從複製的搭建

1.克隆linux系統

2.linux系統的配置

固定LinuxIP地址:

  • 配置Linux資料庫環境

1.編輯指令碼環境

能夠快速跳轉到某一個資料夾

2.跳轉檔案

. Go

3.建立mysql資料夾

4.解壓mysql

5.安裝步驟

先安裝debugingo-->shared--->client--->server四個


5.啟動服務

service mysql start

6.設定使用者名稱和密碼

mysqladmin -u root password "root"

7.開啟3306埠號

iptables -I INPUT -p tcp --dport 3306 -jACCEPT

Service iptables stop   //關閉防火牆

8.開放埠生效

/etc/rc.d/init.d/iptables save      

可以不執行

9.檢視當前埠開放情況

/etc/rc.d/init.d/iptables status;


10.賦予登陸許可權

說明:許可權賦值的操作必須在mysql環境下執行

語法:

grant [許可權] on [資料庫名].[表名] to ['使用者名稱']@['web伺服器的ip地址'] identifiedby ['密碼'];

grantall on *.* to 'root'@'%' identified by 'root';

或者指定IP地址

grantall on *.* to 'root'@'192.168.1.103' identified by 'root';

11.通過工具遠端連線資料庫


12.開啟二進位制日誌檔案

/etc/my.cnf

    server-id=1      //唯一標識資料庫

log-bin=mysql-bin   //開啟二進位制日誌檔案

之後儲存退出

13.重新啟動服務

Service mysql   stop

service mysql start

14.檢視日誌檔案

/var/lib/mysql/   下有日誌檔案


  • 配置從機

1.將主機master克隆

2.固定從機的ip地址

3.修改從機mysql的序列號

目的:mysql完全的不同

由於Masql是克隆的,/var/lib/mysql/auto.cnf中有UUID對資料庫進行標識,所以需要進行修改

修改service-id

Service-id=2

4.啟動slave資料庫

5.查詢master狀態碼

6.為從節點掛載主機

/*配置註解主機名/埠號/使用者名稱/密碼 */

change master toMASTER_HOST='192.168.247.133',MASTER_PORT=3306,

MASTER_USER='root',MASTER_PASSWORD='root',

MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=120

/*啟動從服務*/

start slave

/*檢視狀態*/

show slave status;

如果出現兩個yes則表示載入成功

7.如果啟動失敗

需要從新啟動mysql,重新掛載

  • 資料庫的讀寫分離

說明:

由於資料庫沒有優化,會導致主資料庫的壓力較大.

策略:

如果是讀的操作,都訪問從資料庫.

如果是寫的操作.都訪問主資料庫.

介紹:

概述

Amoeba是一個以MySQL為底層資料儲存,並對應用提供MySQL協議介面的proxy。它集中地響應應用的請求,依據使用者事先設定的規則,將SQL請求傳送到特定的資料庫上執行。基於此可以實現負載均衡、讀寫分離、高可用性等需求。與MySQL官方的MySQL Proxy相比,作者強調的是amoeba配置的方便(基於XML的配置檔案,用SQLJEP語法書寫規則,比基於lua指令碼的MySQL Proxy簡單)。

Amoeba相當於一個SQL請求的路由器,目的是為負載均衡、讀寫分離、高可用性提供機制,而不是完全實現它們。使用者需要結合使用MySQL

Replication等機制來實現副本同步等功能。amoeba對底層資料庫連線管理和路由實現也採用了可插撥的機制,第三方可以開發更高階的策略類來替代作者的實現。這個程式總體上比較符合KISS原則的思想。

優勢

Amoeba主要解決以下問題:

a). 資料切分後複雜資料來源整合

b). 提供資料切分規則並降低資料切分規則給資料庫帶來的影響

c). 降低資料庫與客戶端連線

d). 讀寫分離路由

通過Amoeba實現讀寫分離

安裝:

1.需要依賴JDK

根據profile中的路徑.解壓JDK即可

2.配置jdk

3.安裝amoeba

4.檢視配置檔案

5.修改dbServer.xml

通過工具連線遠端客戶機


需要配置2項-3項

6.修改amoeba.xml

    1.預設埠號8066

    2.新增資料庫密碼

3.新增讀寫分離

4.指定棧空間

編輯launcher啟動檔案 分配記憶體空間

#配置jdk記憶體空間

DEFAULT_OPTS="-server -Xms256m -Xmx256m-Xss256k"

建議使用第二種

2.修改JVM.properties   適當的調整記憶體空間,否則將不會生效

JVM_OPTIONS="-server -Xms512m -Xmx1024m -Xss512k-XX:PermSize=16m -XX:MaxPermSize=96m"

5.啟動Amoeba

./launcher 執行啟動命名


6.開啟埠8066

iptables -I INPUT -p tcp --dport 8066 -jACCEPT

/etc/rc.d/init.d/iptables save    //讓埠生效

/etc/rc.d/init.d/iptables status  //檢視埠是否開啟

7.如果端口占用檢視那PID之後kill殺死

isof -i:8066 

java   4837 root   64u  IPv6 32545      0t0  TCP *:8066 (LISTEN)

Kill -9 4837