mysql數據庫實現讀寫分離

1.mysql讀寫分離背景

在項目中使用mysql數據庫,全部的增刪改查操做都在主庫處理,隨着查詢訪問量的增長,單庫處理的壓力驟增,爲了防止主庫故障,使用一主多從的方式,經過讀寫分離,把全部的查詢處理都放到從服務器上,減小單點故障致使整個服務掛掉的狀況。mysql

2.mysql讀寫分離的實現方式

  1. 使用mysql的com.mysql.jdbc.ReplicationDriver驅動spring

  2. 構造不一樣的數據庫鏈接池,在service層經過判斷方法的讀寫類型,讀方法使用從數據庫鏈接池,寫方法使用主數據庫鏈接池sql

  3. 使用阿里的mycat或360的Atlas來實現分庫分表,讀寫分離和負載均衡等處理。數據庫

3.使用ReplicationDriver驅動實現讀寫分離

(1)mysql配置數據庫鏈接信息服務器

url=jdbc:mysql:replication://192.168.2.101:3306,192.168.2.102:3306/test
username=*****
password=*****
driver=com.mysql.jdbc.ReplicationDriver

(2)設置事務不自動提交,而且事務只讀負載均衡

使用spring的事務處理比較簡單,使用註解@Transactional,把readOnly設置true,或者寫一個aop切面,統一設置須要的方法爲可讀模式。
@Transactional(isolation=Isolation.DEFAULT,propagation = Propagation.REQUIRED,readOnly = true)

(3)測試是否真的實現了讀寫分離測試

使用命令SHOW FULL PROCESSLIST查看從數據庫是否有指定服務器的鏈接信息。
一主多從,從主庫向從庫進行數據同步,修改從數據庫的指定數據,查詢修改的數據來確認數據是否來自從庫。

4.構造不一樣的鏈接池,經過程序自主的確認訪問哪一個數據庫

實現思想:構建一個主庫的鏈接池1,構建一個從庫的鏈接池2,使用spring aop對service層的處理作一個切面,系統定義以query,get和find等開頭的方法爲讀處理,使用鏈接池2,從從庫中獲取數據;其餘的開頭的方法默認使用鏈接池1。url

參考文章:

http://blog.csdn.net/jack8598....net

5.使用阿里的mycat或360的Atlas來實現讀寫分離

阿里的mycat和360的atlas能夠實現分庫分表,讀寫分離和負載均衡等功能,對應用層無感知,和正常鏈接數據庫沒有區別,耦合性較小。代理

在項目中使用ReplicationDriver驅動簡單實現了讀寫分離,若是數據量超大,並且要作mysql的負載均衡,則要用到中間件來作一層代理來實現。你們能夠關注個人公衆號:不知風在何處,相互溝通,共同進步。

相關文章
相關標籤/搜索