在項目中使用mysql數據庫,全部的增刪改查操做都在主庫處理,隨着查詢訪問量的增長,單庫處理的壓力驟增,爲了防止主庫故障,使用一主多從的方式,經過讀寫分離,把全部的查詢處理都放到從服務器上,減小單點故障致使整個服務掛掉的狀況。mysql
(1)mysql配置數據庫鏈接信息spring
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切面,統一設置須要的方法爲可讀模式。sql
@Transactional(isolation=Isolation.DEFAULT,propagation = Propagation.REQUIRED,readOnly = true)
(3)測試是否真的實現了讀寫分離 使用命令SHOW FULL PROCESSLIST查看從數據庫是否有指定服務器的鏈接信息。 一主多從,從主庫向從庫進行數據同步,修改從數據庫的指定數據,查詢修改的數據來確認數據是否來自從庫。數據庫
實現思想:構建一個主庫的鏈接池1,構建一個從庫的鏈接池2,使用spring aop對service層的處理作一個切面,系統定義以query,get和find等開頭的方法爲讀處理,使用鏈接池2,從從庫中獲取數據;其餘的開頭的方法默認使用鏈接池1。 參考文章:服務器
http://blog.csdn.net/jack85986370/article/details/51559232負載均衡
阿里的mycat和360的atlas能夠實現分庫分表,讀寫分離和負載均衡等功能,對應用層無感知,和正常鏈接數據庫沒有區別,耦合性較小。測試
在項目中使用ReplicationDriver驅動簡單實現了讀寫分離,若是數據量超大,並且要作mysql的負載均衡,則要用到中間件來作一層代理來實現。 你們能夠關注個人公衆號:不知風在何處,相互溝通,共同進步。url