最近由于业务需要,要更新一个MySQL大表的部分字段的comment,于是,首先想到的是用alter table xxx modify。本以为mysql的modify命令可以做到只是简单修改frm文件,然而它有一个致命的弱点,那就是modify命令必须加上字段定义。官方语法如下:
| MODIFY [COLUMN] col_name column_definition [FIRST | AFTER col_name]可以看到,一定需要加上column_definition。所以,这样一来,modify操作肯定就不是简单的修改frm文件了,他会遍历表里面每一行数据,然后修改该字段。这对于一个上亿条数据的大表来说,简直就是噩梦。这样的操作可能需要几个小时甚至几天,于是我果断抛弃了这一方案。
后来我想了一下,comment不就是在frm文件里面,如果我们能够自己修改frm文件,那不就可以了。于是便有了如下方案:
①:在test库下建一个与原表a一模一样的表test.a,除了要更新的那几个字段的comment不一样。②:关闭mysql。③:mv a.frm /tmp④:cp -p test/a.frm ./ (-p 为了保证权限等属性没有被改动)⑤:启动mysqldone。果然可以。
注:我这个mysql版本是:5.5.40-36.1
新闻热点
疑难解答