数据库字段扩容与OSC

背景

用户账号中心之前将手机号以明文方式存MySql,合规要求整改,要将数据库中的手机号脱敏。但加密过后的密文长度为65,数据库字段的长度为11,因此要 Modify 为 varchar(100)。但这个表的数据量不小,开发环境都有一千万条记录,贸然扩容肯定会引起生产环境长时间锁表,绝对不可取。

解决方法

OSC,全称 pt-online-schema-change,是一个热修改工具。咨询DBA后,建议OSC执行DDL,可以缩短锁表时间,但整个DDL执行时间会变长。

简单记录下原理:

  1. 创建一张临时表(表结构则是修改后的表结构),并从源数据表向新表导入数据
  2. 创建触发器,用于记录从导入数据期间所有操作表(增删改)的操作,主要用于拷贝后执行触发器保证数据不会丢失
  3. 导入数据结束后短暂锁表然后执行触发器
  4. 修改源表名为old表,把新表的表名修改为源表名,删除old表
  5. 删除触发器

可以发现,由于引入了触发器,扩容过程中也可以做DML了,锁表的时间减少,但执行时间变长。

Reference

[1] 线上数据库字段扩容引发业务方超时总结

posted @ 2020-03-24 17:14  Casaa  阅读(315)  评论(0编辑  收藏  举报