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争抢,减少锁表的几率
相关推荐
Wang's Blog33 分钟前
PostgreSQL笔记22: WAL日志与崩溃恢复原理
数据库·笔记·postgresql
陈聪.1 小时前
企业级 NoSQL 数据库 Redis 核心知识整理
数据库·redis·nosql
翼龙云_cloud1 小时前
腾讯云国际代理商:CDB数据库自动备份和异地灾备配置 从快照到跨区域恢复
运维·数据库·云计算·腾讯云
小屁孩你滑稽掉了1 小时前
prisma操作数据库的方法使用教程(简洁版)
数据库·node.js·prisma·fastify
l1t2 小时前
利用DuckDB luajit插件和openblas库对表中数据做矩阵运算
数据库·线性代数·矩阵·duckdb
Elastic 中国社区官方博客2 小时前
Elasticsearch:什么是向量数据库?
大数据·运维·数据库·人工智能·elasticsearch·搜索引擎·ai
cspttty2 小时前
财务人员学数据分析考什么证
数据库
隔窗听雨眠3 小时前
MySQL索引机制深度解析:从B+树原理到高并发查询优化的完整指南
数据库·b树·mysql
数智化管理手记3 小时前
数据质量无法保障?自动化数据质量规则校验如何搭建方案?
大数据·数据库·自动化
我的xiaodoujiao3 小时前
使用PyMySQL模块技术操作MySQL数据库
数据库·python·测试工具·mysql