mysql大表加字段问题

场景:

现在 有个数据量大概40亿的数据,存在10个库,总计80张表上面,每个表大概5000万的数据量,
这个表通过一个MQ接口不断地接收数据,每天大概新增或更新数据量是几十万。

现在,需要在在这个表上加个新字段X,而且都有初始值,都存储在对方系统的数据库里。而他们这个新的字段一直就有。只是我方系统一直以来没有接这个字段。

注意:加字段期间不能影响原有的查这张表的业务的使用。

问:如何新增。

首先,肯定不能在表上面直接加字段,数据量太大,直接加字段,sql一夜都跑不完。而且会影响查询业务的使用

 

方案如下:

第一步,我们同样的数据库的位置,在老表的_old下方创建新表_new ,字段结构完全一样,只是多了新字段X。
第二步,让对方系统把老的40亿数据推到hive上面,做准备,时间节点记为1月1日零时,大概三天推上去;
第三步,在此之前,建立一个新接口,一个临时表new_temporary从1月1日零时,就开始接数据到临时表;
第四部,启动拉数据任务流,每天半夜从hive拉数据,拉倒新表new,拉的时候记得max_binlog_cache_size 改大,不然一次入库会撑爆,大概10天左右拉完,截止时间1月15日零时。(这个时间节点要用)

第五步,拉数据完毕后,启动一个定时任务,把从临时表new_temporary接收的数据,更新到新表_new。更新条件是,只对数据库更新时间是 1月15日零时之前的数据做更新
第六步,同时切换接口开关,关闭接临时表的接口,打开接新表接入数据的接口。同时入老表old的接口也不能关,预防漏发数据随时切回来。

第七步,修改系统中所有查询老表old查询方法,改成查询新表,用redis加上开关。上线功能。

第八步,打开开关,使用新表,若有漏发数据(少量),这提醒对方系统补发数据,逐步补全数据,

第九步,等系统运行平稳以后,关掉接老表old数据的接口,删除临时表new_temporary,删除老表_old

 

感悟:本来加一个字段不算太大的事,可是因为数据量大,又要保证可用性,所以还是需要一套方案来做这个事情。

需要在大数据量的MySQL表中添加字段时,一般采取以下步骤: 1. 首先,确认新字段的数据类型和长度。需要考虑新字段所存储的数据类型和取值范围,选择合适的数据类型,以及确定字段的长度,以确保数据的准确性和完整性。 2. 在确认新字段的数据类型和长度后,可以使用ALTER TABLE语句来添加字段。ALTER TABLE语句用于修改表的结构,包括添加字段、删除字段、修改字段等。语法如下: `ALTER TABLE 表名 ADD 列名 数据类型 [约束条件] [FIRST | AFTER 上一个字段];` 其中,表名为要进行修改的表名称,列名为新字段的名称,数据类型为新字段的数据类型,约束条件为字段的约束条件,如NOT NULL,UNIQUE等。FIRST和AFTER用于确定新字段的位置,可以是第一个字段或者在某个已有字段后进行插入。 3. 执行ALTER TABLE语句后,MySQL将执行表的结构变更操作,添加字段到表中。在表数据量较大的情况下,这个过程可能需要一定时间,取决于服务器的性能和数据量的大小。 4. 在添加字段后,需要考虑对该字段进行相应的操作,如插入默认值、更新现有数据等。可以使用UPDATE语句批量更新现有数据,以确保新字段的数据和已存在的数据保持一致。 需要注意的是,在进行表结构变更操作时,建议先备份数据,以避免意外情况造成数据丢失或损坏。另外,在大数据量表上进行结构变更操作时,建议在低峰期进行,以减少对系统性能的影响。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值