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=24.啟動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