最近需要给公司的某系统的表进行千万级别数据的加密。但是该系统作为公司的基础系统,外部业务访问频次高,且该系统无法做出长时间的停机挂牌,因此需要提供一套方案,尽量压缩系统的停机时间,在尽可能短的时间内完成千万级别的数据加密任务。
方案的基本思路是:
以8月20日作为分界点,建立临时表,备份8月20日之前的表数据。对该备份表进行加密处理。8月20日以后的数据作为增量数据,进行增量的处理。存量数据和增量数据在处理完成后,任务结束。
(1)DB对需要加密的两张表进行备份为table_a_bak_20160820,table_b_bak_20160820,并进行加密处理。加密完成,验证。(这一部分未明确操作方法,应该是通过dump等方式),无停机,10点半至12点半完成,耗时约2个小时。
(2)系统停机。
(3)创建增量数据备份表,在备份表中进行增量数据加密处理。耗时约0.5小时
create table table_a_bak_20160823 like table_a;
create table table_b_bak_20160823 like table_b;
insert into table_a_20160823 select * from table_a where upt_time >= str_to_date(‘2016-08-20’,’%Y-%M-%d’);
insert into table_b_20160823 select * from table_b where upt_time >= str_to_date(‘2016-08-20’,’%Y-%M-%d’);
(4)将增量数据合并到存量的数据备份表中。
replace into table_a_bak_20160820 select * from table_a_bak_20160823;
replace into table_b_bak_20160820 select * from table_b_bak_20160823;
(5)此时增量数据均以合并到存量备份表当中。耗时约5分钟。
rename table table_a to per table_a_tmp;
rename table table_a_bak_20160820 to table_a;
rename table table_b to per table_b_tmp;
rename table table_b_bak_20160820 to table_b;
(5)系统重新启动,完成千万级别数据的数据更改。