在将 MySQL 从 5.0.* 升级到 5.1.* 后解决 mysql.proc 的问题

Sha*_*aun 6 mysql mysql-5 stored-procedures

像许多其他人一样,我们将 MySQL 实例从 5.0.* 升级到 5.1.49。从那以后,我们遇到了一个错误,当我们执行某些操作时它会重复:

  • 试图查看或运行存储过程
  • 在为 ON INSERT 操作添加触发器后尝试插入表
  • 正在执行SELECT LENGHT(description), id FROM table(拼写错误......LENGTH拼写正确时,错误未显示)

有问题的错误:

mysql.proc 的列数错误。预期为 20,发现为 16。该表可能已损坏。

已被报告为错误(基本上,缺乏向后兼容性),但似乎对如何解决此问题有些困惑:

  • MySQL 的文档说解决方案是在升级到 5.1 后再次转储您的存储过程,然后再次恢复它们。我之前提到的错误报告表明这有可疑的结果。
  • 错误报告建议将运行mysql_upgrade作为可能的解决方案(尽管有一些有关警告)。然而,据其他地方报道,这种解决方案并不总是有效。

不幸的是,我没有一个测试盒来测试可能的解决方案,因为我们的开发盒正在等待操作系统升级,以允许我们安装我们想要安装的 MySQL 版本。我不愿意在我们的生产环境中尝试任何解决方案,除非遇到这个问题的人已经验证它可以工作。

除了等待 MySQL 的官方补丁或解决方案之外,解决此问题的正确方法是什么?

虽然丢失我们的存储过程并不理想,但它也是我们愿意采取的解决问题的途径,前提是没有更好的替代方案并且可以干净利落地解决问题。

小智 7

我遇到了这个问题,并认为我会提到运行“mysql_upgrade --force”为我修复了它。

我从 5.0 升级到 5.1 到 5.5。有趣的是我已经运行了 mysql_upgrade 这就是为什么我需要添加 --force 选项。希望这可以帮助某人。


Dan*_*man 6

在另一台计算机上安装相同版本的 MySQL 的新副本,并将其 mysql.proc 表复制到损坏的服务器。这会给你一张干净、正确的桌子。然后,重新创建您的存储过程。