mysql 4.0, 4.1 et le charset
Imaginons que vous ayez une journée très chargée, et que pour des raisons plus qu’obscures votre serveur Apache/PHP/MySQL ne veut plus marcher : il faut tout réinstaller.
La logique voudrait que dans ce cas, on tente de réinstaller exactement la même chose pour faire vite et pour éviter quelques problèmes de compatibilité.
Sauf quand on tombe sur le message suivant en essayant de récupérer les RPM de MySQL 4.0.x (version précédemment installée donc):
Because version 4.0.* of MySQL Server are in such low demand we have decided to stop hosting binaries of these older versions.
[Attention : Post spécial geek.]
Soyons joueur, installons MySQL 4.1.x, ça doit pas faire bien mal.
Hop, petite sauvegarde de mes données SQL (notez bien ça les enfants : c’est très important, il faut toujours faire une sauvegarde!), une bonne grosse copie du répertoire pour faire vite. J’ai plus de serveur pour faire des jolis dumps de toute façon.
J’ai découvert au passage que j’avais une glibc un peu vieillote : 2.2.5. (Ne vous moquez pas svp.)
Alors quand on voit la page de téléchargement, il est très clair que je dois me jeter sur la version Linux x86 generic RPM (statically linked against glibc 2.2.5)
.
Ca m’évite de mettre à jour glibc vers une version plus récente, parce que c’est le genre de mise à jour qui me fait peur. Facile.
Je récupère le RPM, on tente l’installation, et là paf, ça plait pas à Monsieur. Monsieur le RPM veut faire son business avec son pote coreutils. Je me renseigne donc sur coreutils, et là qu’est ce que je découvre : l’installation du RPM de coreutils exige glibc_2.3. (Ok, maintenant vous pouvez rire.)
Bon heuresement, il existe une solution (un peu crade j’avoue): le RPM bidon qui se fait passer pour coreutils (faut bien sûr que fileutils et toute la clique soient là derrière sinon ça vous avance à rien hein).
Hop, on lance l’installation des RPM MySQL. Recompilation PHP et Apache. On redémarre Apache, on serre les fesses et… YOUPI CA MARCHE !
Hop, je relance un navigateur, je lance mon blog et… ET MERDE, il y a un problème de charset.
Tous les “é” et autres accents se sont transformés en “é” et autres hiéroglyphes.
Je vais donc lire la doc et je découvre alors que ce que j’ai fait comme un con, c’est de passer directement à MySQL 4.1.x sans préparer la mise à jour avant.
Olalalala, grosse erreur. J’aurais mieux fait de repartir à la recherche de mes rpm de la 4.0.x, même s’il fallait y passer une demi-heure à les chercher…
Parce que comme je n’avais pas le temps de RTFM (!@#), je n’ai pas vu qu’avec ce changement de version mineur, il y avait une mise à jour majeure : la gestion étendue des charsets, et surtout de l’UTF-8.
Et bien sûr, pour nous simplifier la vie, MySQL n’a pas d’outil de conversion prévu pour ça, donc quand on a des données UTF-8 enregistrées dans une base en latin1, on a plus qu’à tout convertir à la main. Non, je rigole, c’était une blagounette. Heuresement, MySQL a une superbe idée pour vous aider à convertir vos données ! La bonne blague ! Si quelqu’un a vraiment envie de convertir toute une base avec cette méthode, il me fait signe.
Et de toute façon, dans mon cas, ça ne m’aide pas, parce qu’il faut préparer ce travail sur le serveur 4.0.x auquel je n’avais plus accès.
Donc, si toi le petit gars qui arrive par les mystérieuses voies de google et qui est plus ou moins dans une situation merdique comme la mienne, sache que je n’ai pas de solution miracle pour toi. Mais si tu en as une, je serais ravi de la connaître.
En attendant, un truc chiant mais qui marche : reproduire l’ancienne installation et faire un dump.
Sur une autre machine, réinstallation de MySQL 4.0.x, créer les bases vides sur ce serveur, y copier les fichiers de données provenant de la sauvegarde (si tu en as une, sinon tu peux pleurer), constater que tout est ok dans phpMyAdmin (par exemple), faire un dump de la base, et enfin, l’importer sur le nouveau serveur en spécifiant le bon charset (la plupart du temps ça sera utf-8).
Le mieux étant quand même de faire un dump de toutes les bases _avant_ la mise à jour…
T’as déjà jeté un œil à ca : http://www.mysql.com/products/tools/migration-toolkit/ ?
Commentaire par AlSquire — Vendredi 12 octobre 2007 @ 14:03
Ca sent le truc qui va me demander une glibc supérieure à 2.3 ;(
Commentaire par Mr Peer — Samedi 13 octobre 2007 @ 14:04