mysql读写分离代码层实现_代码层读写分离实现

一、有时候经常会遇到配置数据库主从主从分离是存储和访问数据,就需要配置和修改代码了,mysql安装我就不说了

二、  主服务器master的配置

1. vim /etc/my.cnf

3910e2d10595ee962defc87c84457cd2.png

2. 重启服务 service mysqld restart

6f443d14a8c61f3df52c11b7cd628769.png

3. 创建一个用户

257f393dfdeb38fc0dfa7089b6f9b2a2.png

4. 赋予用户的权限(mysql之用户密码)

06c58d91ec7f70a5b46728252b8fde59.png

三、 从服务器slaver的配置

进入到my.cnf下面 vim /etc/my.cnf

da387f4a7d54429fe6f41b32f16d0f53.png

2. 另一种重启MySQL服务:

9b1360808572cdb24357ed83607ffd74.png

3. 连接到master上

6291ac50dd73aa759949b0d76966a01e.png

4. 从库上查看同步状态

d45e7a2ce3a4f5c5dd0fd59d22c7698d.png

1e40473667c4dd0bfa39b7e1df6442f2.png

发现有错误

解决:

stop slave 停止主从同步

vim /etc/my.cnf

搜索server-id发现配置文件已经默认配置了一个,需要删除文件自己默认配置的

重启服务

打开主从同步start slave

查看状态:发现已经没有错误了

四、 代码层读写分离

就是说读的时候到从数据库读,修改的时候到主数据库修改

1. 创建一个包

e178786781ca8bcbf44cd3d3c9c4c0b9.png

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值