准备MySQL

  1. 启动MySQL服务器
  2. 连接MySQL服务器
  3. 如果连接不上先给用户授权,查看防火墙,开安全组

准备 MySQL完成主从复制

前提

MySQL 中间表怎么优化 mysql sharding中间件_分库分表

MySQL 中间表怎么优化 mysql sharding中间件_MySQL 中间表怎么优化_02


开启两个MySQL服务,一个作为主机,一个作为从机。

具体配置

  1. Master节点配置
  2. MySQL 中间表怎么优化 mysql sharding中间件_分库分表_03

  3. 其实主要在配置文件里加上server-id=100,log-bin=mysql-bin就可以了。其它的可选
    保证server_id是唯一的就可以,修改完配置文件之后一定要重启,否则修改无效
  4. Slave节点配置
  5. MySQL 中间表怎么优化 mysql sharding中间件_ShardingSphere_04

  6. 主从机的server_id不允许重复,要是唯一的
    依然要重启配置文件才可以生效
  7. 在master服务器授权slave服务器可以同步权限
  8. MySQL 中间表怎么优化 mysql sharding中间件_分库分表_05

  9. 查询master服务的bin-log文件名和位置
  10. MySQL 中间表怎么优化 mysql sharding中间件_Sharding JDBC_06

  11. slave进行关联master节点
  12. MySQL 中间表怎么优化 mysql sharding中间件_MySQL 中间表怎么优化_07

  13. 之前上面的语句之后,执行 start salve,然后执行show slave status\G查看slave状态,如果找到slave_IO_Running:Yes代表成功,如果是No就是不成功
  14. MySQL 中间表怎么优化 mysql sharding中间件_ShardingSphere_08

  15. 在slave节点上查看主从同步状态
  16. MySQL 中间表怎么优化 mysql sharding中间件_数据库中件间_09


  17. MySQL 中间表怎么优化 mysql sharding中间件_Sharding JDBC_10

  18. 主从复制测试
  19. MySQL 中间表怎么优化 mysql sharding中间件_MySQL 中间表怎么优化_11

主从复制相关问题排查

  1. 主从复制Connection问题


    一般来说就是master密码写错了
  2. Slave_SQL_Running:NO


    另一种方式解决

ShardingSphere的配置及读写分离

步骤

  1. 新建一个SpringBoot工程
    file–》new–》project–》spring initializr–》next–》java version:8;填写group,artifact–》next–》spring web、lombok、sql-MyBatis–》next–》finally
  2. MySQL 中间表怎么优化 mysql sharding中间件_分库分表_12

  3. 引入相关依赖
  4. MySQL 中间表怎么优化 mysql sharding中间件_MySQL 中间表怎么优化_13


  5. MySQL 中间表怎么优化 mysql sharding中间件_数据库中件间_14

  6. 定义配置application.yml
  7. MySQL 中间表怎么优化 mysql sharding中间件_分库分表_15


  8. MySQL 中间表怎么优化 mysql sharding中间件_数据库中件间_16


  9. MySQL 中间表怎么优化 mysql sharding中间件_数据库中件间_17

  10. 注意这里有个serverTimeznotallow=GMT;叫时区,日期在新增或者删除的时候会少8个小时,所以要修改成serverTimeznotallow=GMT%2b8;意思是加8个小时。这里的%2b是+号的意思。比如生日有时候会少一天,所以需要注意一下这里的时区。
  11. 创建数据库表,定义mapper,controller,entity
    entity
  12. MySQL 中间表怎么优化 mysql sharding中间件_MySQL 中间表怎么优化_18

  13. mapper
  14. MySQL 中间表怎么优化 mysql sharding中间件_分库分表_19


  15. MySQL 中间表怎么优化 mysql sharding中间件_ShardingSphere_20

  16. controller
  17. MySQL 中间表怎么优化 mysql sharding中间件_分库分表_21


  18. MySQL 中间表怎么优化 mysql sharding中间件_MySQL 中间表怎么优化_22

  19. 测试接口,读的时候是随机命中的,所以读的时候可以,但是写的时候出错了,报错如下:
  20. MySQL 中间表怎么优化 mysql sharding中间件_MySQL 中间表怎么优化_23

  21. 因为他找到三个资源ds1,ds2,ds3,不知道是要写哪个,所以需要配置默认的数据源:
  22. MySQL 中间表怎么优化 mysql sharding中间件_ShardingSphere_24

  23. 配置了这个默认数据源之后,主从复制才是真正的开启

MySQL 中间表怎么优化 mysql sharding中间件_数据库中件间_25


这里是设置了主库和从库使用的数据源,使用轮询的机制使用数据源ds2,ds3进行读取,不再是只使用随机数据源进行读取。改变了之前默认的随机使用数据源读取数据的方式。

MySQL分库分表原理
  1. 为什么要分库分表
  2. MySQL 中间表怎么优化 mysql sharding中间件_ShardingSphere_26


  3. MySQL 中间表怎么优化 mysql sharding中间件_数据库中件间_27

  4. 分库分表
  5. MySQL 中间表怎么优化 mysql sharding中间件_MySQL 中间表怎么优化_28

  6. 不停机分库分表数据迁移
  7. MySQL 中间表怎么优化 mysql sharding中间件_Sharding JDBC_29

  8. 小结
  9. MySQL 中间表怎么优化 mysql sharding中间件_ShardingSphere_30

ShardingSphere的分库和分表(解决高并发和数据量大的问题)

1. 分库分表的方式

MySQL 中间表怎么优化 mysql sharding中间件_ShardingSphere_31

2. 逻辑表

MySQL 中间表怎么优化 mysql sharding中间件_ShardingSphere_32

3. 分库分表数据节点-actual-data-nodes

MySQL 中间表怎么优化 mysql sharding中间件_分库分表_33

MySQL 中间表怎么优化 mysql sharding中间件_分库分表_34

4. 分库分表5中分片策略

MySQL 中间表怎么优化 mysql sharding中间件_MySQL 中间表怎么优化_35


MySQL 中间表怎么优化 mysql sharding中间件_Sharding JDBC_36


MySQL 中间表怎么优化 mysql sharding中间件_Sharding JDBC_37

第一二种

MySQL 中间表怎么优化 mysql sharding中间件_MySQL 中间表怎么优化_38


MySQL 中间表怎么优化 mysql sharding中间件_数据库中件间_39


MySQL 中间表怎么优化 mysql sharding中间件_数据库中件间_40


MySQL 中间表怎么优化 mysql sharding中间件_数据库中件间_41

第三种

MySQL 中间表怎么优化 mysql sharding中间件_分库分表_42


MySQL 中间表怎么优化 mysql sharding中间件_MySQL 中间表怎么优化_43


MySQL 中间表怎么优化 mysql sharding中间件_ShardingSphere_44


MySQL 中间表怎么优化 mysql sharding中间件_Sharding JDBC_45


MySQL 中间表怎么优化 mysql sharding中间件_Sharding JDBC_46


MySQL 中间表怎么优化 mysql sharding中间件_Sharding JDBC_47

第四第五种(了解)

MySQL 中间表怎么优化 mysql sharding中间件_分库分表_48

springboot实现分库分表实战

需求

MySQL 中间表怎么优化 mysql sharding中间件_MySQL 中间表怎么优化_49

数据库

MySQL 中间表怎么优化 mysql sharding中间件_ShardingSphere_50

MySQL 中间表怎么优化 mysql sharding中间件_分库分表_51

MySQL 中间表怎么优化 mysql sharding中间件_数据库中件间_52

application.yml配置

MySQL 中间表怎么优化 mysql sharding中间件_MySQL 中间表怎么优化_53

application-sub.yml配置

MySQL 中间表怎么优化 mysql sharding中间件_MySQL 中间表怎么优化_54


MySQL 中间表怎么优化 mysql sharding中间件_MySQL 中间表怎么优化_55

实体类

MySQL 中间表怎么优化 mysql sharding中间件_数据库中件间_56


根据实体类可以建数据库

UserMapper

MySQL 中间表怎么优化 mysql sharding中间件_分库分表_57

test类

MySQL 中间表怎么优化 mysql sharding中间件_MySQL 中间表怎么优化_58


注意

MySQL 中间表怎么优化 mysql sharding中间件_Sharding JDBC_59


要把id主键返回的时候,可以加上注解@Options语句如下:

@Options(userGeneratedkeys=true,keyColumn="userid",keyProperty="userid")注意:主键列不用varchar类型,用long类型,主键不要自增长

但是如果这里使用了UUID那么就得用varchar类型。

MySQL 中间表怎么优化 mysql sharding中间件_ShardingSphere_60

事务管理

MySQL 中间表怎么优化 mysql sharding中间件_ShardingSphere_61


MySQL 中间表怎么优化 mysql sharding中间件_MySQL 中间表怎么优化_62


MySQL 中间表怎么优化 mysql sharding中间件_ShardingSphere_63


MySQL 中间表怎么优化 mysql sharding中间件_ShardingSphere_64


如果是没有跨库,那么直接使用事务注解@Transaction就可以了,但是如果是跨库,往往有远程调用,就出现了分布式场景了,仅有事务注解是无法完成事务回滚的。需要添加依赖,然后代码中加入以下代码:

MySQL 中间表怎么优化 mysql sharding中间件_分库分表_65

总结

MySQL 中间表怎么优化 mysql sharding中间件_分库分表_66


MySQL 中间表怎么优化 mysql sharding中间件_Sharding JDBC_67


MySQL 中间表怎么优化 mysql sharding中间件_Sharding JDBC_68