2.5 Changer de version de MySQL
2 Installation de MySQL
Manuel de Référence MySQL 4.1 : Version Française
->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 . Migrer depuis une autre architecture
|
2.5.1 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 plus ancienne :
-
Exécutez le script
mysql_fix_privilege_tables
pour ajouter de nouveaux
droits et fonctionnalités à a table MySQL.
-
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
. Notez que cela ne doit
être fait que si toutes les tables de la base sont des tables
ISAM
ou
MyISAM
.
Si ce n'est pas le cas, vous devrez alors utiliser la commande
ALTER TABLE table_name TYPE=MyISAM
sur toutes les tables
ISAM
.
-
Assurez vous que vous n'avez pas de client MySQL qui utilise des librairies
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.
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
.
Syntaxe de
GRANT
et
REVOKE
.
Pour faire fonctionner ces nouveaux droits, vous devez exécuter le script
mysql_fix_privilege_tables
. 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
liées à 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.
-
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).
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
|
Les options de démarrage
record_buffer
,
sort_buffer
et
warnings
vont encore fonctionner avec MySQL 4.0 mais elles sont obsolètes.
-
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=#
.
-
Renommez les options de démarrage
--skip-locking
en
--skip-external-locking
et
--enable-locking
en
--external-locking
.
-
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é.
-
mysqld
dispose désormais de l'option
--temp-pool
activée par
défaut, car cela donne de meilleurs performances sur certains systèmes d'exploitation.
-
Les colonnes
DOUBLE
et
FLOAT
acceptent désormais l'option
UNSIGNED
pour le stockage (auparavant,
UNSIGNED
était ignoré pour ces
colonnes).
-
ORDER BY column DESC
trie désormais les valeurs
NULL
en premier.
En version 3.23, ce n'était pas toujours le cas.
-
SHOW INDEX
a 2 colonnes de plus (
Null
et
Index_type
)
qu'il n'avait pas en version 3.23.
-
SIGNED
est un mot réservé.
-
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 .
-
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
.
-
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.
-
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
.
-
safe_mysqld
est renommée en
mysqld_safe
. Pour encore un peu
de temps, nous allons inclure dans nos distributions binaires le script
safe_mysqld
vous la forme d'un lien symbolique vers
mysqld_safe
.
-
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()
.
-
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
.
-
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.
-
Le format de
SHOW OPEN TABLE
a été changé.
-
Les clients multi-threadés doivent utiliser
mysql_thread_init()
et
mysql_thread_end()
. Comment créer un client thréadé .
-
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.
-
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)
.
|