数据库系列:MySQL慢查询分析和性能优化

数据库系列:MySQL索引优化总结(综合版)

数据库系列:高并发下的数据字段变更

数据库系列:覆盖索引和规避回表

数据库系列:数据库高可用及无损扩容

数据库系列:使用高区分度索引列提升性能

数据库系列:前缀索引和索引长度的取舍

数据库系列:MySQL引擎MyISAM和InnoDB的比较

数据库系列:InnoDB下实现高并发控制

数据库系列:事务的4种隔离级别

数据库系列:RR和RC下,快照读的区别

数据库系列:MySQL InnoDB锁机制介绍

数据库系列:MySQL不同操作分别用什么锁?

1 背景

作为一线互联网的架构师,数据库存储是必不可的一个知识领域,而MySQL是数据库存储层最常用的组件之一。

随着互联网的不断发展,大规模流量场景的广泛应用,单单掌握MySQL技术是远远不够的。数据持久化还需要能应对以下复杂场景:

  • 读写分离场景:需要一主多从的架构(写主读从),支持读写请求的自动负载,支持故障驱逐和主从自动切换等,
  • 分库分表场景:随着数据库规模的变大,检索性能会下降,所以需要,支持横向(Scale Out)和 纵向(Scale Up)的分库分表和跨库跨表检索
  • 权限控制:针对不同的用户或者角色组进行操作权限控制
  • 监控告警:多维度对存储服务的可用性、性能、读写比、请求量级变化 进行实时监控,如果感知异常,及时预警,避免线上故障扩大化
  • 日志审计:大规模业务场景,经常出现多业务公用存储费服务,如果存储层能够自行进行日志审计,那在每个业务侧就可以避免重复造轮子
  • 并发控制:互联网下流量规模都是巨量的,具备并发控制能力,可以确保纠正由并发操作导致的错误,以保护数据库的完整性。

当然这些能力并不是MySQL天然支持的,需要一些中间件的支持,所以我们调研了业内常用的一些中间件的,从业务需求驱动,看看各有哪些,是能够满足的。

2 业务需求驱动

从问题出发,看看行业内对存储层有哪些共同的痛点,然后根据这些痛点输出解决方案

问题 说明 解决方案
连接池管理 客户端连接无限制,不可复用,不可隔离,业务间互相影响(如单个服务超载调用可能导致雪崩) 归口到Proxy统一管理,提供连接池、连接数限制、重试、超时断开保护等能力
读写分离机制 需要为业务提供读写分离机制 数据服务存在主从部署模式,业务在路有时Porxy自动区分读写,写路由到主存储服务,读路由到从存储服务
负载均衡机制 需要为业务提供备机负载均衡 读能力能自动均衡的负载到多个从服务器上
数据库分库分表sharding 数据量比较大的场景下,需提供业务分库分表能力 调用方屏蔽分表细节,跟单表操作一直。Proxy实现对分库分表的核心细节,不同组件会有一些限制(如带分表字段,不支持跨库join等)
故障切换 主/备发生宕机等故障,需业务来处理故障切换 屏蔽后端DB故障问题,自动故障切换
权限 一方面账号权限放太开,没有最小化权限;另一方面机器迁移等都需手动申请权限较麻烦 通过user/pwds/ip等做权限控制,最小化权限。机器迁移自动权限扩缩容。
安全 需业务自己处理sql注入,核心数据加密等问题 Proxy加一层保护,像sql注入,sql黑名单(如sleep/drop),数据加密等
日志审计 Mysql数据被修改了,找不到是被谁修改的 提供便捷的日志审计,日志流控和动态变更,方便定位查询
监控告警 需业务根据自己需求搭建监控系统 提供连接数/慢查询数/Sql延迟/Sql语句统计/DB负载等监控告警
事务 部分业务会使用事务能力 支持单机/分布式事务。事务是mysql中间件最难做的点,单机事务基本中间件都能支持到,分布式事务不同中间件实现程度也不同
缓存 有DB数据缓存的场景,都需业务单独来做 Proxy提供一些通用可配置的缓存策略(如基于查询、用户、schema等)

3 常用MySQL中间件介绍

3.1 ProxySQL

介绍:

ProxySQL是使用C++开发的一个功能强大的数据库代理,具有连接池、读写分离、负载均衡、故障切换、SQL路由、多协议支持、可扩展性、安全性、监控和日志以及易于配置和管理等特性。具备轻量、高性能(千亿级数据处理能力)等优势,功能完善,能满足中间件所需的绝大多数功能



相关链接

特性介绍

  1. 连接池:ProxySQL支持连接池,可以有效地管理数据库连接,减少连接和断开连接的开销。
  2. 读写分离:ProxySQL可以实现读写分离,将读操作和写操作分发到不同的数据库服务器上,提高系统的性能和可靠性。
  3. 负载均衡:ProxySQL支持负载均衡,可以将请求分发到多个数据库服务器上,实现负载均衡,提高系统的吞吐量和响应速度。
  4. 故障切换:ProxySQL支持故障切换,当某个数据库服务器出现故障时,可以自动将请求切换到其他可用的数据库服务器上,保证系统的可用性和稳定性。
  5. SQL路由:ProxySQL支持SQL路由,可以根据不同的SQL语句类型和条件,将请求分发到不同的数据库服务器上,实现精细化的路由控制。
  6. 多协议支持:ProxySQL支持多种数据库协议,如MySQL、PostgreSQL、Oracle等,可以轻松地与其他数据库系统集成。
  7. 可扩展性:ProxySQL支持横向扩展,可以通过添加更多的代理实例来扩展系统的处理能力。
  8. 安全性:ProxySQL支持SSL/TLS加密通信,可以保证数据传输的安全性。
  9. 监控和日志:ProxySQL提供了丰富的监控和日志功能,可以实时监控系统的运行状态和性能指标,方便进行故障排查和性能优化。
  10. 易于配置和管理:ProxySQL的配置和管理相对简单,可以通过配置文件或命令行工具进行配置和管理。

3.2 MaxScale

介绍:

MaxScale是MariaDB开发的一个MySQL数据中间件。它是一种数据库智能代理服务,旨在扩展MariaDB Server的高可用性、可伸缩性和安全性。同时,MaxScale通过将其与基础数据库基础架构分离,有助于简化应用程序开发。

相关链接

特性介绍

特性介绍基于10.3.1以上版本

  1. 读写分离:支持读写分离模块,能够解析SQL语句,从而把对应的请求转发到对应的服务器上。
  2. 自动切换:能够根据主从状态实现写库的自动切换。
  3. 插件支持:支持多种插件,如认证、协议、路由、监控和日志与过滤插件,这些插件可以根据需要进行配置和扩展。
  4. 高可用性:通过路由插件实现负载均衡的功能,同时监控插件可以对各个数据库服务器进行监控,以确保系统的可用性和稳定性。
  5. 安全性:提供简单的数据库防火墙功能,对SQL进行过滤和容错,以增强系统的安全性。
  6. 可扩展性:MaxScale的体系结构支持横向扩展,可以通过添加更多的节点来提高系统的处理能力和容量。

3.3 DBProxy

介绍:

DBProxy是一个位于前端应用与后端MySQL数据库之间的中间件,它使得应用程序员无需再关心读写分离、分表等与MySQL相关的细节,可以专注于编写业务逻辑,同时使得DBA的运维工作对前端应用透明,上下线DB前端应用无感知。

DBProxy是由美团DBA团队研发和维护的一个基于MySQL协议的数据中间层。它在奇虎360公司开源的Atlas基础上,优化了部分问题,并且添加了很多特性。而Atlas是在MySQL官方推出的MySQL-Proxy 0.8.2版本的基础上,修改了大量bug,添加了很多功能特性。

相关链接

特性介绍

  1. 读写分离:DBProxy可以将读操作和写操作分发到不同的数据库服务器上,以提高系统的性能和可靠性。
  2. 负载均衡:DBProxy可以将请求分发到多个数据库服务器上,实现负载均衡,提高系统的吞吐量和响应速度。
  3. 支持分表:DBProxy可以支持分表,对数据进行水平和垂直拆分,以减轻单一数据库的压力。
  4. IP过滤:DBProxy可以设置IP过滤,限制特定IP的访问权限,提高系统的安全性。
  5. sql语句黑名单:DBProxy可以设置SQL语句黑名单,禁止执行某些特定的SQL语句,以防止潜在的安全风险。
  6. DBA平滑下线DB:DBProxy可以实现在不影响前端应用的情况下,平滑地下线某个数据库服务器。
  7. 从库流量配置:DBProxy可以对从库的流量进行配置,实现主从流量分离,提高系统的可用性。
  8. 动态加载配置项:DBProxy可以动态加载配置项,方便用户根据实际需求进行灵活的配置和管理。

3.4 MyCat

介绍:

MyCat源于阿里巴巴的Cobar项目,国内开源软件爱好者对Cobar项目进行了改进,加入了许多新的功能在其中,并将其命名为MyCat。目前MyCAT社区活跃度很高,有很多公司采用了MyCat技术,涵盖银行、电信、电子商务、物流、移动应用、O2O的众多领域和公司。算是发展比较好的。

相关链接

特性介绍

  1. 分布式架构:采用分布式架构,可以水平扩展,支持大规模数据存储和处理。
  2. SQL解析和优化:对SQL进行解析和优化,可以提高查询性能和效率。
  3. 数据分片:支持数据分片,可以将大表水平分割为多个小表,提高数据访问的效率和可扩展性。
  4. 读写分离:支持读写分离,可以将读操作和写操作分发到不同的数据库服务器上,提高系统的性能和可靠性。
  5. 故障切换:支持故障切换,当某个数据库服务器出现故障时,可以自动将请求切换到其他可用的数据库服务器上,保证系统的可用性和稳定性。
  6. 监控和管理:MyCat提供丰富的监控和管理功能,可以实时监控系统的运行状态和性能指标,方便进行故障排查和性能优化。

3.5 TDDL

介绍:

TDDL是淘宝开发的一种基于Java语言的分布式数据库系统,主要解决了分库分表对应用的透明化以及异构数据库之间的数据复制,它是一个基于集中式配置的jdbc datasource实现,具有线性水平扩展能力、海量数据存储访问能力、高性价比、数据存储平滑扩容、分库分表、透明读写分离、成熟的管控系统等特点。

相关链接

特性介绍

  1. 线性水平扩展能力:TDDL能够实时提升数据库处理能力,提高访问效率,峰值TPS可达150万+,轻松应对高并发的实时交易场景。
  2. 海量数据存储访问:企业客户随着业务的快速发展,业务数据增长迅猛,会产生超过单机数据库存储能力极限的数据,造成数据库容量瓶颈,限制业务发展。TDDL可以线性扩展存储空间,提供PB级存储能力,可广泛应用于工业制造、智能家居、车联网等超大规模数据存储访问场景。
  3. 高性价比数据库解决方案:初创型企业初期发展阶段技术积累相对比较薄弱,资金投入有限,业务发展快,数据库的稳定性风险高。TDDL能够利用普通服务器提供阿里巴巴双十一同等处理能力的高性价比国产数据库解决方案。
  4. 数据存储平滑扩容:当应用单机存储(MySQL)出现容量或性能瓶颈时,TDDL提供在线数据扩容功能(该功能需要结合阿里其它内部中间件使用)。
  5. 分库分表:TDDL支持分库分表功能,只需选择拆分键,就可以按照拆分键进行分库分表的访问。
  6. 透明读写分离:通过使用MySQL只读实例或者MySQL备机实现读写分离,帮助应用解决事务、只读实例或者备机挂掉、指定主备访问等细节问题,对应用无侵入。
  7. 数据存储平滑扩容:当出现数据存储容量和访问量瓶颈时,TDDL支持存储容量在线扩展,扩容无需改造应用,扩容进度支持可视化跟踪。
  8. 成熟的管控系统:通过数据库运维支撑系统保障数据库的正常有序运转。

4 总结

大致介绍了互联网场景下数据存储服务的需求,以及当下业内知名MySQL中间件的功能特性。

后面我们对这些数据库中间件一个个详细拆解下,看看他能解决我们哪些痛点。

数据库系列:业内主流MySQL数据中间件梳理的更多相关文章

  1. shell编程系列25--shell操作数据库实战之备份MySQL数据,并通过FTP将其传输到远端主机

    shell编程系列25--shell操作数据库实战之备份MySQL数据,并通过FTP将其传输到远端主机 备份mysql中的库或者表 mysqldump 常用参数详解: -u 用户名 -p 密码 -h ...

  2. Mysql备份系列(4)--lvm-snapshot备份mysql数据(全量+增量)操作记录

    Mysql最常用的三种备份工具分别是mysqldump.Xtrabackup(innobackupex工具).lvm-snapshot快照.前面分别介绍了:Mysql备份系列(1)--备份方案总结性梳 ...

  3. MySQL 数据操作与查询笔记 • 【第1章 MySQL数据库基础】

    全部章节   >>>> 本章目录 1.1 数据库简介 1.1.1 数据和数据库定义 1.1.2 数据库发展阶段 1.1.3 数据库系统组成 1.1.4 关系型数据库 1.2 M ...

  4. Code First开发系列之管理数据库创建,填充种子数据以及LINQ操作详解

    返回<8天掌握EF的Code First开发>总目录 本篇目录 管理数据库创建 管理数据库连接 管理数据库初始化 填充种子数据 LINQ to Entities详解 什么是LINQ to ...

  5. 8天掌握EF的Code First开发系列之3 管理数据库创建,填充种子数据以及LINQ操作详解

    本文出自8天掌握EF的Code First开发系列,经过自己的实践整理出来. 本篇目录 管理数据库创建 管理数据库连接 管理数据库初始化 填充种子数据 LINQ to Entities详解 什么是LI ...

  6. 【数据库】MySql常用函数梳理

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/5866388.html MySql常用函数梳理: 1:数学函数 使用格式:一般用于插入.修改语句中,直接 函数( ...

  7. MySQL数据表修复, 如何修复MySQL数据库(MyISAM / InnoDB)

    常用的Mysql数据库修复方法有下面3种: 1. mysql原生SQL命令: repair 即执行REPAIR TABLE SQL语句 语法:REPAIR TABLE tablename[,table ...

  8. Flink RichSourceFunction应用,读关系型数据(mysql)数据写入关系型数据库(mysql)

    1. 写在前面 Flink被誉为第四代大数据计算引擎组件,即可以用作基于离线分布式计算,也可以应用于实时计算.Flink的核心是转化为流进行计算.Flink三个核心:Source,Transforma ...

  9. 利用PHP实现登录与注册功能以及使用PHP读取mysql数据库——以表格形式显示数据

    登录界面 <body><form action="login1.php" method="post"><div>用户名:&l ...

  10. mysql数据库通过二进制 -【恢复数据记录】

    1.修改配置文件 vi /etc/my.cnf log-bin = binlog systemctl restart mysqld mysql -uroot -p123456 mysql> sh ...

随机推荐

  1. Mysql基础9-事务

    一.事务简介 事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有操作作为一个整体一起向系统提交或者撤销操作请求,即这些操作要么同时成功,要么同时失败.mysql的事务默认是自动提交的,也就 ...

  2. KRPANO资源分析工具下载四方环视全景图

    提示:目前分析工具中的全景图下载功能将被极速全景图下载大师替代,相比分析工具,极速全景图下载大师支持更多的网站(包括各类KRPano全景网站,和百度街景) 详细可以查看如下的链接: 极速全景图下载大师 ...

  3. 【uniapp】【微信小程序】wxml-to-canvas

    真是搞吐了,研究了整整两天,困死我了 本来使用生成二维码插件好好的,插件页也支持导出二维码图片,可是领导说要带上文件的名称,那就涉及html转图片了,当然也可以改二维码插件的源码,不过源码做了混淆,看 ...

  4. 聊聊基于Alink库的随机森林模型

    概述 随机森林(Random Forest)是一种集成学习(Ensemble Learning)方法,通过构建多个决策树并汇总其预测结果来完成分类或回归任务.每棵决策树的构建过程中都引入了随机性,包括 ...

  5. 其它——MyCat实现分库分表

    文章目录 MyCat实现分库分表 一 开源数据库中间件-MyCat 二 MyCat简介 三 MyCat下载及安装 3.1 MySQL安装与启动 3.2使用docker启动多个数据库 3.3 MyCat ...

  6. VoIP==Voice over Internet Protocol

    基于IP的语音传输(英语:Voice over Internet Protocol,缩写为VoIP)是一种语音通话技术,经由网际协议(IP)来达成语音通话与多媒体会议,也就是经由互联网来进行通信.其他 ...

  7. MySQL5.7版本单节点大数据量迁移到PXC8.0版本集群全记录-3

    接上文,单节点升级到80版本之后,构建新版本的80集群就水到渠成.相对简单了,详情可参见之前的集群构建博文. 本文在修改配置集群的新参数时,修改了pxc_strict_mode为默认的ENFORCIN ...

  8. 深入了解 GPU 互联技术——NVLINK

    随着人工智能和图形处理需求的不断增长,多 GPU 并行计算已成为一种趋势.对于多 GPU 系统而言,一个关键的挑战是如何实现 GPU 之间的高速数据传输和协同工作.然而,传统的 PCIe 总线由于带宽 ...

  9. Substring of Sorted String 题解

    Substring of Sorted String 写篇题解纪念一下蒟蒻第一次赛时切出的 F 题. 题目简述 对一个字符串进行单点修改,区间判断操作. 修改操作为将一个字符修改为另一个,判断操作为判 ...

  10. ACTF 2023 部分WP

    来自密码手的哀嚎: 玩不了一点,太难了. CRYPTO MDH Description Malin's Diffile-Hellman Key Exchange. task.sage from has ...