目录

  • 1 项目背景
  • 2 停机迁移方案
  • 2 双写迁移方案

以下内容参考微信公众号石杉的架构笔记,欢迎大家关注,结合文章内容写一些自己的补充和心得感悟

1 项目背景

现在有一个未分库分表的系统,未来要分库分表,如何设计才可以让系统从未分库分表动态切换到分库分表上?

分表分库预备知识:
MySQL分库分表

2 停机迁移方案

比较传统的方案,就是很简单,大家伙儿凌晨 12 点开始运维,网站或者 app 挂个公告,说 0 点到早上 6 点进行运维,无法访问。

接着到 0 点停机,系统停掉,没有流量写入了,此时老的单库单表数据库静止了。然后你之前得写好一个导数的一次性工具,此时直接跑起来,然后将单库单表的数据哗哗哗读出来,写到分库分表里面去。

导数完了之后,就 ok 了,修改系统的数据库连接配置啥的,包括可能代码和 SQL 也许有修改,那你就用最新的代码,然后直接启动连到新的分库分表上去。

验证一下,ok了,完美,大家伸个懒腰,看看看凌晨 4 点钟的北京夜景,打个滴滴回家吧。

但是这个方案比较 low,谁都能干,我们来看看高大上一点的方案。

2 双写迁移方案

常用的一种迁移方案,比较靠谱一些,不用停机,不用看北京凌晨 4 点的风景。

简单来说,就是在线上系统里面,之前所有写库的地方,增删改操作,除了对老库增删改,都加上对新库的增删改,这就是所谓的双写,同时写俩库,老库和新库。

然后系统部署之后,新库数据差太远,用之前说的导数工具,跑起来读老库数据写新库,写的时候要根据 gmt_modified 这类字段判断这条数据最后修改的时间,除非是读出来的数据在新库里没有,或者是比新库的数据新才会写。简单来说,就是不允许用老数据覆盖新数据。

导完一轮之后,有可能数据还是存在不一致,那么就程序自动做一轮校验,比对新老库每个表的每条数据,接着如果有不一样的,就针对那些不一样的,从老库读数据再次写。反复循环,直到两个库每个表的数据都完全一致为止。

接着当数据完全一致了,就 ok 了,基于仅仅使用分库分表的最新代码,重新部署一次,不就仅仅基于分库分表在操作了么,还没有几个小时的停机时间,很稳。所以现在基本玩儿数据迁移之类的,都是这么干的。

Mysql将现有表进行分表分库相关推荐

  1. mysql 分表后排序_MySQL优化分库分表,为什么要分表,分表以后如何进行排序查询,业务如何设计?...

    昨天面试新人的时候,遇到了这么一个问题,按照自己的想法大体聊了一些,但大多是感性的,并没有完整的了解why and how. 今天查了一些相关的资料,包括<MySQL性能调优与架构设计>. ...

  2. 数据库--分库分表--垂直分表与水平分表

    原文网址:数据库--分库分表--垂直分表与水平分表_IT利刃出鞘的博客-CSDN博客 简介 说明 本文介绍数据库的分库分表的方案:垂直分表与水平分表. 关系型数据库本身比较容易成为系统瓶颈,单机存储容 ...

  3. MySQL将表中的yes改成no_mysql在不需要改程序的情况下通过操作数据库对单表数据量大的表进行分表...

    1.为什么要分表? 数据库数据越来越大,随之而来的是单个表中数据太多.以至于查询速度变慢,而且由于表的锁机制导致应用操作也搜到严重影响,出现了数据库性能瓶颈. mysql中有一种机制是表锁定和行锁定, ...

  4. mysql分表全局查询_mysql如何查询多样同样的表/sql分表查询、java项目日志表分表的开发思路/按月分表...

    之前开发的一个监控系统,数据库的日志表是单表,虽然现在数据还不大并且做了查询sql优化,不过以后数据库的日志表数据肯定会越来越庞大,将会导致查询缓慢,所以把日志表改成分表,日志表可以按时间做水平分表, ...

  5. mysql如何分表_MySQL分表和分区的具体实现方法

    垂直分表 垂直分表就是一个包含有很多列的表拆分成多个表,比如表A包含20个字段,现在拆分成表A1和A2,两个表各十个字段(具体如何拆根据业务来选择). 优势:在高并发的情境下,可以减少表锁和行锁的次数 ...

  6. mysql分表_mysql分表详解

    经常听到有人说"数据表太大了,需要分表","xxxx了,要分表"的言论,那么,到底为什么要分表? 难道数据量大就要分表? mysql数据量对索引的影响 本人my ...

  7. mysql atlas分表_Atlas 分表功能

    1.分表原因 1.数据过多,访问缓慢 2.创建索引时重新排序,创建缓慢,并且占用大量的磁盘空间 2.分表方式 1.根据数据范围分表 2.根据取模的方式(取余数) 3.Atlas分表 1.分表思路 1. ...

  8. mysql数据库 分表存储分表查询

    因为看到公司数据库商家的商品是存储在多个商品表的分表中,这里是有 0 - 9 共10个分表,就突然有了疑惑,怎么存的?查寻的时候怎么查的?怎么定位到这个商家的商品在某一个分表中? 这里简单的来记录一下 ...

  9. MySQL性能优化(五):分表

    一:为什么要分表? 如果一个表的每条记录的内容很大,那么就需要更多的IO操作,如果字段值比较大,而使用频率相对比较低,可以将大字段移到另一张表中,当查询不查大字段的时候,这样就减少了I/O操作     ...

最新文章

  1. Android环境结构--安装Eclipse错
  2. C++中关于内部与外部函数
  3. 使用.NET Core与Google Optimization Tools实现加工车间任务规划
  4. mysql映射超_Hibernate的映射类型 hibernate mysql映射类型
  5. 天线接收功率计算公式_对讲机天线到底有多重要?通信效果好不好全靠它了!...
  6. 如何提高JVM的性能?
  7. 实现python扩展的C API方法过程全纪录(windows)
  8. kylin启动:Failed to create /kylin
  9. 通过反射获取类的所有属性和方法
  10. document.body.scrollTop
  11. 【每日算法Day 84】面试必考题:Trie(字典树/前缀树)的实现
  12. PCD文件的rgb格式
  13. 四轴飞行器基础介绍篇
  14. 水晶易表Xcelsius 2008安装指南 支持WIN10 64位 + office2016
  15. launching IDEA-If you already have a 64-bit JDK installed, define a JAVA_HOME...问题解析处理
  16. 类似中国知网但是搜索英文文献的权威网站有哪些?
  17. 一文详解什么是代理模式
  18. 静态变量和静态方法编程训练—信用卡消费记录
  19. ImagePullBackOff: Back-off pulling image \gcr.io/google_containers/pause-amd64:3.0 解决方法
  20. 英语写作中常见的“转折”小结

热门文章

  1. 相对路径找不到图片_微信聊天视频、图片、语音记录等文件管理器,再也不怕找不到聊天文件了!...
  2. crdownload是什么文件(crdownload文件怎么继续下载)
  3. 怎么看Evernote每月已用上传空间大小how to know how much storage space I have used in evernote
  4. 有规律的坚持写文章有多难?
  5. 任意密码重置;越权查看他人信息及修改信息
  6. DPDK性能影响因素分析
  7. Java面向对象和封装
  8. 华东师范大学 计算机 博士 毕业论文,华师大软件学院历年培养研究生学位论文情况.docx...
  9. Realme GT Neo2T ROOT 解锁BL教程
  10. 安装SSL证书后不能访问https网站怎么办