准备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
- 注意这里有个serverTimeznotallow=GMT;叫时区,日期在新增或者删除的时候会少8个小时,所以要修改成serverTimeznotallow=GMT%2b8;意思是加8个小时。这里的%2b是+号的意思。比如生日有时候会少一天,所以需要注意一下这里的时区。
- 创建数据库表,定义mapper,controller,entity
entity - mapper
- controller
- 测试接口,读的时候是随机命中的,所以读的时候可以,但是写的时候出错了,报错如下:
- 因为他找到三个资源ds1,ds2,ds3,不知道是要写哪个,所以需要配置默认的数据源:
- 配置了这个默认数据源之后,主从复制才是真正的开启
这里是设置了主库和从库使用的数据源,使用轮询的机制使用数据源ds2,ds3进行读取,不再是只使用随机数据源进行读取。改变了之前默认的随机使用数据源读取数据的方式。
- 为什么要分库分表
- 分库分表
- 不停机分库分表数据迁移
- 小结
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
就可以了,但是如果是跨库,往往有远程调用,就出现了分布式场景了,仅有事务注解是无法完成事务回滚的。需要添加依赖,然后代码中加入以下代码: