• 23.09.26用户切库流程记录


    23.09.26用户切库流程记录

    hello,我是阿昌,今天记录一下最近切库的流程,内容如下:

    一、切库的原因

    因为db_A用户数据量超过预期,磁盘空间逐渐不足,需要换成db_A库的压力,所以将部分db_A用户切至db_B中。

    二、切库的时机

    1. 非高峰期时间(这里选择凌晨3点左右)
    2. 通知用户停服切库公告,让用户有心里预期

    三、用户切库是什么?

    将A库的用户,切到B库中,db分片为单独存储到话,如db_config.db_no,则切后用户需要更新分片信息db_no对应到值,以确保切库后表路由的正确性
    在这里插入图片描述

    四、整体流程图

    先整理出想要切库到db_B和保留在db_A的用户名单;
    先将db_A中的数据全量复制到db_B中;
    db_A删除切出用户,db_B删除未迁移的用户;
    在这里插入图片描述

    五、操作整体流程

    1. 开始切库流程
    2. dba:购买db_B数据库
    3. 开发:对项目进行新分库配置
    4. 整理出想要db_B切库的用户名单
    5. dba:启动dts服务全量克隆db_A到db_B中
    6. 测试:通过后台进用户截取对应部分数据用户名单
    7. 开发:伸缩服务停服
    8. dba:将对应数据库表设置为只读模式,避免第6步出现项目漏停做ddl操作
    9. dba:备份user表数据到user_bak表
    10. 开发:项目git打tag
    11. 开发:deploy基础依赖core包
    12. 开发:自测,修改部分要切用户的db_config,切1-2个用户到db_B进行自测
    13. 开发:启动pre环境,进入验证第11步用户数据是否准确
    14. 开发:执行任务,将名单用户全量修改db_config,切到db_B库中
    15. 开发:启动gray/prod环境服务器
    16. 测试:进入prod环境对比测试数据用户是否准确
    17. dba:恢复对应数据库表的操作权限
    18. 开发:主动出发定时任务业务
    19. 完成切库流程

    六、遇到的问题

    1. 开发配置新库时,不同项目可能有不同的配置方式,这里可能会出现配置错误,导致线上服务启动不了,出现报错
    2. 当还没进行差值删除时,但迁移B库单用户db_config已调整至B库时,A/B两库会同时存在两份一模一样的用部分业务会for循环扫库,并拿到用户db_config数据去执行业务逻辑
      • 此时如果先扫描到A库,拿到db_config会去B库操作
      • 扫描到B库,获取拿到db_config会去A库进行操作
  • 相关阅读:
    DDD 项目包结构 + 调用关系说明
    Java 独占锁ReentrantLock、读(悲观读)写锁ReentrantReadWriteLock、读(乐观读/悲观读)写锁StampedLock
    [机缘参悟-33]:眼见不一定为实,大多数时候“眼见为虚”
    Linux 多线程概念
    JUC笔记
    upload-labs通关
    REST API URI 设计的 7 条规则
    如何才能实现批量抠图?一键批量抠图的办法
    python迭代器生成器操作
    DevOps的出现带来的变化
  • 原文地址:https://blog.csdn.net/qq_43284469/article/details/133376517