出现这个问题可能是mysql数据库版本升级导致的,可以使用mysql_upgrade升级修复下。我的情况是将mysql从5.1升级至5.5后,发现存储过程不能用了,报的错误是Cannot load from mysql.proc. The table is probably corrupted。
解决办法也很简单
1、进入mysql安装目录的bin目录,执行mysql_upgrade命令文件。我的是windows,所以很简单
执行下此文件,大概可以看到如下信息
Looking for 'mysql' as: mysql
Looking for 'mysqlcheck' as: mysqlcheck Running 'mysqlcheck' with connection arguments: '--port=3306' '--socket=/my/base/mysql.sock' Running 'mysqlcheck' with connection arguments: '--port=3306' '--socket=/my/base/mysql.sock' 。。。。。。。。。。。。。。。。。。。
mysql.columns_priv OK
mysql.db OK
mysql.event OK
mysql.func OK
mysql.general_log OK
mysql.help_category OK
mysql.help_keyword OK
mysql.help_relation OK
mysql.help_topic OK
mysql.host OK
mysql.ndb_binlog_index OK
mysql.plugin OK
mysql.proc OK
mysql.procs_priv OK
mysql.proxies_priv OK 。。。。。。。。。。。。。。。。。。。。
mysql.user OK
test.test OK R
unning 'mysql_fix_privilege_tables'... OK
当出现许多ok之后,基本上就修复完毕。查询ok。
2、有童鞋可能执行此命令后仍然不能解决问题,可以执行下面这步
ALTER TABLE proc
MODIFY COLUMN comment text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL AFTER sql_mode;
在5.1中mysql.proc表的comment字段是varchar(64):
comment char(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT ”,
但在5.5中应该是text:
comment text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, So,执行下面的语句,把这个字段修改为text,就彻底OK了
总结:运行mysql_upgrade命令即可。此命令会在数据目录下生成一个文本文件mysql_upgrade_info,里面的内容为升级后的数据库版本。