精华内容
下载资源
问答
  • mysql架构
    千次阅读
    2022-03-21 14:02:36


    前言

    对于大多数中小企业来说Mysql可能是他们最倾向的数据库,包括大公司也有很多使用的是Mysql,因为Mysql是免费开源的、体积小使用简单,而且拥有易扩展等特性。但是你对Mysql的了解有多少呢?仅仅是几个SQL语句吗?如果想要自己搭建的数据库的性能更进一步肯定需要对Mysql的底层逻辑有一些简单的认知的,这样才能根据项目情况搭建更加优秀的数据库系统,本文简单的讲解了Mysql的一些基本架构情况,让大家对Mysql有个系统性的认知。

    一、Mysql架构简介

    在这里插入图片描述
    根据Mysql5官网文档中的说明,Mysql从上到下可以分为:网络连接层、服务层、存储引擎层和系统文件层。

    网络连接层

    网络连接层中主要是客户端连接器,我们可以通过客户端连接器建立与Mysql的连接,客户端连接器支持目前所有主流的编程语言和技术,例如常见的JAVA、C语言、Python以及.NET等编程语言。

    服务层

    Mysql的服务层主要分为连接池、系统管理和控制工具、SQL接口、解析器、查询优化器和缓存六个部分。

    1. 连接池: 连接池不用多说了,大家都了解,类似于线程池的东西,负责存储和管理客户端与数据库之间的连接。
    2. 系统管理和控制工具: 系统管理和控制工具主要用来做备份恢复、安全管理和集群管理等操作的。
    3. SQL接口: SQL接口是用来接收客户端发送的SQL命令,并且返回执行后的结果的,这就好比是Controller。
    4. 解析器: 解析器主要负责将请求的SQL解析为语法树,然后根据Mysql中的规则检查语法树是否合法。
    5. 查询优化器: 当解析器验证语法树没有问题后就到了查询优化器,查询优化器会将其转化为多个执行计划,并且选择其中最优的计划然后交由存储引擎执行。
    6. 缓存: 缓存就不用说了大家都知道干啥的,就是执行了SQL语句将查询结果放到缓存中,下次查询先到缓存中去获取,获取不到再让存储引擎去查。

    存储引擎层

    存储引擎层主要负责执行Mysql中的计划,包括DDL对表的操作和DML对数据的操纵等,其实这就好比Dao层,前面的都是逻辑准备处理,到了这里真正的执行命令去操作。Mysql提供了可拔插式的多种存储引擎,例如最常见的InnoDB和MyISAM。

    系统文件层

    系统文件层是数据库存储数据的地方,是文件的物理存储层,主要包含日志文件、数据文件、PID文件和Socket文件等。

    1. 日志文件:日志文件保存的是平常对数据库操作的日志,例如错误日志、查询日志、log bin二进制日志、慢查询日志等。可以通过对应的SQL命令查看相应的日志信息。
    2. 数据文件:数据文件就是平常存取的数据保存的文件,常见的字符集和校验规则的文件db.opt文件、InnoDB存放数据对应的文件,其中独享表空间使用.ibd文件来存放数据,没一张表对应一个.ibd文件,共享表空间使用.ibddata文件来存放,所有的表都共同使用一个或多个.ibdata文件。
    3. 配置文件:配置文件指的是保存对Mysql的配置信息的文件,比如我们安装Mysql的时候经常修改的my.cnf文件、myini文件等。

    二、Mysql执行流程

    根据MySQL的各个组件的功能介绍我们大致可以画出这样一个流程图来描述Mysql的执行流程。
    在这里插入图片描述

    1. 首先客户端与Mysql建立连接,Mysql中连接的通讯机制使用的是半双工模式(全双工可以同时发送接收信息,半双工同一时间只能发送或接收消息,单工只能发送或者只能接收数据)。
    2. 建立连接后先到缓存中去查询数据,如果有数据则直接返回。Mysql8中直接干掉了缓存,因为Mysql自带的缓存不怎么好用,而且很多项目都使用第三方缓存了。
    3. 如果缓存中不存在则把查询SQL发送到解析器,解析成解析树,解析生成的语法树会被预处理器进一步校验,通常我们写的SQL错误就是预处理器校验失败。
    4. 校验正常的解析树到达查询优化器生成最优的执行计划,在这期间查询优化器会根据很多优化策略优化语法树,可能生成多条执行计划,最终选择最优的执行计划。
    5. 生成的最优执行计划交由查询执行引擎去执行,此时查询执行引擎会根据SQL语句进行判断调用对应的API接口与存储引擎进行交互。
    6. 存储引擎根据传递进来的API接口去数据文件或缓存池中去查找对应的数据,并且返回。
    7. 查询执行引擎获取到对应的查询数据,根据数据库配置选择是否将数据保存到数据库缓存中,并且返回查询结果。

    三、InnoDB与MyISAM的区别

    在Mysql中一般常用的存储引擎也就是InnoDB和MyISAM了,其他的存储引擎可能根据项目情况有选择用的,但是MyISAM由于不支持事务所以在MySQL8同样被干掉了。但是在很对面试的时候还是会问到InnoDB与MyISAM的区别:

    • InnoDB支持事务和外键;MyISAM不支持事务和外键。
    • InnoDB支持行级锁;MyISAM支持表级锁。
    • InnoDB使用聚集索引;MyISAM使用非聚集索引。
    • InnoDB表对应两个文件:.frm表结构文件与.ibd数据文件;MyISAM表对应三个文件:.frm表结构文件,、MYD表数据文件和.MYI索引文件。
    更多相关内容
  • MySQL架构执行与SQL性能优化-MySQL高并发详解课程,课程的目标简单明确,核心就是MySQL的性能优化与高并发。课程内容进行了精华的浓缩,有四大内容主旨,MySQL架构与执行流程,MySQL索引原理详解,MySQL事务原理与...
  • MYSQL架构详解

    千次阅读 2021-10-29 11:11:28
    单机版mysql容易出现单点故障,所以需要搭建多台mysql服务器,mysql架构有很多种,目的都是热备份,多活,故障切换,负载均衡、读写分离等 一、主从复制架构 master主节点负责写入数据,slave从节点负责读取数据。...

    前言

    单机版mysql容易出现单点故障,所以需要搭建多台mysql服务器,mysql架构有很多种,目的都是热备份,多活,故障切换,负载均衡、读写分离等

    一、主从复制架构

    在这里插入图片描述
    master主节点负责写入数据,slave从节点负责读取数据。实现了读写分离。应用与读多写少的业务场景。这种架构的缺点就是只有一个master,如果挂掉了,就无法写入数据了。而且master和slave数据还有同步延迟的风险。

    在这里插入图片描述
    这种架构是级联复制架构,用于解决读需求更多的业务场景。如果读压力加大,就需要更多的slave来解决,但是如果slave的复制全部从master复制,势必会加大master的复制IO的压力,所以就出现了级联复制,减轻master压力。缺点就是slave延迟更加大了。

    二、主主架构

    在这里插入图片描述
    两个主节点,一个负责写,一个负责读,需要配合一个keepalived进行ip漂移,这样一个挂掉了,另一个可以继续工作。

    在这里插入图片描述
    上面这种架构,双主多从,解决了单master复制的压力大问题,减少了slave数据延迟,且双master可以减少单点故障。

    由上面的架构可以看出,搭建mysql集群是一个很大的开销,绝大多数公司,用的还是单机版mysql。

    三、MYSQL主从复制原理

    在这里插入图片描述

    • 复制过程-异步复制
      异步复制是MYSQL主从复制默认的方式,流程如下:
      1.客户端提交sql语句至master的mysql服务器后,mysql服务器将sql语句写入binglog日志。并将事务进行提交,返回消息给客户端。
      2.mysql服务中有个event监听器,监听binglog日志的变化,如果有变化,则通知dump线程。
      3.master服务器的dump线程通知slave服务器的IO线程,有数据需要同步,slave服务器的IO线程从slave服务器的relay-log.info中获取binlog文件和pos位置(类似于Kafka中的偏移量,记录binlog日志的插入位置)
      4.slave节点通过IO线程通知master节点slave的binlog文件和pos位置
      5.根据slave的请求,master将相应的binlog文件和pos位置传给slave
      6.slave获取到信息后,将信息写入relay-bin日志中。等待slave节点从relay-bin读取日志,同步数据。
      7.slave节点写入relay-bin日志成功后,给master节点回复ack信息,通知master写入relay-bin日志成功。
      8.master节点的dump线程通知服务将客户端写入的数据进行提交操作,然后给客户端相应消息。
    • 复制过程-半同步复制
      1.客户端提交sql语句至master的mysql服务器后,mysql服务器将sql语句写入binglog日志。
      2.mysql服务中有个event监听器,监听binglog日志的变化,如果有变化,则通知dump线程。
      3.master服务器的dump线程通知slave服务器的IO线程,有数据需要同步,slave服务器的IO线程从slave服务器的relay-log.info中获取binlog文件和pos位置(类似于Kafka中的偏移量,记录binlog日志的插入位置)
      4.slave节点通过IO线程通知master节点slave的binlog文件和pos位置
      5.根据slave的请求,master将相应的binlog文件和pos位置传给slave
      6.slave获取到信息后,将信息写入relay-bin日志中。等待slave节点从relay-bin读取日志,同步数据。
      7.slave节点写入relay-bin日志成功后,给master节点回复ack信息,通知master写入relay-bin日志成功。
      8.master节点的dump线程通知服务将客户端写入的数据进行提交操作,然后给客户端相应消息。

    可以看出,异步复制中,master节点不管slave节点数据是否同步成功,都会将数据提交,返回客户端成功的消息。这样的风险就是slave节点数据同步不成功的话,客户端并不知道。所以引入了半同步复制,master节点等到slave节点写入relay-bin日志成功后,才提交事务数据,这样更有利于数据的同步性。需要注意的是,开启半同步复制后,如果slave节点挂了,则master一直等待slave节点的ack信息,默认等待10秒,如果还没收到slave的ack,则认为slave节点挂掉了,master节点会自动变成异步复制方式进行。

    参考文章:Mysql主从复制

    展开全文
  • MySQL架构概述

    千次阅读 2022-03-14 21:25:51
    大体来说,MySQL 可以分为 Server 层和存储引擎层两部分。 Server 层:包括连接器、查询缓存、分析器、优化器、执行器等,涵盖 MySQL 的大多数核心服务功能,以及...其架构模式是插件式的,支持 InnoDB、MyISAM、Memo

    逻辑架构

     MySQL运行机制

     

    大体来说,MySQL 可以分为 Server 层和存储引擎层两部分。

    Server 层:包括连接器、查询缓存、分析器、优化器、执行器等,涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。

    注:MySQL 8.0 版本直接将查询缓存的整块功能删掉了,也就是说 8.0 开始彻底没有这个功能了。

    存储引擎层:而存储引擎层负责数据的存储和提取。其架构模式是插件式的,支持 InnoDB、MyISAM、Memory 等多个存储引擎。现在最常用的存储引擎是 InnoDB,它从 MySQL 5.5.5 版本开始成为了默认存储引擎。

    连接器

    负责和客户端建立连接,获取用户权限以及维持和管理连接。

    通过 show processlist; 来查询连接的状态。在用户建立连接后,即使管理员改变连接用户的权限,也不会影响到已连接的用户。默认连接时长为 8 小时,超过时间后将会被断开。

    分析器

    词法分析:如识别 select,表名,列名,判断其是否存在等。

    语法分析:判断语句是否符合 MySQL 语法。对sql进行一些语法的检查,比如单引号有没有闭合,根据语法规则,根据sql语句生成一个数据结构,我们把它叫做解析树。比如语句 select name from user where user_id = 1,它的解析树如下:

    优化器

    确定索引的使用,join 表的连接顺序等,选择最优化的方案。

    执行器

    在具体执行语句前,会先进行权限的检查,通过后使用数据引擎提供的接口,进行查询。

    查询缓存

    当接受到查询请求时,会现在查询缓存中查询(key/value保存),是否执行过。没有的话,再走正常的执行流程。

    但在实际情况下,查询缓存一般没有必要设置。因为在查询涉及到的表被更新时,缓存就会被清空。所以适用于静态表。在 MySQL8.0 后,查询缓存被废除。

    存储引擎:InnoDB

    mysql 5.7中的默认存储引擎。InnoDB是一个事务安全(与ACID兼容)的MySQL存储引擎,它具有提交、回滚和崩溃恢复功能来保护用户数据。InnoDB行级锁(不升级为更粗粒度的锁)和Oracle风格的一致非锁读提高了多用户并发性和性能。InnoDB将用户数据存储在聚集索引中,以减少基于主键的常见查询的I/O。为了保持数据完整性,lnnoDB还支持外键引用完整性约束。

    日志系统

    binlog(归档 )

    MySQL 的二进制日志 binlog 可以说是 MySQL 最重要的日志(binlog则是 Server 层的日志),它记录了所有的 DDL 和 DML 语句(除了数据查询语句select、show等),以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日志是事务安全型的。binlog 的主要目的是复制和恢复。mysql中的binlog与oracle中的归档日志特别像,其实它们存在的目的都是差不多的。

    MySQL 可以恢复到半个月内任意一秒的状态,惊叹的同时,你是不是心中也会不免会好奇,这是怎样做到的呢?

    怎样让数据库恢复到半个月内任意一秒的状态?binlog 会记录所有的逻辑操作,并且是采用“追加写”的形式。如果你的 DBA 承诺说半个月内可以恢复,那么备份系统中一定会保存最近半个月的所有 binlog,同时系统会定期做整库备份。这里的“定期”取决于系统的重要性,可以是一天一备,也可以是一周一备。

    当需要恢复到指定的某一秒时,比如某天下午两点发现中午十二点有一次误删表,需要找回数据,那你可以这么做:

    1、首先,找到最近的一次全量备份,如果你运气好,可能就是昨天晚上的一个备份,从这个备份恢复到临时库;

    2、然后,从备份的时间点开始,将备份的 binlog 依次取出来,重放到中午误删表之前的那个时刻。

    这样你的临时库就跟误删之前的线上库一样了,然后你可以把表数据从临时库取出来,按需要恢复到线上库去。

    MySQL 是以容易学习和方便的高可用架构,被开发人员青睐的。而它的几乎所有的高可用架构,都直接依赖于 binlog。虽然这些高可用架构已经呈现出越来越复杂的趋势,但都是从最基本的一主一备演化过来的。

    redo log:保证事务的持久性

    redo log 是存储引擎层的日志(InnoDB 特有日志)。

    具体来说,当有一条记录需要更新的时候,InnoDB 引擎就会先把记录写到 redo log里面,并更新内存,这个时候更新就算完成了。同时,InnoDB 引擎会在适当的时候,将这个操作记录更新到磁盘里面,而这个更新往往是在系统比较空闲的时候做。

    redo log包括两部分:一个是内存中的日志缓冲(redo log buffer),另一个是磁盘上的日志文件(redo log file)。mysql每执行一条DML语句,先将记录写入redo log buffer,后续某个时间点再一次性将多个操作记录写到redo log file。这种先写日志,再写磁盘的技术就是MySQL里经常说到的WAL(Write-Ahead Logging) 技术。

    在计算机操作系统中,用户空间(user space)下的缓冲区数据一般情况下是无法直接写入磁盘的,中间必须经过操作系统内核空间(kernel space)缓冲区(OS Buffer)。因此,redo log buffer写入redo log file实际上是先写入OS Buffer,然后再通过系统调用fsync()将其刷到redo log file中,过程如下:

    Redo log 与 binlog区别

    1、redo log 是 InnoDB 引擎特有的;binlog 是 MySQL 的 Server 层实现的,所有引擎都可以使用。

    2、redo log 是物理日志,记录的是“在某个数据页上做了什么修改”;binlog 是逻辑日志,记录的是这个语句的原始逻辑,比如“给 ID=2 这一行的 c 字段加 1 ”。

    3、redo log 是循环写的,空间固定会用完;binlog 是可以追加写入的。“追加写”是指 binlog 文件写到一定大小后会切换到下一个,并不会覆盖以前的日志。

    crash-safe 就是由 redo log 实现的。与 redo log 类似的日志文件还有 binlog,是 Server 引擎的日志,用于归档和备份数据。

    undo log:保证事务的原子性

    数据库事务四大特性中有一个是原子性,具体来说就是 原子性是指对数据库的一系列操作,要么全部成功,要么全部失败,不可能出现部分成功的情况。

    实际上,原子性底层就是通过undo log实现的。undo log主要记录了数据的逻辑变化,比如一条INSERT语句,对应一条DELETE的undo log,对于每个UPDATE语句,对应一条相反的UPDATE的undo log,这样在发生错误时,就能回滚到事务之前的数据状态。

    undo log是innodb 存储引擎层日志。undo log是回滚日志。用于回滚行记录到某个版本。在事务提交前写入,记录了事务的旧版本,可以给其他并发事务进行未锁定读取。保证事务的原子性和事务并发控制。

    架构演进

    主备实例

    在最开始,MySQL 是以容易学习和方便的高可用架构,被开发人员青睐的。而它的几乎所有的高可用架构,都直接依赖于 binlog。虽然这些高可用架构已经呈现出越来越复杂的趋势,但都是从最基本的一主一备演化过来的。

    在状态 1 中,客户端的读写都直接访问节点 A,而节点 B 是 A 的备库,只是将 A 的更新都同步过来,到本地执行。这样可以保持节点 B 和 A 的数据是相同的。当需要切换的时候,就切成状态 2。这时候客户端读写访问的都是节点 B,而节点 A 是 B 的备库。

    背后的原理:在一个主备关系中,每个备库接收主库的 binlog 并执行。正常情况下,只要主库执行更新生成的所有 binlog,都可以传到备库并被正确地执行,备库就能达到跟主库一致的状态,这就是最终一致性。

    采用一主一备的经典高可用架构,主备实例的每个节点的规格保持一致。

    RDS支持跨AZ高可用。选择主可用区和备可用区不在同一个可用区(AZ)。

    • 备机提高了实例的可靠性,创建主机的过程中,会同步创建备机,备机创建成功后,用户不可见。

    • 当主节点故障后,会自动发生主备切换,数据库客户端会发生短暂中断,数据库客户端需要支持重新连接。

    读写分离

     

    上图中,虚线箭头表示的是主备关系,也就是 A 和 A’互为主备, 从库 B、C、D 指向的是主库 A。一主多从的设置,一般用于读写分离,主库负责所有的写入和一部分读,其他的读请求则由从库分担。

    参考

    极客时间:MySQL实战45讲

    必须了解的MySQL三大日志:binlog、redo log和undo log

    展开全文
  • 基础知识介 绍 Basic knowledge 02 架构演变过 程 Architecture evolution 03 分库分表实 践 Mysql sharding 04 数据执行优 化 Query optimization
  • mysql架构1

    2022-08-08 21:35:01
    mysql架构1
  • MySQL官方文档架构

    2021-09-29 14:24:53
    MySQL官方文档架构
  • 包含MySQL的环境搭建过程和步骤,主从复制的原理,及搭建过程,MyCat的使用方法和原理,以及索引的使用规范和优化注意事项
  • 分布式MySQL架构

    千次阅读 2021-10-18 18:06:05
    在分布式MySQL架构下,客户端不再是访问MySQL数据库本身,而是访问一个分布式中间件。 关于分片键的选择 选择分片的算法,比较常见的有 RANGE 和 HASH 算法。 RANGE算法。 缺点:该算法不能解决传输数据库的两个...

    分布式数据库一般是以下的这种结构,计算层获取元数据层信息进行路由。下面说下各个层级的目的:
    在这里插入图片描述
    (1)计算层就是单机时的SQL层,用来对数据访问进行权限检查、路由访问,以及对计算结果等操作。
    (2)元数据层记录了分布式数据库集群下有多少个存储节点,对应IP、端口等元数据信息是多少。当分布式数据库的计算层启动时,会优先访问元数据层,获取所有集群信息,才能正确进行SQL解析和SQL执行路由。
    (3)存储层用来存放数据,但存储层要和计算层在同一台服务器上,甚至不求在同一个进程中。
    从可用性的角度看,如果存储层发生宕机,那么只会影响 1/N 的数据,N 取决于数据被打散到多少台服务器上。所以,分布式数据库的可用性对比单机会有很大提升,单机数据库要实现99.999% 的可用性或许很难,但是分布式数据库就容易多了。
    其引入了新的分布式服务的几大问题,包括自增实现、索引设计、分布式事务、分片副本等。

    在分布式MySQL架构下,客户端不再是访问MySQL数据库本身,而是访问一个分布式中间件。

    关于分片键的选择

    选择分片的算法,比较常见的有 RANGE 和 HASH 算法。

    1. RANGE算法。
      缺点:该算法不能解决传输数据库的两个痛点。
      (1)性能可扩展,通过增加分片节点,性能可以线性提升;
      (2)存储容量可扩展,通过增加分片节点,解决单点存储容量的数据瓶颈。
      优点:方便将数据在不同节点之间进行迁移。

    2. Hash分区算法。对于海量并发的OLTP业务来说,建议采用这种方式。这种方式在NG上也比较常用。

    分布式数据库架构设计的原则是:选择一个适合的分片键和分片算法,把数据打散,并且业务(角度)的绝大部分查询都是根据分片键进行访问

    互联网业务的分片键就是用户的ID,业务的大部分访问都是根据用户ID进行查询,比如:

    1. 查看某个用户下的微博/短视频;
    2. 查看某个用户的商品信息/购买记录。

    分库分表

    分库分表的目前是确定数据流。即通过以下方式可以确定。

    分片 = 实例 + 库 + 表 = ip@port:db_name:table_name

    很多情况下一般都采用既分库又分表的方式。有以下两个优点:

    1. 不同分片的数据可以在同一MySQL数据库实例上,便于做容量的规划和后期的扩展;
    2. 同一分片键的表都在同一个库下,方便做整体数据迁移和扩容。

    在这里插入图片描述
    按上面这样的分布式设计,数据分片完成后,所有的库表依然是在同一个 MySQL实例上!!!

    扩缩容

    在 HASH 分片的例子中,我们把数据分片到了 4 个节点,然而在生产环境中,为了方便之后的扩缩容操作,推荐一开始就把分片的数量设置为不少于 1000 个。

    不用担心分片数量太多,因为分片 1 个还是 1000 个,管理方式都是一样的,但是 1000 个,意味着可以扩容到 1000 个实例上,对于一般业务来说,1000 个实例足够满足业务的需求了(BTW,网传阿里某核心业务的分布式数据库分片数量为 10000个)。

    一般公司建议分片数后能满足最近5年以上的业务发展,并且是2的指数倍数,便于后期的扩容或缩容。

    主键选择

    自增并不能在插入前就获得值,而是要通过填 NULL 值,然后再通过函数 last_insert_id()获得自增的值。所以,如果在每个分片上通过自增去实现主键,可能会出现同样的自增值存在于不同的分片上。所以,在分布式数据库架构下,尽量不要用自增作为表的主键。可以采用MySQL自带的有序UUID,或者是开源的UUID生成算法,比如雪花算法(存在时间回溯问题)。

    索引设计

    在分布式数据服务中,最优雅的索引设计不是创建一个索引表,而是将分片键的信息保存在想要的查询列中,这样通过查询的列就能知道所在的分片信息。比如查询的列保存为:

    o_orderkey = string(o_orderkey + o_custkey)
    此时的查询:SELECT * FROM Orders WHERE o_orderkey = ‘1000-1’;

    对于非唯一的二级索引查询,依然需要扫描的分片才能得到最终的结果。

    SELECT * FROM Orders WHERE o_orderate >= ? o_orderdate < ?

    分布式数据库架构设计的要求是业务的绝大部分请求能够根据分片键定位到1个分片上。

    对于唯一索引,需要采用类似UUID的机制实现全局唯一。即使是单机版的MySQL,也推荐最开始就采用全局唯一设计,因为你的业务不一定哪天就要升级为全局唯一的方式。

    全局表

    关于全局表的设计,有很多种方式。第一种方式是采用每个分片上都存储该全局表信息,这样就可以防止跨分片查询,第二种方式是只存到一个公共的分片上,该分片数据通过服务启动后动态加载到缓存中。每次需要时从缓存中获取。且维护成本少。

    分库分表中间件

    之前的京东时,采用的sharding-jdbc。目前如果继续在互联网或者金融领域使用,还是建议采用sharding-jdbc。有以下原因。

    1. sharding-jdbc已经成为apache的顶级项目。社区活跃度尤其是中国社区活跃度很高,并且很多互联网巨头也在使用,遇到问题容易解决。
    2. sharding-jdbc在使用是不需要搭建代理层,而是直接集成在应用中,中间链路少,集成方便。
    3. sharding-jdbc升级为代理方式时,转化更加灵活。只需要将jar引入去掉,将配置信息加入到代理中间件(如mysql-proxy:mycat)中即可。

    分库分表的存储

    条带化

    条带化是一种数据存储方案,将磁盘进行条带化后,相同的数据可以写入到不同的条带,可以提高数据的查询性能和写入性能。

    如下所示的RAID 0条带化存储。
    在这里插入图片描述

    多活架构

    与单活架构不同,多活架构是指不同地理位置上的系统,都能够提供业务读/写服务。这里的“活”是指实时提供读/写服务的意思,而不仅仅只是读服务。多活架构主要是为了提升系统的容灾能力,提高系统的可用性,保障业务持续可用。

    在高可用架构中,需要做到跨机房部署,实现的方式是无损半同步复制,以及最新的MySQL Group Replication技术。数据库实例通过三园区进行部署。当一个机房发生宕机时,可以快速切到另外一个机房部署,当一个机房的数据存储出现问题时,可以通过另外机房的数据存储提供服务。

    在这里插入图片描述
    要实现多活架构,首先要进行分布式数据库的改造,然后是将不同数据分片的主服务器放到不同机房,最后是实现业务条带化的部署。如下面的这张图:

    在这里插入图片描述
    可以看到,对于上一节的订单服务和订单数据分片,通过将其部署在不同的机房,使得订单服务1 部署在机房 1,可以对分片1进行读写;订单服务 2 部署在机房 1,可以对分片 2 进行读写;订单服务 3 部署在机房 3,可以对分片 3 进行读写。

    这样每个机房都可以有写入流量,每个机房都是“活”的,这就是多活架构设计。

    若一个机房发生宕机,如机房 1 宕机,则切换到另一个机房,上层服务和数据库跟着一起切换,切换后上层服务和数据库依然还是在一个机房,访问不用跨机房访问,依然能提供最好的性能和可用性保障。

    分布式架构下的事务处理

    展开全文
  • skynet 框架下mysql 架构设计
  • mysql架构思维导图
  • 在非集群数据库架构中,数据库与数据库实例存在一 一对应关系,在数据库集群中,可能存在多个数据库实例操作一个数据库情况,即多对一关系。 二 MySQL基架 对于MySQL来说,虽然经历了多个版本迭代(MySQL5.5,MySQL ...
  • mysql 架构、索引调优、事务、日志备份文档
  • MySQL逻辑架构整体分为三层: 1>客户端:并非MySQL所独有,诸如:连接处理、授权认证、安全等功能均在这一层处理 2>核心服务:包括查询解析、分析、优化、缓存、内置函数(比如:时间、数学、加密等函数),所有的跨存储...
  • 腾讯金融数据平台与研发中心总监。课程带你走进业务全流程,探究MySQL架构设计,涵盖:表结构设计,索引调优,高可用架构设计,分布式架构设计,终极实战解决疑难杂症,共32讲课程。 视频大小:1G
  • 理解一条sql究竟都走了哪些流程
  • mysql架构设计与InnoDB存储引擎详解
  • wp-high-availability-webrefarchs扩展mysql架构1
  • 一、引入以及基础架构 二、连接器 三、查询缓存 四、分析器 五、优化器 六、执行器
  • 百度mysql架构

    2012-05-24 14:26:55
    百度的mysql架构,讲解了百度从2005 -2011年的mysql数据库架构发展,有分散式,集中式,到分布式.
  • 高性能高可用mysql架构
  • Google高级架构师Jeremy Cole谈大规模MySQL架构
  • 01 mysql架构.pdf

    2020-03-23 11:09:58
    了解mysql服务器的架构组成 了解mysql服务器的逻辑系统架构 –SQL layer –engine 了解mysql服务器的物理文件组成 –日志文件 –数据文件 –配置文件 –复制文件
  • MySQL性能调优与架构设计.pdf
  • 超详细图解!【MySQL进阶篇】MySQL架构原理

    千次阅读 多人点赞 2021-07-04 14:58:47
    MySQL体系架构 MySQL Server架构自顶向下大致可以分网络连接层、服务层、存储引擎层和系统文件层。 一、网络连接层 客户端连接器(Client Connectors):提供与MySQL服务器建立的支持。目前几乎支持所有主流 的...
  • 基于Hadoop Mysql架构的稽核系统的设计.pdf
  • 构建互联网+与大数据时代的分布式MySQL架构
  • 【课堂笔记】MySQL架构与SQL执行流程.pdf
  • mysql第二话 - mysql架构和执行流程

    千次阅读 2022-03-23 10:46:00
    mysql对于做程序的肯定很熟悉吧,本文主要记录一下mysql架构和一条sql执行的整个流程 在mysql中,存在两个非常相似的概念,即数据库和数据库实例。在mysql中的定义如下: * 数据库:存储数据的集合 * 数据库实例:...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 440,785
精华内容 176,314
关键字:

mysql架构

mysql 订阅
友情链接: vb xmlhttp.rar