MySqL主从复制&读写分离
1. MySQL 主从复制是指数据可以从一个MySQL数据库服务器主节点复制到一个或多个从节点。
2. MySQL 默认采用异步复制方式,这样从节点不用一直访问主服务器来更新自己的数据,数据的新可以在远程连接上进行,从节点可以复制主数据库中的所有数据库或者特定的数据库,或者特定的表。
1.主从复制主要用途:
读写分离:防止高并发
MySQL主从形式主要分为如下几种:
1. 一主一从
2. 一主多从,提高系统读性能
3. 多主一从(从5.7开始支持)
4. 双主复制
5. 级联复制
2、主从复制原理
MySQL主从复制涉及到三个线程,一个运行在主节点(log dump thread),其余两个(I/O thread, SQLthread)运行在从节点:/
/流程描述:
1. 当 客户端进行insert、update、delete操作时,master 节点会按顺序写入到二进制日志 binary log 中。
2. 只要有一个 salve 连接 master,master 就会创建一个 binary log dump thread。
3. 当 master 节点的 binary log 发生变化时, binary log dump thread 会通知所有salve节点,并将
相应的 binary log 内容推送给slave节点。
4. I/O thread 接收到 binary log 内容后,将内容写入到本地的 relay log 中。
5. SQL thread读取I/O thread 写入的 relay log,并且根据 relay log 的内容对从数据库做对应的操作。
`三个线程作用如下:`
1、主节点 binary log dump thread 作用
当从节点连接主节点时,主节点会创建一个log dump 线程,用于发送bin-log的内容。在读取bin-log中
的操作时,此线程会对主节点上的bin-log加锁,当读取完成发动给从节点之前,锁会被释放。
2、从节点I/O thread 作用
当从节点上执行start slave命令之后,从节点会创建一个I/O线程用来连接主节点,请求主库中更新的
bin-log。I/O线程接收到主节点binlog dump 进程发来的更新之后,保存在本地relay-log中。
3、从节点SQL thread 作用
SQL线程负责读取relay log中的内容,解析成具体的操作并执行,最终保证主从数据的一致性。
二、中间件框架:
1. Sharding-JDBC
1.是当当网,实现主从复制与读写分离的框架
2. `依赖`:
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>sharding-jdbc-spring-boot-starter</artifactId>
<version>4.0.0-RC1</version>
</dependency>
3.配置yml
三、读写分离&分库分表:
读写分离&分库分表:都是为了解决高并发,大数据访问带来的问题
`分库`:主要解决的是并发量大的问题。通过增加数据库实例的方式来提供更多的可用数据库链接,从而提升系统的并发度
`分表`:主要解决的是数据量大的问题。通过将数据拆分到多张表中,来减少单表的数据量,从而提升查询速度
`既分库又分表`:当你的数据库链接也不够了,并且单表数据量也很大导致查询比较慢的时候,就需要做既分库又分表了
2.分库分表原理:
`1、水平拆分`
1. 同一个表的数据拆到不同的库不同的表中。可以根据时间、地区或某个业务键维度,也可以通过hash进行拆分,最后通过路由访问到具体的数据。
2. 拆分后的每个表结构保持一致
`2、垂直拆分`
1. 就是把一个有很多字段的表给拆分成多个表,或者是多个库上去。
2. 每个库表的结构都不一样,每个库表都包含部分字段。
3. 一般来说,可以根据业务维度进行拆分,如订单表可以拆分为订单、订单支持、订单地址、订单商品、订单扩展等表;
4. 也可以根据数据冷热程度拆分,20%的热点字段拆到一个表,80%的冷字段拆到另外一个表
3.步骤:
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/188603.html