Sharding-JDBC实现读写分离

一、前言

二 、windos下mysql主从复制

     环境准备

     初始化数据库

      配置my.ini

三、与Spring结合

 

前言

Sharding-JDBC实现读写分离,参考黑马程序员的视频,再结合4.x的官网介绍,视频中未解决分布式事务,在现版本已有解决方案。这种透明化的处理,配置好数据库分库分表规则就可以使用,真是一个非常优秀的中间件。最难的还是的数据库设计。Sharding-JDBC可以完美代替mycat,整个shardingsphere的生态圈也在不断完善 ,支持异构语言。

执行流程: SQL解析 => 查询优化 => SQL路由 => SQL改写 => SQL执行 => 结果归并

 

深入Sharding-JDBC分库分表

完整视频:http://yun.itheima.com/course/580.html?2005sxkqq

配套资料:https://pan.baidu.com/s/1ChL3wUx89x9GDGuEe1wscg 密码:3hwz

b站地址:https://www.bilibili.com/video/BV1jJ411M78w?p=1

shardingsphere.官网:https://shardingsphere.apache.org/document/legacy/4.x/document/cn/manual/sharding-jdbc/usage/read-write-splitting/

 

windos下mysql主从复制

环境准备

官网下载解压版本 https://downloads.mysql.com/archives/community/

建议下载5.7.22这个版本,计划配置一主一从,版本需保持一致,这个版本没有初始密码,解压即用。

 

初始化数据库

首先初始化主库。如果使用已有的mysql作为主库,可以复制原数据库作为从库,从库是从主库复制过来的,因此里面的数据完全一致,可使用原来的账号、密码登录。。

shift+鼠标右键,快速进入cmd数据库目录

此命令初始化数据库

E:\mysql5.7.22-master\bin>mysqld --initialize-insecure

或者 生成windows服务,使用net start [主库服务名]

E:\mysql5.7.22-master\bin>mysqld install mysqls1 ‐‐defaults‐file="D:\mysql5.7.22-master\my.ini"

 

配置my.ini

修改主、从库的配置文件(my.ini),新增内容如下:

主库:

[mysqld]
#开启日志
log‐bin = mysql‐bin
#设置服务id,主从不能一致
server‐id = 1
#设置需要同步的数据库
binlog‐do‐db=test
#屏蔽系统库同步
binlog‐ignore‐db=mysql
binlog‐ignore‐db=information_schema
binlog‐ignore‐db=performance_schema

从库:

[mysqld]
#开启日志
log‐bin = mysql‐bin
#设置服务id,主从不能一致
server‐id = 2
#设置需要同步的数据库
replicate_wild_do_table=test.%
#屏蔽系统库同步
replicate_wild_ignore_table=mysql.%
replicate_wild_ignore_table=information_schema.%
replicate_wild_ignore_table=performance_schema.%

重启主库和从库:

如果使用的mysqld --initialize-insecure的命令,需要在bin目录去手动启动mysqld.exe

net start [主库服务名]

net start [从库服务名mysqls1]

复制会出现问题,主从MySQL下的数据(data)目录下有个文件auto.cnf,文件中定义了uuid,要保证主从数据库实例的uuid不一样,建议直接删除掉,重启服务后将会重新生成。

授权主从复制专用账号

#切换至主库bin目录,登录主库
mysql ‐h localhost ‐uroot ‐p
#授权主备复制专用账号
GRANT REPLICATION SLAVE ON *.* TO 'db_sync'@'%' IDENTIFIED BY 'db_sync';
#刷新权限
FLUSH PRIVILEGES;
#确认位点 记录下文件名以及位点
show master status;

 

设置从库向主库同步数据、并检查链路

#切换至从库bin目录,登录从库
mysql ‐h localhost ‐P3307 ‐uroot ‐p
#先停止同步
STOP SLAVE;
#修改从库指向到主库,使用上一步记录的文件名以及位点
CHANGE MASTER TO
master_host = 'localhost',
master_user = 'db_sync',
master_password = 'db_sync',
master_log_file = 'mysql‐bin.000002',
master_log_pos = 154;
#启动同步
START SLAVE;
#查看从库状态Slave_IO_Runing和Slave_SQL_Runing都为Yes说明同步成功,如果不为Yes,请检查error_log,然后
排查相关异常。
show slave status\G
#注意 如果之前此备库已有主库指向 需要先执行以下命令清空
STOP SLAVE IO_THREAD FOR CHANNEL '';
reset slave all;

 

与Spring结合

引入Maven依赖

<!-- for spring boot -->
<dependency>
    <groupId>org.apache.shardingsphere</groupId>
    <artifactId>sharding-jdbc-spring-boot-starter</artifactId>
    <version>${sharding-sphere.version}</version>
</dependency>

<!-- for spring namespace -->
<dependency>
    <groupId>org.apache.shardingsphere</groupId>
    <artifactId>sharding-jdbc-spring-namespace</artifactId>
    <version>${sharding-sphere.version}</version>
</dependency>

基于Spring boot的规则配置

spring.shardingsphere.datasource.names=master,slave0 #选择druid连接池 #spring.shardingsphere.datasource.s1.type = com.alibaba.druid.pool.DruidDataSource spring.shardingsphere.datasource.master.type=org.apache.commons.dbcp.BasicDataSource spring.shardingsphere.datasource.master.driver-class-name=com.mysql.jdbc.Driver spring.shardingsphere.datasource.master.url=jdbc:mysql://localhost:3306/test spring.shardingsphere.datasource.master.username=root spring.shardingsphere.datasource.master.password= spring.shardingsphere.datasource.slave0.type=org.apache.commons.dbcp.BasicDataSource spring.shardingsphere.datasource.slave0.driver-class-name=com.mysql.jdbc.Driver spring.shardingsphere.datasource.slave0.url=jdbc:mysql://localhost:3307test spring.shardingsphere.datasource.slave0.username=root spring.shardingsphere.datasource.slave0.password= spring.shardingsphere.masterslave.name=ms spring.shardingsphere.masterslave.master-data-source-name=master spring.shardingsphere.masterslave.slave-data-source-names=slave0 #第二种配置 主从关系 spring.shardingsphere.sharding.master-slave-rules.ms.master-data-source-name=master spring.shardingsphere.sharding.master-slave-rules.ms.slave-data-source-names=slave0 spring.shardingsphere.props.sql.show=true

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值