Mysql主从数据库,且分表,请问大家是如何添加新字段?

背景:

1、阿里云主从数据库。
2、分成100张表。
3、每张表400万数据。
4、现有总数据400万*100=4亿。

问题:

添加新字段后, 从库延迟4000s,严重影响线上服务!

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 19

写个脚本,在业务量最低的时候批量更新。我更新的时候都是凌晨4点钟,没遇到啥问题。我们分了1024张表,每张表1000-5000万的数据

1个月前 评论
Imuyu 1个月前
huangYX (楼主) 1个月前
huangYX (楼主) 1个月前
蒋蒋蒋蒋 (作者) 1个月前
蒋蒋蒋蒋 (作者) 1个月前

一张 400 W的表,加个字段,就延迟 4000s?

1个月前 评论
huangYX (楼主) 1个月前
  • 添加字段-不锁表
    ALTER TABLE 表名称 ADD COLUMN remark VARCHAR(255) DEFAULT '' COMMENT '备注',ALGORITHM = INPLACE,LOCK = NONE;
1个月前 评论
huangYX (楼主) 1个月前

个人认为
当数据量达到5000w以上,才需要考虑分表
5000w以下,根据业务建立好索引,速度还是很快的

1个月前 评论
huangYX (楼主) 1个月前
sanders

卡在哪里了?这么严重 4000s ?这也叫主从“同步”?

1个月前 评论
Coolr 1个月前

400W 数据量很小,直接在主表加就自动同步了

1个月前 评论

用pt工具吧,可以控制速率和延迟时间

1个月前 评论

这么大量 是啥类型的数据呢? 不是日志啥的吧

1个月前 评论

背景分析

在阿里云的主从数据库架构中,当你添加新字段时,从库延迟4000秒会严重影响线上服务。这种延迟可能是由以下几个原因导致的:

  1. 大数据量操作:由于每张表有400万条数据,总共4亿条数据,添加新字段可能导致大量数据的重新排列和写入。
  2. 数据库锁:添加字段操作会锁住整个表,导致大量数据操作,影响读写性能。
  3. 从库复制延迟:添加字段后主库的变更需要复制到从库,这个过程耗时较长,从而导致从库的延迟。

解决方案

为了解决这个问题,可以采取以下几种方法:

1. 分批次操作

将大规模的字段添加操作分批次进行,避免一次性操作带来的性能瓶颈。可以分批次处理每张表,减少每次操作的数据量。

2. 在线DDL操作

使用在线DDL工具如Percona Toolkit中的pt-online-schema-change或阿里云的在线DDL工具,能够在不中断服务的情况下进行DDL操作。这些工具通过创建一个临时表和触发器来同步数据变更,最终交换表名的方式来完成DDL操作。

3. 增加从库

临时增加一个新的从库,从主库上执行DDL操作后,通过数据快照将数据同步到新从库,然后将新的从库切换为从库,减少对现有从库的影响。

4. 调优数据库配置

调整数据库的配置参数,增加复制的并行度和缓冲区大小,以加速从库的复制速度。例如:

  • slave_parallel_workers:设置并行复制工作线程数。
  • slave_parallel_type:设置并行复制的类型。

具体操作步骤

  1. 分批次操作

    • 假设我们要给表table1添加字段new_column,可以将数据按主键ID范围分批次处理。例如:
      ALTER TABLE table1 ADD COLUMN new_column VARCHAR(255);
  2. 在线DDL操作

    • 使用pt-online-schema-change工具:
      pt-online-schema-change --alter="ADD COLUMN new_column VARCHAR(255)" D=database,t=table1 --execute
    • 阿里云的在线DDL工具(请参考阿里云的官方文档进行具体操作)。
  3. 增加从库

    • 创建一个新的从库实例。
    • 在主库上完成DDL操作。
    • 将新的从库与主库同步数据。
    • 切换新的从库为现有从库。
  4. 调优数据库配置

    • 在MySQL配置文件中调整以下参数:
      [mysqld]
      slave_parallel_workers = 4
      slave_parallel_type = LOGICAL_CLOCK

结论

通过分批次操作、使用在线DDL工具、增加从库以及调优数据库配置,可以有效地解决在阿里云主从数据库架构中添加新字段导致的从库延迟问题。这样可以确保数据库在进行大规模DDL操作时,线上服务不会受到严重影响。

1个月前 评论
huangYX (楼主) 1个月前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!