和其他许多人一样,我们将MySQL实例从5.0.*升级到5.1.49。从那时起,我们就遇到了一个错误,当我们执行某些操作时,会重复这个错误:
SELECT LENGHT(description), id FROM table (拼写错误.当LENGTH拼写正确时,错误不会显示)所涉错误:
mysql.proc的列计数是错误的。预期为20,发现16。表可能已损坏。
这个已经被报告为一种错误 (基本上,缺乏向后兼容性),但是对于如何解决这个问题似乎有些困惑:
mysql_upgrade作为一种可能的解决方案(尽管有一些值得关注的警告)。然而,在其他地方报告一直认为这个解决方案并不总是有效的。不幸的是,我没有一个测试盒来测试可能的解决方案,因为我们的开发盒正在等待操作系统升级,以便安装我们想要安装的MySQL版本。我不愿意尝试任何解决方案,我们的生产环境,除非它已经被证实是工作的人谁已经遇到这个问题。
虽然丢失存储过程并不理想,但如果没有更好的替代方案,并且它将干净地解决问题,这也是我们愿意采取的解决问题的途径。
发布于 2011-01-28 08:33:24
在另一台计算机上安装同一版本MySQL的新副本,并将其mysql.proc表复制到故障服务器。这样你就能得到一张干净的,正确的桌子。然后,重新创建存储过程。
发布于 2011-11-10 23:31:19
我有这个问题,我想我应该提到运行"mysql_upgrade --force“为我解决了这个问题。
我从5.0升级到5.1到5.5。有趣的是,我已经运行了mysql_upgrade,这就是为什么我需要添加-force选项。希望这能帮上忙。
发布于 2011-09-03 01:47:57
在我的新开发系统上安装了Suse Linux 11.4。MySQL数据库是从旧Suse 11.1框上的前一个版本升级而来的。在复制了我的PHP源代码并配置了我的Apache和PHP服务器之后,我发现当我点击一个试图连接到数据库的页面时,MySQL在抱怨mysql.proc文件的列数错误。
mysql_upgrade命令当时对我的连接犹豫不决,尽管我在MySQL工作台中设置了它。修复MySQL新版本的一个快速而肮脏的方法是使用MySQL工作台创建一个“例程”,或者称为存储过程。这只不过是一张桌子上的一个选择。
访问数据库的页面就出现了。新的数据库版本用正确的列数重写了mysql.proc表(或文件),因为我创建了一个新的存储过程。我备份了旧代码的所有代码,所以之后仅仅是重新加载它们的问题。
https://dba.stackexchange.com/questions/956
复制相似问题