| 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.3 Passer de la version 3.23 à la version 4.0   
 
En général, ce que vous devez faire pour passer en version 4.0, à partir
d'une version 3.23 : 
 
MySQL 4.0 va fonctionner même si vous ne suivez pas les instructions
ci-dessus, mais il ne sera pas capable de profiter des nouveaux droits
disponibles avec MySQL 4.0 et vous pourriez rencontrer des problèmes
lors de l'évolution vers MySQL 4.1 ou plus récent. Les fichiers  
ISAM
  
fonctionne toujours en MySQL 4.0 mais il est abandonné, et il sera désactivé en 
MySQL 5.0.
Vérifiez que les changements de la liste ci-dessous n'affectent pas votre
application.
Lisez les nouveautés de la version 4.0, pour savoir quelles nouvelles
fonctionnalités vous allez découvrir en 4.0.
 Changements de la version 4.0.x (Production) .
Après mise à jour, 
exécutez le script  
mysql_fix_privilege_tables
  pour ajouter de nouveaux
droits et fonctionnalités à la table MySQL.
Voyez  Mise à jour des tables de droits .
Editez les scripts de démarrage MySQL pour les fichiers de configuration pour
ne plus utiliser les options abandonnées, listées ci-dessous.
Convertissez vos vieilles tables  
ISAM
  en tables  
MyISAM
  avec la 
commande :  
mysql_convert_table_format database
 . Pour convertir toutes
les tables d'une base de données, utilisez cette commande : 
Notez que cela ne doit être fait que si toutes 
les tables de la base sont des tables  
ISAM
  ou  
MyISAM
 .
Pour éviter de convertir toutes les tables d'une base au format
 
MyISAM
 , vous pouvez explicitement utiliser les noms de vos tables
 
ISAM
  après le nom de la base dans la commande.
Vous pouvez aussi utiliser la commande  
ALTER TABLE table_name TYPE=MyISAM
 
sur toutes les tables  
ISAM
 .Les tables individuelles peuvent être mises au format  
MyISAM
  en utilisant la
commande  
ALTER TABLE
  suivante, pour chaque table :| 
shell> mysql_convert_table_format database db_name
 | 
 Pour connaître le type d'une table, utilisez cette commande :| 
mysql> ALTER TABLE tbl_name TYPE=MyISAM;
 | 
 | 
mysql> SHOW TABLE STATUS LIKE 'tbl_name';
 | 
Assurez-vous que vous n'avez pas de client MySQL qui utilise des bibliothèques
partagées (comme les modules Perl Msql-Mysql). Si vous en avez, vous 
devriez les recompiler car les structures utilisées dans 
 
libmysqlclient.so
  ont changées.
Si vous utilisez MySQL sur Windows, voyez aussi  Mise à jour de MySQL sous Windows .
Si vous utilisez la réplication, voyez aussi  Mettre à jour une architecture de réplication 
pour plus de détails sur la mise à jour de la réplication. 
Les anciens clients doivent fonctionner avec le serveur version 4.0 sans aucun
problème.
Même si vous suivez les instructions ci-dessus, vous pourrez retourner en version
MySQL 3.23.52 ou plus récent, si vous rencontrez des difficultés avec MySQL 4.0. 
Dans ce cas, vous devez utiliser la commande  
mysqldump
  sur toutes les tables
qui utilisent un index en texte plein, et restaurer ces tables en 3.23 (car la version
4.0 utilise un nouveau format pour les index en texte plein). 
Voici une liste plus complète de points à contrôler lorsque vous passez
à la version 4.0 : 
 
MySQL 4.0 a de très nombreux nouveaux droits dans la table  
mysql.user
 .
 Droits fournis par MySQL .
 
Pour installer ces nouveaux droits, suivez la procédure 
dans  Mise à jour des tables de droits . 
Jusqu'à ce que ce script soit exécuté, les utilisateurs
auront les droits de  
SHOW DATABASES
 ,  
CREATE TEMPORARY TABLES
 ,
et  
LOCK TABLES
 . Les droits de  
SUPER
  et  
EXECUTE
  héritent leur
valeur du droit de  
PROCESS
 .
 
REPLICATION SLAVE
  et  
REPLICATION CLIENT
  héritent leur valeur de
 
FILE
 .
Si vous avez un script qui crée automatiquement des nouveaux utilisateur,
vous devez le modifier pour y inclure les nouveaux droits. Si vous n'utilisez
pas la commande  
GRANT
  dans ces scripts, c'est une bonne idée que de
les vérifier. 
En version 4.0.2, l'option  
--safe-show-database
  est abandonnée
(et ne fait plus rien du tout).  Options de démarrage de 
mysqld
 qui concernent la sécurité .
Si vous obtenez des interdictions d'accès pour les nouveaux utilisateurs
en version 4.0.2, vous devriez vérifier si vous avez besoin de nouveaux
droits que vous n'utilisiez pas avant. En particulier, vous aurez besoin
du droit de  
REPLICATION SLAVE
  (au lieu de  
FILE
 ) pour les nouveaux
esclaves.
safe_mysqld
  a été renommé en  
mysqld_safe
 . Pour assurer la 
compatibilité ascendante, les distribution binaires vont
inclure pour quelques temps un lien symbolique de  
safe_mysqld
  
vers  
mysqld_safe
 .
Le support  
InnoDB
  est désormais inclut par défaut dans la distribution binaire.
Si vous compilez MySQL depuis les sources, et que vous voulez économiser
de la mémoire, utilisez l'option  
--skip-innodb
  au démarrage du serveur.
Pour compiler MySQL sans le support  
InnoDB
 , utilisez le script  
configure
 
avec l'option  
--without-innodb
 .
Les paramètres de démarrage  
myisam_max_extra_sort_file_size
  et
 
myisam_max_extra_sort_file_size
  sont désormais exprimés en octets,
et non plus en Mo, comme cela était le cas jusqu'en version 4.0.3).
mysqld
  dispose maintenant de l'option  
--temp-pool
  activée par défaut,
car cela donne de meilleures performances sur certains systèmes d'exploitation,
et notamment Linux.
Les options de démarrage  
mysqld
 
--skip-locking
  et
 
--enable-locking
  ont été renommées  
--skip-external-locking
 
et  
--external-locking
 .
Les systèmes externes de verrouillages des tables  
MyISAM
 / 
ISAM
 
sont désormais désactivés par défaut. Vous pouvez les 
réactiver avec l'option  
--external-locking
 . Pour la plupart des 
utilisateurs, ce n'est jamais nécessaire.
Les options de démarrage suivantes ont été renommées : 
 
Les options de démarrage  
record_buffer
 ,  
sort_buffer
  et
 
warnings
  vont encore fonctionner avec MySQL 4.0 mais elles sont obsolètes.
| Ancien nom | Nouveau nom
. |  
| myisam_bulk_insert_tree_size | bulk_insert_buffer_size |  
| query_cache_startup_type | query_cache_type |  
| record_buffer | read_buffer_size |  
| record_rnd_buffer | read_rnd_buffer_size |  
| sort_buffer | sort_buffer_size |  
| warnings | log-warnings |  
| err-log | --log-error
 (for 
mysqld_safe
) |  
Changements SQL :
 
Les variables SQL suivantes ont changé de nom. 
Les anciens noms fonctionneront encore en MySQL 4.0, mais sont obsolètes.
| Ancien nom | Nouveau nom
. |  
| SQL_BIG_TABLES | BIG_TABLES |  
| SQL_LOW_PRIORITY_UPDATES | LOW_PRIORITY_UPDATES |  
| SQL_MAX_JOIN_SIZE | MAX_JOIN_SIZE |  
| SQL_QUERY_CACHE_TYPE | QUERY_CACHE_TYPE | 
Vous devez utiliser la commande  
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=#
  au lieu
de  
SET SQL_SLAVE_SKIP_COUNTER=#
 .
SHOW MASTER STATUS
  retourne désormais une liste vide si les logs binaires
ne sont pas activés.
SHOW SLAVE STATUS
  retourne désormais une liste vide si l'esclave n'est pas
initialisé.
SHOW INDEX
  a 2 colonnes de plus ( 
Null
  et  
Index_type
 )
qu'il n'avait pas en version 3.23.
Le format de  
SHOW OPEN TABLE
  a été changé.
ORDER BY col_name DESC
  trie les valeurs  
NULL
  en dernier, depuis
MySQL 4.0.11. En 3.23 et dans les premières versions de 4.0, ce n'était pas toujours
cohérent.
CHECK
 ,  
SIGNED
 ,  
LOCALTIME
  et  
LOCALTIMESTAMP
 
sont des mots réservés.
Les colonnes  
DOUBLE
  et  
FLOAT
  acceptent désormais l'option
 
UNSIGNED
  pour le stockage (auparavant,  
UNSIGNED
  était ignoré pour ces
colonnes).
Le résultat de toutes les opérations sur les bits,  
|
 ,  
&
 ,  
<<
 ,
 
>>
  et  
~
  est maintenant non signé. Cela peut poser des problèmes
si vous aviez un contexte dans lequel vous souhaitez un résultat signé.
 Fonctions de transtypage .
 
Note
  : lorsque vous utilisez la soustraction entre des entiers
dont l'un est  
UNSIGNED
 , le résultat sera non signé! En d'autres
termes, avant de passer à la version MySQL 4.0, vous devriez vérifier les
situations où votre application soustrait une valeur d'un entier non signé,
et que vous attendez une valeur négative, ou si vous soustrayez une valeur
non signée d'une colonne. Vous pouvez désactiver ce comportement en utilisant
l'option de démarrage  
--sql-mode=NO_UNSIGNED_SUBTRACTION
  lorsque vous
démarrez  
mysqld
 .   Fonctions de transtypage .
Vous devriez utiliser des entiers pour stocker les valeurs dans les colonnes
de type BIGINT (au lieu d'utiliser des chaînes, comme vous le faisiez en 
MySQL 3.23). Utiliser des chaînes va toujours fonctionner, mais passer des
entiers est bien plus efficace.
En version 3.23,  
INSERT INTO ... SELECT
  fonctionne toujours avec l'option 
 
IGNORE
 . En version 4.0.1, MySQL va s'arrêter (et peut être annuler la 
transaction) si vous ne spécifiez pas l'option  
IGNORE
 .
Vous devriez utiliser la commande  
TRUNCATE TABLE
  lorsque vous voulez effacer
toutes les lignes d'une table, et que vous ne souhaitez pas savoir combien de lignes
ont été effacées de la table (car  
TRUNCATE TABLE
  est plus rapide que 
 
DELETE FROM table_name
 ).
Vous allez rencontrer une erreur si vous avez un verrou actif ou une
transaction active, et que vous essayez d'utiliser les commandes 
 
TRUNCATE TABLE
  ou  
DROP DATABASE
 .
Pour utiliser  
MATCH ... AGAINST (... IN BOOLEAN MODE)
  avec vos table,s
vous devez les reconstruire avec  
ALTER TABLE table_name TYPE=MyISAM
 ,
 
même
  si la table est déjà au format  
MyISAM
 .
 Optimisation des recherches en texte intégral .
LOCATE()
  et  
INSTR()
  sont sensibles à la casse, si l'un des
arguments est une chaîne binaire. Sinon, ils sont insensibles à la casse.
STRCMP()
  utilise désormais le jeu de caractères courant pour les 
comparaisons, ce qui signifie que le comportement par défaut des comparaisons
est désormais insensible à la casse.
HEX(string)
  retourne désormais les caractères convertis sous la forme
d'une chaîne hexadécimale. Si vous voulez convertir un nombre en hexadécimal,
vous devez vous assurer d'appeler  
HEX()
  avec un argument numérique.
RAND(seed)
  retourne un nombre différent en version 4.0 qu'en version
3.23 : cela est fait pour différencier plus fortement  
RAND(seed)
  de 
 
RAND(seed+1)
 .
Le type par défaut retourné par  
IFNULL(A,B)
  est maintenant le plus
général des deux types  
A
  et  
B
 . (L'ordre est 
 
STRING
 ,  
REAL
  puis  
INTEGER
 ). 
Changements de l'interface C :
 
Autres changements :
Les fonctions de l'ancienne API C API  
mysql_drop_db
 ,  
mysql_create_db
  et
 
mysql_connect
  ne sont plus supportées, à moins que vous ne compiliez
MySQL avec  
CFLAGS=-DUSE_OLD_FUNCTIONS
 . Au lieu de cela, il sera plus sage
de changer vos programmes, pour qu'il utilisent la nouvelle API 4.0.
Dans la structure  
MYSQL_FIELD
 ,  
length
  et  
max_length
  ont
évolué de  
unsigned int
  en  
unsigned long
 . Cela ne va pas causer
de problèmes, hormis le fait qu'ils peuvent générer des messages d'alerte lorsqu'ils
sont utilisé comme argument de fonctions comme  
printf()
 .
Les clients multi-threadés doivent utiliser  
mysql_thread_init()
  et
 
mysql_thread_end()
 .  Comment programmer une client threadé .
 
Si vous voulez recompiler le module Perl DBD::mysql, vous devez prendre les
versions Msql-Mysql-modules 1.2218 ou plus récente, car les anciennes versions des
module DBD utilisent une fonction  
drop_db()
  abandonnée. |