从0开始回顾MySQL---系列八

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 分库分表1、为什么要分库分表?1. 数据库中的数据量不一定是可控的,随着时间和业务的发展,库中的表会越来越多,表中的数据量也会越来越大,相应地数据操作,例如 增删改查的开销 也会越来越大;另外,若不进行分布式部署,而一台服务器的 资源 (CPU、磁盘、内存、IO 等)是有限的,最终数据库所能承载的数据量、数据处理能力都将遭遇瓶颈。2. 所以,从 性能 和 可用性 角度考虑,会进行数据库拆分处理,具体地说,把原本存储于一个库的数据分块存储到多个库上,把原本存储于一个表的数据分块存储到多个表上,即 分库分表。2、分库分表的具体实施策略分库分表有 垂直切分 和 水平切分 两种方式,在

分库分表

1、为什么要分库分表?


  1. 数据库中的数据量不一定是可控的,随着时间和业务的发展,库中的表会越来越多,表中的数据量也会越来越大,相应地数据操作,例如 增删改查的开销 也会越来越大;另外,若不进行分布式部署,而一台服务器的 资源 (CPU、磁盘、内存、IO 等)是有限的,最终数据库所能承载的数据量、数据处理能力都将遭遇瓶颈。
  2. 所以,从 性能可用性 角度考虑,会进行数据库拆分处理,具体地说,把原本存储于一个库的数据分块存储到多个库上,把原本存储于一个表的数据分块存储到多个表上,即 分库分表


2、分库分表的具体实施策略


分库分表有 垂直切分水平切分 两种方式,在复杂的业务场景中,也可能会选择两者结合的方式。

切分方式

定义

优点

缺点

应用场景

垂直切分

数据表 的拆分,把一张列比较多的表拆分为多张表,具体地,根据数据库里面数据表的相关性进行拆分

可以使行数据变小,在查询时减少读取的 Block 数,减少 I/O 次数;简化表结构,更易于维护

主键会出现冗余,需要管理冗余列;会引起 JOIN 操作;加大事务管理的难度

适合 表多 且 各项 业务逻辑 划分清晰、低耦合情景

水平切分

数据表 的拆分,是一种横向按业务维度切分的方式,保持数据表结构不变,通过某种策略存储数据分片

可支持非常大的数据量存储;应用端改造少

分片事务难以解决;会增加逻辑、部署、应用和运维的各种复杂度

水平拆分更适合进行 分库 或者 单表数据量大 且表中的数据本身就有独立性

3、分库分表存在哪些问题


进行分库分表操作后,可能会面临以下几类问题:

  • 事务问题:分库分表后,就成了分布式事务。如果依赖数据库本身的分布式事务管理功能去执行事务,将付出高昂的性能代价; 如果由应用程序去协助控制,形成程序逻辑上的事务,又会造成编程方面的负担。
  • 跨库跨表的 JOIN 问题
    在执行了分库分表之后,难以避免会将原本逻辑关联性很强的数据划分到不同的表、不同的库上,这时,表的关联操作将受到限制,我们无法 JOIN 位于不同分库的表,也无法 JOIN 分表粒度不同的表,结果原本一次查询能够完成的业务,可能需要多次查询才能完成。
  • 额外的数据管理负担和数据运算压力
    额外的数据管理负担,最为常见的是数据的 定位问题 和数据的 增删改查 的重复执行问题,这些都可以通过应用程序来解决,但必然会引起额外的逻辑运算。
  • ID 问题
  • 数据库表被切分后,不能再依赖数据库⾃⾝的主键生成机制,所以需要⼀些手段来保证全局主键唯⼀。

主从复制

1、什么是 MySQL 主从复制?


  • 主从复制使得数据可以从一个数据库服务器复制到其他服务器上,在复制数据时,一个服务器充当主服务器(master),其余的服务器充当从服务器(slave)。  
  • MySQL 支持单向、异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。

2、MySQL主从同步的优点?


  1. 通过增加从服务器来提高数据库的性能,在主服务器上执行写入和更新,在从服务器上向外提供读功能,可以动态地调整从服务器的数量,从而调整整个数据库的性能。
  2. 提高数据安全,可以在从服务器上备份而不破坏主服务器相应数据。
  3. 在主服务器上生成实时数据,而在从服务器上分析这些数据,从而提高主服务器的性能 ;
  4. 数据备份


3、如何实现MySQL的读写分离?

读写分离的基本原理是将数据库读写操作分散到不同的节点上,下⾯是基本架构图:

读写分离的基本实现是:

  • 数据库服务器搭建主从集群,⼀主⼀从、⼀主多从都可以。
  • 数据库主机负责读写操作,从机只负责读操作。
  • 数据库主机通过复制将数据同步到从机,每台数据库服务器都存储了所有的业务数据。
  • 业务服务器将写操作发给数据库主机,将读操作发给数据库从机。

4、MySQL主从复制流程和原理?


基本原理流程,是3个线程以及之间的关联:

  • :binlog线程——记录下所有改变了数据库数据的语句,放进master上的binlog中;
  • :io线程——在使用start slave 之后,负责从master上拉取 binlog 内容,放进自己的relay log中;
  • :sql执行线程——执行relay log中的语句;

复制过程如下

  • 第一步:master在每个事务更新数据完成之前,将该操作记录串行地写入到binlog文件中。
  • 第二步:salve开启一个I/O Thread,该线程在master打开一个普通连接,主要工作是binlog dump  process。如果读取的进度已经跟上了master,就进入睡眠状态并等待master产生新的事件。I/O线程最终的目的是将这些事件写入到中继日志中。
  • 第三步:SQL Thread会读取中继日志,并顺序执行该日志中的SQL事件,从而与主数据库中的数据保持一致。

  • Binary log:主数据库的二进制日志;
  • Relay log:从服务器的中继日志;
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1天前
|
SQL 关系型数据库 MySQL
初学mysql
本文档介绍了MYSQL中的表格与键的概念,包括列、行、主键和外键。接着,展示了SQL语法基础,如创建、查看、删除数据库及操作表格。讨论了不同数据类型,如decimal、varchar、blob等。通过示例说明如何添加、删除列,插入、更新和删除数据,以及查询技巧,如使用WHERE、ORDER BY和LIMIT子句。
20 0
|
9月前
|
存储 关系型数据库 MySQL
MySQL
能说下myisam 和 innodb的区别吗? • myisam引擎是5.1版本之前的默认引擎,支持全文检索、压缩、空间函数等,但是不支持事务和行级锁,所以一般用于有大量查询少量插入的场景来使用,而且myisam不支持外键,并且索引和数据是分开存储的。 • innodb是基于B+Tree索引建立的,和myisam相反它支持事务、外键,并且通过MVCC来支持高并发,索引和数据存储在一起。
28 0
|
1天前
|
关系型数据库 MySQL Java
MySQL的问题
MySQL的问题
|
6月前
|
存储 关系型数据库 MySQL
|
11月前
|
存储 SQL 算法
盘点一下Mysql中的一些小知识(三)
盘点一下Mysql中的一些小知识(三)
67 0
盘点一下Mysql中的一些小知识(三)
|
关系型数据库 MySQL
MySQL一行变多行,多行变一行
MySQL一行变多行,多行变一行
164 1
MySQL一行变多行,多行变一行
|
JSON 算法 关系型数据库
MySQL 8.0.32如期而至
MySQL 8.0版本计划 MySQL 8.0开始采用快速迭代开发模式,基本上是每隔3个月就发布一个新的小版本。去年1月18日(2022.1.18)发布MySQL 8.0.28,今年1月17日发布MySQL 8.0.32,再看看其他几个版本的时间,还真是贼守时啊。
322 0
|
存储 SQL Oracle
Mysql的前世今生,Hello,Mysql
1.什么是数据库? 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。 每个数据库都有一个或多个不同的 API 用于创建,访问,管理,搜索和复制所保存的数据。 我们也可以将数据存储在文件中,但是在文件中读写数据速度相对较慢。
100 0
Mysql的前世今生,Hello,Mysql
|
SQL 关系型数据库 MySQL
MySQL(八)
MySQL(八),一起来学习吧。
MySQL(八)
|
关系型数据库 MySQL
07_mysql中having的使用_having与where的对比
mysql中having的使用 having与where的对比
148 0
07_mysql中having的使用_having与where的对比