一、有时候经常会遇到配置数据库主从主从分离是存储和访问数据,就需要配置和修改代码了,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";/*** 获取线程DBType
*@return
*/
public staticString getDBType(){
String db=contextHolder.get();if (db == null){
db=DB_MASTER;
}returndb;
}/*** 设置线程DBType
*@paramstr*/
public static voidsetDBType(String str){
logger.debug("所使用的数据源为:" +str);
contextHolder.set(str);
}/*** 清空ThreadLocal对象*/
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";/*** 获取线程DBType
*@return
*/
public staticString getDBType(){
String db=contextHolder.get();if (db == null){
db=DB_MASTER;
}returndb;
}/*** 设置线程DBType
*@paramstr*/
public static voidsetDBType(String str){
logger.debug("所使用的数据源为:" +str);
contextHolder.set(str);
}/*** 清空ThreadLocal对象*/
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