Fising's Blog

all about web application development

MySQL 索引异常问题修复

今天在部署测试代码到测试环境,需要响应做数据库结构调整:

ALTER TABLE user ADD COLUMN nickname varchar(60) DEFAULT NULL COMMENT ‘昵称’;

本以为很简单的调整,没想到数据库却提示错误:duplicate primary ‘54336’ 然而 SELECT * FORM user WHERE id = 54336 查无此行。

奇怪的是,我这句 sql 仅仅是新增一列,并没有对索引做任何操作。于是就想到可能是索引坏掉了。

后来想到一个解决方案:drop 掉这个数据库,重新 create,然后导入备份数据。让索引重建。经过实测是可以的。但是这样做,不够优雅,这是测试环境数据库,尚可以这样操作,如果是生产,是万万不能的。

继续 google,得到一个方法:mysqlcheck –auto-repair -uroot -p {dbname} 实测OK。

进一步想想,任何可以使得索引重建的办法应该都可以有效。例如,删除索引重建 或者 执行sql语句: repair table {tablename}。只可惜数据库已经被修复,无法重现问题,也就无从验证。

发表评论