Mysql 主从基础概念

Mysql的边界

单台msql的边界就是单台服务器的的性能,包括内存、cpu、硬盘、I/O,因为最终的数据库载体还是文件,解决方案

  1. 加大单台的性能
  2. 多台服务器提供服务

从性价比和冗余性都会选择第二种方案

mysql的读写分离

为什么采用读写分离?

sql语句最常用的就是增删改查,进而再分为2个类型查是读数据,而增删改是对数据的写,通常情况下查询是比写操作频繁而且需要时间长,而写的需求相应的小很多,这样有助于分析问题和解决问题

1、应用程序直接对接多台mysql服务器
在这里插入图片描述

缺点:数据库和应用服务是紧耦合
优点:节省服务器资源
应用程序需要面对多台数据库和读写语句判断,给编程带来了不便

2、基于mysql的中间件(mycat)

利用mysql中间件或者叫代理的方式应用程序只需要面对中间件,而需要管理后端多台mysql
在这里插入图片描述

优点:数据库和应用服务是松耦合
1、应用只需要面对中间件,而不是多台服务器
2、数据库可以实现冗余和高性能
3、读写语句判断路由交给了mycat

mysql主从复制

MySQL Binlog

  • Binlog是mysql的二进制日志文件,记录了所有的 DDL 和 DML 语句,主要是用来备份和恢复使用(默认没有开启)

在这里插入图片描述

  1. 主服务器上面的任何修改都会通过自己的 I/O tread(I/O 线程)保存在二进制日志 Binary log 里面
  2. 从服务器上面也启动一个 I/O thread,通过配置好的用户名和密码, 连接到主服务器上面请求读取二进制日志,然后把读取到的二进制日志写到本地的一个Realy log(中继日志)里面
  3. 从服务器上面同时开启一个 SQL thread 定时检查 Realy log(这个文件也是二进制的),如果发现有更新立即把更新的内容在本机的数据库上面执行一遍

这里的主从同步是基于异步的,而不是同步的,因为主服务器写入后直接就会回复应用
缺点:读库会有延迟,可能存在数据丢失(从库),对于时效性不是很强的情况下适用
解决办法:基于PXC集群实现数据实时同步

mysql性能提升

  • 1主N从架构
  • Mycat-垂直分库
  • Mycat-水平分表

1主N从架构

  • M–S1–S2 级联复制

在这里插入图片描述

master和slave1需要开启二进制日志
slave1需要 log-slave-updates=1,让第一台传过来relay日志记录到自己的二进制日志

  • M–S1并联复制
  • M–S2并联复制
    在这里插入图片描述

master需要开启二进制日志

总结:级联复制加大了数据同步延迟和丢失的风险,但是降低了主节点性能压力(并联相反)

Mycat-垂直分库

前提:不同主机上的mysql表关联是无法建立的

提高数据库的高并发性能
对数据库进行拆分,从而提高数据库写入能力

垂直分库就是把一个主机上的大库里的表分成多个库放到多台服务器上
在这里插入图片描述原则:基于前提的原因,分库要基于模块化,也就是功能分库,这样每个功能之间是没有关联的

Mycat-水平分表

水平分表是基于表进行拆分多个表存储到多台服务器上,一般单个数据库的表记录1000w条就是极限了,查询速度就很慢了

提高表的查询性能
分表能够解决单表数据量过大带来的查询效率下降的问题

  • 分表比分库复杂,因为关联的表也要进行拆分
  • 以字段为依据,按照一定策略(hash、range等),将一个表中的数据拆分到多个表中
    在这里插入图片描述
©️2020 CSDN 皮肤主题: 1024 设计师:上身试试 返回首页