之前叫Sharding JDBC,现在叫ShardingSphere
准备MySQL
- 启动MySQL服务器
- 连接MySQL服务器
- 如果连接不上先给用户授权,查看防火墙,开安全组
准备 MySQL完成主从复制
前提
开启两个MySQL服务,一个作为主机,一个作为从机。
具体配置
-
Master节点配置
其实主要在配置文件里加上server-id=100
,log-bin=mysql-bin
就可以了。其它的可选
保证server_id是唯一的就可以,修改完配置文件之后一定要重启,否则修改无效 -
Slave节点配置
主从机的server_id不允许重复,要是唯一的
依然要重启配置文件才可以生效 -
在master服务器授权slave服务器可以同步权限
-
查询master服务的bin-log文件名和位置
-
slave进行关联master节点
之前上面的语句之后,执行start salve
,然后执行show slave status\G
查看slave状态,如果找到slave_IO_Running:Yes
代表成功,如果是No就是不成功
-
在slave节点上查看主从同步状态
-
主从复制测试
主从复制相关问题排查
- 主从复制Connection问题
一般来说就是master密码写错了
- Slave_SQL_Running:NO
另一种方式解决
ShardingSphere的配置及读写分离
步骤
-
新建一个SpringBoot工程
file–》new–》project–》spring initializr–》next–》java version:8;填写group,artifact–》next–》spring web、lombok、sql-MyBatis–》next–》finally
-
引入相关依赖
-
定义配置application.yml
注意这里有个serverTimezone=GMT;叫时区,日期在新增或者删除的时候会少8个小时,所以要修改成serverTimezone=GMT%2b8;意思是加8个小时。这里的%2b是+号的意思。比如生日有时候会少一天,所以需要注意一下这里的时区。 -
创建数据库表,定义mapper,controller,entity
entity
mapper
controller
-
测试接口,读的时候是随机命中的,所以读的时候可以,但是写的时候出错了,报错如下:
因为他找到三个资源ds1,ds2,ds3,不知道是要写哪个,所以需要配置默认的数据源:
配置了这个默认数据源之后,主从复制才是真正的开启
这里是设置了主库和从库使用的数据源,使用轮询的机制使用数据源ds2,ds3进行读取,不再是只使用随机数据源进行读取。改变了之前默认的随机使用数据源读取数据的方式。
MySQL分库分表原理
-
为什么要分库分表
-
分库分表
-
不停机分库分表数据迁移
-
小结
ShardingSphere的分库和分表(解决高并发和数据量大的问题)
1. 分库分表的方式
2. 逻辑表
3. 分库分表数据节点-actual-data-nodes
4. 分库分表5中分片策略
第一二种
第三种
第四第五种(了解)
springboot实现分库分表实战
需求
数据库
application.yml配置
application-sub.yml配置
实体类
根据实体类可以建数据库
UserMapper
test类
注意
要把id主键返回的时候,可以加上注解@Options语句如下:
@Options(userGeneratedkeys=true,keyColumn="userid",keyProperty="userid")
注意:主键列不用varchar类型,用long类型,主键不要自增长
但是如果这里使用了UUID那么就得用varchar类型。
事务管理
如果是没有跨库,那么直接使用事务注解@Transaction
就可以了,但是如果是跨库,往往有远程调用,就出现了分布式场景了,仅有事务注解是无法完成事务回滚的。需要添加依赖,然后代码中加入以下代码:
总结
future/task