一、有時候經常會遇到配置資料庫主從主從分離是存儲和通路資料,就需要配置和修改代碼了,mysql安裝我就不說了
二、 主伺服器master的配置
1. vim /etc/my.cnf
2. 重新開機服務 service mysqld restart
3. 建立一個使用者
4. 賦予使用者的權限(mysql之使用者密碼)
三、 從伺服器slaver的配置
進入到my.cnf下面 vim /etc/my.cnf
2. 另一種重新開機MySQL服務:
3. 連接配接到master上
4. 從庫上檢視同步狀态
發現有錯誤
解決:
stop slave 停止主從同步
vim /etc/my.cnf
搜尋server-id發現配置檔案已經預設配置了一個,需要删除檔案自己預設配置的
重新開機服務
打開主從同步start slave
檢視狀态:發現已經沒有錯誤了
四、 代碼層讀寫分離
就是說讀的時候到從資料庫讀,修改的時候到主資料庫修改
1. 建立一個包
2. 配置抽象路由資料源DynamicDataSource
packagecom.itwang.o2o.dao.split;importorg.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
//繼承抽象路由資料源public class DynamicDataSource extendsAbstractRoutingDataSource {
@OverrideprotectedObject determineCurrentLookupKey() {returnDynamicDataSourceHolder.getDBType();
}
}
3. 配置DynamicDataSourceHolder
packagecom.itwang.o2o.dao.split;importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;public classDynamicDataSourceHolder {private static Logger logger = LoggerFactory.getLogger(DynamicDataSourceHolder.class);//ThreadLocal保證線程安全
private static ThreadLocal contextHolder = new ThreadLocal();public static final String DB_MASTER = "master";public static final String DB_SLAVE = "slave";
public staticString getDBType(){
String db=contextHolder.get();if (db == null){
db=DB_MASTER;
}returndb;
}
public static voidsetDBType(String str){
logger.debug("所使用的資料源為:" +str);
contextHolder.set(str);
}
public static voidclearDBType(){
contextHolder.remove();
}
}
4. 配置mybatis的攔截器,DynamicDataSourceInterceptor
packagecom.itwang.o2o.dao.split;importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;public classDynamicDataSourceHolder {private static Logger logger = LoggerFactory.getLogger(DynamicDataSourceHolder.class);//ThreadLocal保證線程安全
private static ThreadLocal contextHolder = new ThreadLocal();public static final String DB_MASTER = "master";public static final String DB_SLAVE = "slave";
public staticString getDBType(){
String db=contextHolder.get();if (db == null){
db=DB_MASTER;
}returndb;
}
public static voidsetDBType(String str){
logger.debug("所使用的資料源為:" +str);
contextHolder.set(str);
}
public static voidclearDBType(){
contextHolder.remove();
}
}
5.配置SqlMapConfig.xml
/p>
PUBLIC"-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
6. 配置dao層資料源配置檔案
6.1 原始配置
6.2 修改後的配置
7. 配置資料庫參數檔案配置db.properties(這裡我主從庫配置的一樣友善測試)
jdbc.driver=com.mysql.jdbc.Driver
jdbc.master.url=jdbc:mysql://localhost:3306/o2o?characterEncoding=UTF-8
jdbc.slave.url=jdbc:mysql://localhost:3306/o2o?characterEncoding=UTF-8
jdbc.username=root
jdbc.password=root