Migration MySQL 5.1 à 5.5

Sur un serveur que je maintiens de temps en temps (qui utilise un panel d’administration), durant un upgrade MySQL server est passé en version 5.5
Il se trouve que cette version semble avoir un ‘bug’ (en gros si vous pouvez attendre …) une fois le serveur mis à jour, il y a de grande chance que vous ne puissiez plus vous connecter avec comme message :

error 1524 Plugin 'none' is not loaded

Ce problème apparaît quand un programme a ajouté des colonnes à la table user de la base mysql
Suite à l’analyse trouvée sur le site : jawama j’ai du effectivement changer l’ordre des colonnes !! (moi j’appelle ça un bug …)
Mais comment exécuter des requêtes SQL quand on ne peut pas se connecter ???

  • Trouver un autre PC ou vous pouvez installer un Mysql-Server 5.5 (on va l’appeler serveur ‘bis’)
  • Sur votre serveur malade arrêter MySQL (à grand coup de kill -9, je n’ai pas trouvé d’autres solutions) :
#  ps -aef | grep mysql | grep -v "grep"
root      5140     1  0 janv.02 ?      00:00:00 /bin/sh /usr/bin/mysqld_safe
mysql     5364  5140  0 janv.02 ?      00:00:26 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin
# kill -9 5140 (Exemples à adapter bien entendu)
# kill -9 5364
  • Déplacer le schéma ‘mysql’ vers ‘mysql2’ (ça paraît brutal, mais à mon grand étonnement ça fonctionne)
# mv /var/lib/mysql/mysql /var/lib/mysql/mysql2
  • Recopier le schéma mysql de ‘bis’
# scp -r root@bis:/var/lib/mysql/mysql /var/lib/mysql
# chown mysql:mysql /var/lib/mysql/mysql -R
# service mysql restart

Si le but est juste de redémarrer MySQL, on peut s’arrêter la.
S’il faut adapter l’ancien schéma, alors on continu.

# mysql -u root -p (si vous avez défini un mot de passe pour root sur bis)
mysql> use mysql2
mysql> ALTER TABLE `user` MODIFY COLUMN `plugin` CHAR(64) COLLATE utf8_bin DEFAULT '' AFTER `max_user_connections`;
mysql> ALTER TABLE `user` MODIFY COLUMN `authentication_string` TEXT COLLATE utf8_bin AFTER `plugin`;
mysql> quit
# service mysql stop
# mv /var/lib/mysql/mysql /var/lib/mysql/mysql3
# mv /var/lib/mysql/mysq2 /var/lib/mysql/mysql
# mv /var/lib/mysql/mysql3 /var/lib/mysql/mysql2
# service mysql start

Voilà une grosse bidouille pour commencer l’année !

Intéressant dis donc, note perso ne pas MAJ mysql de suite :stuck_out_tongue:
par contre cela ne t’as pas générer des problèmes avec les users de tes bases ?

Une fois que tu restaures correctement le schéma MySQL, tout revient normal.

Que désignes tu par les schémas mysql ? :astonished:
Tout ce qui est contenu dans le répertoire /var/lib/mysql ?

C’est pour faire une analogie avec Oracle (vu que c’est la même société), mais tu peux remplacer par “base”, ce que je voulais dire c’est à mon grand étonnement, tu copies une base ‘truc’ en ‘machin’ (c’est à dire renommer le dossier dans /usr/lib/mysql) et ça suffit à changer le nom de la base. C’est grâce à ça que j’ai pu redémarrer MySQL après avoir recopié le dossier (et son contenu) ‘/usr/lib/mysql/mysql’ d’un autre serveur.