最近由于業務需要,要更新一個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
新聞熱點
疑難解答