| 2.5 Changer de version de MySQL
 2 Installer MySQL
 Manuel de Référence MySQL 4.1 : Version Française
 
 . Passer en de version 4.1 en version 5.0
 ->Passer de la version 4.0 à la version 4.1
 . Passer de la version 3.23 à la version 4.0
 . Passer de la version 3.22 à la version 3.23
 . Passer de la version 3.21 à la version 3.22
 . Passer de la version 3.20 à la version 3.21
 . Mettre à jour MySQL sous Windows
 . Mise à jour des tables de droits
 . Migrer depuis une autre architecture
 
 
 | 
  2.5.2 Passer de la version 4.0 à la version 4.1 
  En général, vous devez suivre les instructions suivantes pour passer de
MySQL 4.0 à 4.1 : 
Plusieurs comportements visibles ont changé entre MySQL 4.0 et MySQL 4.1 
pour corriger des bogues critiques et rendre MySQL plus compatible avec
le standard SQL. Ces changements peuvent affecter votre application.
Vérifiez la liste des modifications de cette section, vous voir si elles
ont un impact sur vos applications.
Lisez la liste des nouveautés de la version 4.1 pour identifier les nouvelles
fonctionnalités significatives pour vos projets.
 Changements de la version 4.1.x (Gamma) .
Si vous faites fonctionner MySQL sur Windows, voyez  Mise à jour de MySQL sous Windows . 
Note importante :
 
Les premières versions de MySQL 4.1 sur Windows ne contiennent pas de programme
d'installation. Voyez  Installer les binaires sous Windows  pour des instructions sur
l'installation d'une telle distribution.
Après mise à jour du serveur, mettez à jour les tables de droits, pour accepter
des colonnes  
Password
  plus grande. La procédure utilise le script 
 
mysql_fix_privilege_tables
  et est décrite dans la section 
 Mise à jour des tables de droits .  Les implications du changement de gestion du mot
de passe est décrit plus loin dans cette section. Si vous ne le faîtes pas,
MySQL ne pourra pas utiliser le protocole sécuritaire pour l'identification.
Si vous utilisez la réplication, voyez la section  Mettre à jour une architecture de réplication 
pour mettre à jour votre installation.
Le moteur de table Berkeley DB table est passé en version DB 4.1 (depuis la 3.2),
et il dispose d'un nouveau format de log. Si vous devez revenir en version
4.0, vous devrez utiliser  
mysqldump
  pour exporter vos tables  
BDB
  au format
texte, et effacer tout les fichiers  
log.XXXXXXXXXX
  avant de redémarrer 
le serveur MySQL 4.0 et de réimporter les données.
Le support des jeux de caractères a été amélioré. si vous avez des tables
qui contiennent des données représentées dans un jeu de caractères que MySQL
4.1 supporte directement, vous pouvez convertir ces colonnes vers le 
bon jeu de caractères avec les instructions du chapitre  Conversion des colonnes de caractères version 4.0 en format 4.1 .
Si vous utilisez un vieux module  
DBD-mysql
 
( 
Msql-MySQL-modules
 ) vous devez mettre à jour le module 
 
DBD-mysql
 . Tout ce qui est plus récent que  
DBD-mysql
  2.xx 
doit convenir.Si vous ne mettez pas à jour, certaines commandes telles que  
DBI->do()
  ne
rapporteront pas correctement les erreurs.
L'option  
--defaults-file=option-file-name
  vous donnera une erreur si le fichier
d'option n'existe pas.
 
Certains des comportement 4.1 peuvent être testés en version 4.0 avant de
passer à la 4.1. Nous avons ajouté l'option  
--new
  de démarrage de  
mysqld
 
pour les versions supérieure à la 4.0.12.
 Options de ligne de commande 
mysqld
 .
Cette option vous donne le comportement de la version 4.1 pour les modifications
les plus critiques. Vous pouvez aussi activer ces comportements pour une
connexion particulière en utilisant la commande  
SET @@new=1
 , 
pour désactiver cette option avec  
SET @@new=0
 . 
Si vous pensez que certains des changements de la version 4.1 vous affecteront,
nous vous recommandons, avant de passer en version 4.1, de télécharger la
dernière version 4.0, et de l'exécuter avec l'option  
--new
  en plus
de vos configuration habituelles : 
De cette manière, vous pouvez tester le comportement de la version 4.1 depuis votre
serveur 4.0. Cela vous donnera le temps de supprimer les anomalies, et de passer
sans problème à la version 4.1, ultérieurement. En faisant cela, vous 
n'allez pas rencontrer de bug accidentel lors du changement, que vous n'aurez
pas corrigé grâce à  
--new
 . 
Voici une liste complète, vous indiquant ce à quoi vous devez faire
attention lors du changement de version : 
Modification du serveur : 
Toutes les colonnes et tables ont désormais un jeu de caractères, qui
apparaît dans le résultat de la commande  
SHOW CREATE TABLE
  et
 
mysqldump
 .  Jeux de caractères .
(MySQL 4.0.6 et plus récent peuvent lire les
nouveaux fichiers de dump, mais pas les plus anciennes versions de MySQL).
Cela ne doit pas affecter les applications qui n'utilisent qu'un seul jeu de 
caractères.
Le format de définition de table du fichier  
.frm
  a légèrement 
changé en version 4.1.  Les versions de MySQL 4.0 à partir de la 4.0.11 peuvent
lire le nouveau format  
.frm
   directement, mais les versions plus anciennes
ne le peuvent pas. Si vous devez déplacer des tables de la version 4.1 
vers une version 4.0.11, passez plutôt par  
mysqldump
 .
 
mysqldump
, exporter les structures de tables et les données .
Note importante :
  si vous mettez à jour en version  
InnoDB
 -4.1.1 ou
plus récent, il sera difficile de revenir à une version plus ancienne, 4.0 or 4.1.0! 
Ceci est dû aux versions de  
InnoDB
  qui ne reconnaissent pas les espaces
de table multiples.
Si vous utilisez plusieurs serveurs sur la même machine Windows, vous
devriez utiliser l'option  
--shared_memory_base_name
  avec des
valeurs différentes sur toutes les machines.
L'interface des fonctions  
UDF
  agrégeantes a un peu changé. Vous devez
commencer par déclarer une fonction  
xxx_clear()
  pour chaque
fonction agrégeante  
XXX()
 . 
Evolution du client :
 
Evolution du SQL :
mysqldump
  dispose des options  
--opt
  et  
--quote-names
 ,
qui sont activées par défaut. Vous pouvez les désactiver avec 
 
--skip-opt
  et  
--skip-quote-names
 . 
Changement de l'interface C :
La comparaison de chaînes fonctionne maintenant conformément au standard SQL : 
au lieu de supprimer les espaces de fin de chaîne avant la comparaison, nous
complétons les chaînes courte avec des espaces. Le problème est que maintenant,
 
'a' > 'a\t'
 , ce qui n'était pas le cas avant. Si vous avez des tables avec
des colonnes  
CHAR
  ou  
VARCHAR
  dont le dernier caractères peut être
de code  
ASCII(32)
  ou plus petit, vous devez utiliser la commande 
 
REPAIR TABLE
  ou  
myisamchk
 .
Lorsque vous utilisez des commandes  
DELETE
  multi-tables, vous devez utiliser
les alias de tables que vous voulez effacer, et non pas le véritable nom de 
la table. Par exemple, au lieu de : 
faîtes :| 
DELETE test FROM test AS t1, test2 WHERE ...
 | 
 | 
DELETE t1 FROM test AS t1, test2 WHERE ...
 | 
TIMESTAMP
  est maintenant retourné comme une chaîne, au format 
 
'YYYY-MM-DD HH:MM:SS'
 . L'option  
--new
  peut être utilisée depuis
la version 4.0.12, pour que le serveur adopte le comportement de la version
4.1 pour ce point. Si vous voulez recevoir la version entière de la valeur,
comme en version 4.0, il suffit d'ajouter +0 à chaque colonne  
TIMESTAMP
  :  
La largeur d'affichage des colonnes  
TIMESTAMP
  ne sont plus supportées.
Par exemple, si vous déclarez une colonne de type  
TIMESTAMP(10)
 , le
nombre  
(10)
  est ignoré.Ces changements sont nécessaires pour respecter les standards SQL. Dans une
future version, une autre modification aura lieu, mais restera compatible
avec celle-ci : la taille de la valeur  
TIMESTAMP
  indiquera le 
nombre de chiffres voulu pour les fractions de secondes.| 
mysql> SELECT ts_col + 0 FROM tbl_name;
 | 
Les valeurs binaires, comme  
0xFFDF
 , sont maintenant supposées être
des chaînes et non pas des nombres. Cela corrige des problèmes avec les jeux
de caractères, où il est plus pratique d'insérer une chaîne comme une chaîne
binaire. Avec cette modification, vous devez utiliser la fonction 
 
CAST()
  si vous voulez comparer des valeurs binaires avec les entiers :  
Si vous n'utilisez pas  
CAST()
 , une comparaison lexicale de la chaîne
aura lieu  :| 
mysql> SELECT CAST(0xFEFF AS UNSIGNED INTEGER) < CAST(0xFF AS UNSIGNED INTEGER);-> 0
 | 
 Utiliser des chaînes binaires dans un contexte numérique, ou bien comparer
des valeurs avec les opérateurs comme  
=
  devrait fonctionner comme auparavant.
L'option  
--new
  peut être utilisée à partir de la version 4.0.13 pour que le serveur
4.0 se comporte comme le serveur 4.1.| 
mysql> SELECT 0xFEFF < 0xFF;-> 1
 | 
Les fonctions qui retournent des  
DATE
 ,  
DATETIME
 , ou  
TIME
  
sont désormais traitées lors de leur arrivée sur le client.
Par exemple, en MySQL 4.1, vous obtenez le résultat suivant : 
En MySQL 4.0, le résultat est différent :| 
mysql> SELECT CAST("2001-1-1" as DATETIME);-> '2001-01-01 00:00:00'
 | 
 | 
mysql> SELECT CAST("2001-1-1" as DATETIME);-> '2001-01-01'
 | 
Les valeurs  
DEFAULT
  ne peuvent plus être spécifiées pour les colonnes
de type  
AUTO_INCREMENT
 . En 4.0, la clause  
DEFAULT
  est ignorée
silencieusement. En 4.1, une erreur survient.
LIMIT
  n'accepte plus les arguments négatifs.
Utilisez 18446744073709551615 au lieu de -1.
SERIALIZE
  n'est plus une option valide pour la variable  
sql_mode
 .
Il faut utiliser la commande  
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
 
à la place.  
SERIALIZE
  n'est plus valide comme option de  
--sql-mode
  
pour  
mysqld
 , non plus. Utilisez  
--transaction-isolation=SERIALIZABLE
 .
 
Gestion des mots de passe :
Certaines fonctions C telles que  
mysql_real_query()
  retournent maintenant
 
1
  en cas d'erreur, et non plus  
-1
 . Vous aurez peut être à changer
certaines anciennes applications comme ceci :  
Modifiez le test de comparaison à 0 :| 
if (mysql_real_query(mysql_object, query, query_length) == -1){
 printf("Erreur");
 }
 | 
 | 
if (mysql_real_query(mysql_object, query, query_length) != 0){
 printf("Erreur");
 }
 | 
 
Le mécanisme de mot de passe a changé en version 4.1 pour assurer une
meilleure sécurité, mais cela pose des problèmes de compatibilité, si
vous avez encore des clients qui utilisent les bibliothèques 4.0 ou
plus ancien. Il est probable que vous ayez de tels clients, s'ils se
connectent depuis des serveurs distants qui n'ont pas encore adopté
la version 4.0. La liste suivante présente les stratégies de mise 
à jour. Elle représentent différents compromis entre la compatibilité
et la sécurité.
 
D'autres informations sur le nouvel algorithme de protection des mots de passe
et les opérations les concernants sont disponibles dans la section  Chiffrement des mots de passe en MySQL 4.1 .
 
Client does not support authentication protocol
 .
Ne passez pas en version 4.1. Aucun comportement ne changera, mais
vous ne pourrez pas utiliser les nouvelles fonctionnalités du protocole
de la version 4.1. MySQL a amélioré le protocole
client/serveur de la version 4.1, en ajoutant les commandes préparées et
le support des jeux de caractères.
 Commandes préparées en C .
Passez en version 4.1, utilisez le script  
mysql_fix_privilege_tables
  pour
agrandir la colonne  
Password
  de la table  
user
  pour qu'elle
puisse contenir les nouveaux hashs de mots de passe. Mais lancez le serveur
avec l'option  
--old-passwords
  pour que les clients pre-4.1 puissent
continuer d'utiliser leurs anciens comptes.
Finalement, lorsque tous les clients seront passés en version 4.1, vous pourrez
cesser d'utiliser l'option  
--old-passwords
 . Vous pouvez aussi changer
les mots de passe de vos comptes MySQL pour adopter le nouveau format.
Passez en version 4.1 et utilisez le script  
mysql_fix_privilege_tables
  pour
aggrandir la colonne  
Password
  de la table  
user
 . Si vous savez que tous
les clients sont passés en version 4.1, n'utilisez pas l'option
 
--old-passwords
 . Au lieu de cela, changez les mots de passe de tous les
comptes, pour qu'ils adoptent le nouveau format. Une installation 100% 4.1
est la plus sûre. |