web-dev-qa-db-fra.com

Résolution du problème avec MySQL.Proc après la mise à niveau de MySQL de 5.0. * À 5.1. *

Comme beaucoup d'autres, nous avons mis à niveau notre instance de MySQL de 5.0. * À 5.1.49. Depuis lors, nous rencontrons une erreur qui se répète lorsque nous effectuons certaines actions:

  • Tenter de visualiser ou de gérer une procédure stockée
  • Tenter d'insérer dans une table après avoir ajouté une gâchette pour insertion des actions
  • Exécution SELECT LENGHT(description), id FROM table (avec l'orthographe quagilant ... quand LENGTH a été orthographié correctement, l'erreur n'a pas affiché)

L'erreur en question:

Le nombre de colonnes de mysql.proc est faux. Attendu 20, trouvé 16. La table est probablement corrompue.

Cela a été signalé comme un bogue (essentiellement, manque de compatibilité en arrière), mais il semble y avoir une certaine confusion quant à la manière de résoudre le problème:

  • La documentation de MySQL dit que la solution consiste à reposer vos procédures stockées après la mise à niveau 5.1, puis à les restaurer. Le rapport de bogue que j'ai mentionné précédemment montre que cela a des résultats douteux.
  • Le rapport de bogue suggère d'exécuter mysql_upgrade comme solution possible (bien que certains concernant des avertissements). Cependant, il a été rapporté ailleurs que cette solution ne fonctionne pas toujours.

Je suis dans la situation malheureuse de ne pas avoir de boîte de test sous laquelle tester des solutions possibles lorsque notre boîte de développement est en attente d'une mise à niveau du système d'exploitation pour nous permettre d'installer les versions de MySQL que nous souhaitons installer. Je suis hésitant à essayer toute solution sur notre environnement de production, à moins que cela n'ait été vérifié comme travaillant par des personnes qui ont rencontré cette question.

Quel est le moyen correct de résoudre ce problème en dehors de l'attente d'un correctif officiel ou d'une solution de MySQL?

Tout en perdant nos procédures stockées n'est pas idéal, c'est aussi un itinéraire que nous sommes disposés à prendre pour résoudre le problème à condition qu'il n'y ait pas de meilleures alternatives et que cela résoudra le problème proprement.

5
Shaun

Installez une nouvelle copie de la même version de MySQL sur un autre ordinateur et copiez sa table mysql.proc à votre serveur cassé. Ça va vous obtenir une table propre et correcte. Ensuite, recréez vos procédures stockées.

6
Dan Grossman

J'avais cette question et je pensais que je mentionnerais que courir "mysql_upgrade --force" résolue pour moi.

J'ai mis à niveau de 5,0 à 5.1 à 5.5. L'intéressant c'est que j'avais déjà exécuté mysql_upgrade, c'est pourquoi je devais ajouter l'option --force. J'espère que cela aide quelqu'un.

7
Kingston

Installé SUSE Linux 11.4 sur mon nouveau système de développement. La base de données MySQL était une mise à niveau de la version précédente de mon ancienne boîte SUSE 11.1. Après avoir copié mon PHP sources et configurez mon Apache et PHP, j'ai constaté que MySQL se plaint du fichier mysql.proc ayant le mauvais nombre de colonnes lorsque J'ai frappé une page qui a tenté de se connecter à la base de données.

La commande mysql_upgrade était alors supportée sur ma connexion bien que je l'ai eue dans MySQL Workbench. Un moyen rapide et sale de corriger la nouvelle version de MySQL consistait à utiliser le MySQL Workbench pour créer une "routine" autrement appelée procédure stockée. Ce n'était rien de plus qu'un choix sur une table.

La page frappe la base de données puis est venue à droite. La nouvelle version de la base de données réécrit la table (ou le fichier) mysql.proc avec le bon nombre de colonnes car j'ai créé une nouvelle procédure stockée. Je sauvegarderai tout le code des anciens, alors après cela, il ne s'agissait simplement de les recharger.

1
Martin Wirth