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. See Section C.3, « 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 Section 2.6.7, « 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 Section 2.2.11, « Mettre à jour MySQL sous Windows ».
Si vous utilisez la réplication, voyez aussi Section 6.6, « Changer de version 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
. See
Section 5.5.3, « Droits fournis par MySQL ».
Pour installer ces nouveaux droits, suivez la procédure
dans Section 2.6.7, « 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). See
Section 5.4.3, « Options de démarrage 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é. See
Section 12.7, « 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
. See
Section 12.7, « 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
. See
Section 12.6.4, « Paramétrage précis de la recherche en text intégral de MySQL ».
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()
. See
Section 24.2.15, « Comment faire un client MySQL 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.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.