当前位置: 首页 > news >正文

MySQL之主从同步、分库分表

1、主从同步的原理

MySQL主从复制的核心是二进制日志

二进制日志(binlog)记录了所有DDL语句和DML语句,但不包括数据查询(select、show)语句。

1.1、复制分三步

  1. master主库在事务提交时,会把数据变更记录在二进制日志文件binlog中。
  2. 从库读取主库的二进制日志文件binlog,写入从库的中继日志relaylog
  3. slave从库重做中继日志中的事件,将改变反映它自己的数据

2.、分库分表

  • 垂直分库
  • 垂直分表
  • 水平分库
  • 水平分表

2.1、垂直分库

以表为依据,根据业务将不同表拆分到不同库中。

  • 按照业务对数据分级管理、维护、监控、扩展
  • 在高并发下,提高磁盘IO和数据量连接数

示例:

在“好又来”商城微服务项目中,一般有以下模块:用户模块,订单模块,商品模块等,

这时可将各个模块的表单独放在不同的库中,

如biz1库(用户模块的表)、biz2库(订单模块的表)、biz3库(商品模块的表)等。

2.2、垂直分表

以字段为依据,根据字段属性将不同字段拆分到不同表中。

  • 冷热数据分离
  • 减少IO争抢,两表互不影响

示例:

同样,在“好又来”商城项目中,

有商品表,表中有字段“商品id”、“商品名称”、“商品价格”、“商品详细描述”。

由于是“好又来”项目发展越来越好,商品越来越多,商品表数据量变得庞大。

这时结合业务根据拆分规则进行“垂直分表”,把商品表分为商品表1和商品表2:

商品表1:商品id、商品名称、商品价格

商品表2:商品id、商品详细描述

拆分规则:

  • 不常用的字段单独放一张表,
  • 把text、bolb等大字段拆分出来放附表。

2.3、水平分库

把一个库的数据拆分到多个库中。

  • 解决单库大数据量、高并发的性能瓶颈问题
  • 提高系统稳定性、可用性

示例:

有“发发发”银行,因为发展越来越好,客户从几十万膨胀到几百万,这时需要给系统做升级。对数据库进行拆分。

把一个库的用户拆分到4个库中,根据客户号取模把客户分散到4个库。

路由规则:

  • 有直接根据客户号取模的,也有根据一些特殊的规则生成的号来路由的。

2.4、水平分表

将一个表的数据拆分到多个表中,可以在同一个库,也可以在不同库。

  • 优化单一表数据量过大导致的性能问题
  • 避免IO争抢,减少锁表的几率

相关文章:

  • 0704模拟记录
  • 销毁终结者:IT 采购必知:高效数据销毁服务 文件销毁 硬盘销毁 数据销毁 销毁
  • [ruby on rails]rails6.0升级6.1
  • Paragon NTFS与Tuxera NTFS有何区别 Mac NTFS 磁盘读写工具选哪个好
  • 一文解开关于UWB定位技术的认识误区
  • vue模板语法v-html
  • 搜狗输入法产品使用说明
  • 免杀笔记 ---> PE
  • 私域和社群的差别是什么?
  • FFT 简单基础(matlab
  • 扫描工具Metasploit的安装和使用
  • 设置Docker中时区不生效的问题
  • UDP协议深入解析
  • 系统级应用锁的实现方法
  • 评估指标rouge安装与测试
  • 【笔记】你不知道的JS读书笔记——Promise
  • 【刷算法】求1+2+3+...+n
  • dva中组件的懒加载
  • ECMAScript6(0):ES6简明参考手册
  • es6--symbol
  • flask接收请求并推入栈
  • iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码...
  • JavaScript的使用你知道几种?(上)
  • java多线程
  • Js实现点击查看全文(类似今日头条、知乎日报效果)
  • Laravel核心解读--Facades
  • Puppeteer:浏览器控制器
  • SpringBoot几种定时任务的实现方式
  • 基于阿里云移动推送的移动应用推送模式最佳实践
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 码农张的Bug人生 - 初来乍到
  • 前端自动化解决方案
  • 使用docker-compose进行多节点部署
  • 详解NodeJs流之一
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • 关于Kubernetes Dashboard漏洞CVE-2018-18264的修复公告
  • 我们雇佣了一只大猴子...
  • #162 (Div. 2)
  • #QT(智能家居界面-界面切换)
  • $.each()与$(selector).each()
  • (c语言)strcpy函数用法
  • (MATLAB)第五章-矩阵运算
  • (八)Flask之app.route装饰器函数的参数
  • (附源码)ssm基于jsp的在线点餐系统 毕业设计 111016
  • (十) 初识 Docker file
  • . Flume面试题
  • .NET / MSBuild 扩展编译时什么时候用 BeforeTargets / AfterTargets 什么时候用 DependsOnTargets?
  • .net 4.0发布后不能正常显示图片问题
  • .NET导入Excel数据
  • .NET项目中存在多个web.config文件时的加载顺序
  • .ui文件相关
  • [<MySQL优化总结>]
  • [20161214]如何确定dbid.txt
  • [Asp.net MVC]Bundle合并,压缩js、css文件
  • [autojs]autojs开关按钮的简单使用