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
>>>

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 :

  • 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 :
    
    shell> mysql_convert_table_format database db_name
    
    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 :
    
    mysql> ALTER TABLE tbl_name TYPE=MyISAM;
    
    Pour connaître le type d'une table, utilisez cette commande :
    
    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.
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.

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 :
    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 )
    Les options de démarrage record_buffer , sort_buffer et warnings vont encore fonctionner avec MySQL 4.0 mais elles sont obsolètes.

Changements SQL :

  • Les variables SQL suivantes ont changé de nom.
    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
    Les anciens noms fonctionneront encore en MySQL 4.0, mais sont obsolètes.
  • 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 :

  • 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é .
Autres changements :
  • 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.

<< Passer de la version 3.23 à la version 4.0 >>
Passer de la version 4.0 à la version 4.1 Changer de version de MySQL Passer de la version 3.22 à la version 3.23