• Aucun résultat trouvé

Passer de la version 3.23 `a la version 4.0

Dans le document Manuel MySQL pdf enjeux et pratiques (Page 131-134)

2.5 Changer de version de MySQL

2.5.1 Passer de la version 3.23 `a la version 4.0

En g´en´eral, ce que vous devez faire pour passer en version 4.0, `a partir d’une version plus ancienne :

• Ex´ecutez le script mysql_fix_privilege_tables pour ajouter de nouveaux droits et

fonctionnalit´es `a a table MySQL.

• Editez les scripts de d´emarrage MySQL pour les fichiers de configuration pour ne plus

utiliser les options abandonn´ees, list´ees ci-dessous.

• Convertissez vos vieilles tables ISAM en tables MyISAM avec la commande : mysql_

convert_table_format database. Notez que cela ne doit ˆetre 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´ees

(comme les modules Perl Msql-Mysql). Si vous en avez, vous devriez les recompiler car les structures utilis´ees dans ‘libmysqlclient.so’ ont chang´ees.

MySQL 4.0 va fonctionner mˆeme 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`emes lors de l’´evolution vers MySQL 4.1 ou plus r´ecent. Les fichiers ISAM fonctionne toujours en MySQL 4.0 mais il est abandonn´e, et il sera d´esactiv´e en MySQL 5.0.

Mˆeme si vous suivez les instructions ci-dessus, vous pourrez retourner en version MySQL 3.23.52 ou plus r´ecent, si vous rencontrez des difficult´es 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`ete de points `a contrˆoler lorsque vous passez `a la version 4.0 :

• MySQL 4.0 a de tr`es nombreux nouveaux droits dans la table mysql.user. Voir Sec-

tion 4.3.1 [GRANT], page 226.

Pour faire fonctionner ces nouveaux droits, vous devez ex´ecuter le script mysql_fix_ privilege_tables. Jusqu’`a ce que ce script soit ex´ecut´e, les utilisateurs auront les droits de SHOW DATABASES, CREATE TEMPORARY TABLES, et LOCK TABLES. Les droits de SUPER et EXECUTE h´eritent leur valeur du droit de PROCESS. REPLICATION SLAVE et REPLICATION CLIENT h´eritent leur valeur de FILE.

Si vous avez un script qui cr´ee 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´ee que de les v´erifier.

En version 4.0.2, l’option --safe-show-database est abandonn´ee (et ne fait plus rien du tout). Voir Section 4.2.3 [Privileges options], page 208.

Si vous obtenez des interdictions d’acc`es pour les nouveaux utilisateurs en version 4.0.2, vous devriez v´erifier 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`etres de d´emarrage myisam_max_extra_sort_file_size et myisam_max_

extra_sort_file_size sont d´esormais exprim´es en octets, et non plus en Mo, comme cela ´etait le cas jusqu’en version 4.0.3). Les syst`emes externes de verrouillages des tables MyISAM/ISAM sont d´esormais d´esactiv´es par d´efaut. Vous pouvez les r´eactiver avec l’option --external-locking Pour la plupart des utilisateurs, ce n’est jamais n´ecessaire.

• Les options de d´emarrage suivantes ont ´et´e renomm´ees :

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´emarrage record_buffer, sort_buffer et warnings vont encore fonc- tionner avec MySQL 4.0 mais elles sont obsol`etes.

• Les variables SQL suivantes ont chang´e 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

Les anciens noms fonctionneront encore en MySQL 4.0, mais sont obsol`etes.

• Vous devez utiliser la commande SET GLOBAL SQL_SLAVE_SKIP_COUNTER=# au lieu de

SET SQL_SLAVE_SKIP_COUNTER=#.

• Renommez les options de d´emarrage --skip-locking en --skip-external-locking

et --enable-locking en --external-locking.

• SHOW MASTER STATUS retourne d´esormais une liste vide si les logs binaires ne sont pas

activ´es.

• SHOW SLAVE STATUS retourne d´esormais une liste vide si l’esclave n’est pas initialis´e. • mysqld dispose d´esormais de l’option --temp-pool activ´ee par d´efaut, car cela donne

de meilleurs performances sur certains syst`emes d’exploitation.

• Les colonnes DOUBLE et FLOAT acceptent d´esormais l’option UNSIGNED pour le stockage

(auparavant, UNSIGNED ´etait ignor´e pour ces colonnes).

• ORDER BY column DESC trie d´esormais les valeurs NULL en premier. En version 3.23, ce

n’´etait 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´eserv´e.

• Le r´esultat de toutes les op´erations sur les bits, |, &, <<, >> et ~ est maintenant

non sign´e. Cela peut poser des probl`emes si vous aviez un contexte dans lequel vous souhaitez un r´esultat sign´e. Voir Section 6.3.5 [Cast Functions], page 470.

• Note : lorsque vous utilisez la soustraction entre des entiers dont l’un est UNSIGNED,

le r´esultat sera non sign´e! En d’autres termes, avant de passer `a la version MySQL 4.0, vous devriez v´erifier les situations o`u votre application soustrait une valeur d’un entier non sign´e, et que vous attendez une valeur n´egative, ou si vous soustrayez une valeur non sign´ee d’une colonne. Vous pouvez d´esactiver ce comportement en utilisant l’option de d´emarrage --sql-mode=NO_UNSIGNED_SUBTRACTION lorsque vous d´emarrez mysqld. Voir Section 6.3.5 [Cast Functions], page 470.

• Pour utiliser MATCH ... AGAINST (... IN BOOLEAN MODE) avec vos table,s vous devez

les reconstruire avec ALTER TABLE table_name TYPE=MyISAM, mˆeme si la table est d´ej`a au format MyISAM.

• LOCATE() et INSTR() sont sensibles `a la casse, si l’un des arguments est une chaˆine

binaire. Sinon, ils sont insensibles `a la casse.

• STRCMP() utilise d´esormais le jeu de caract`eres courant pour les comparaisons, ce qui

signifie que le comportement par d´efaut des comparaisons est d´esormais insensible `a la casse.

• HEX(string) retourne d´esormais les caract`eres convertis sous la forme d’une chaˆine

hexad´ecimale. Si vous voulez convertir un nombre en hexad´ecimal, vous devez vous assurer d’appeler HEX() avec un argument num´erique.

• En version 3.23, INSERT INTO ... SELECT fonctionne toujours avec l’option IGNORE.

En version 4.0.1, MySQL va s’arrˆeter (et peut ˆetre annuler la transaction) si vous ne sp´ecifiez pas l’option IGNORE.

• ‘safe_mysqld’ est renomm´ee 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´ees, `a 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 ´evolu´e de unsigned int

en unsigned long. Cela ne va pas causer de probl`emes, hormis le fait qu’ils peu- vent g´en´erer des messages d’alerte lorsqu’ils sont utilis´e 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 ´et´e effac´ees 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ˆines, comme vous le faisiez en MySQL 3.23). Utiliser des chaˆines va toujours fonctionner, mais passer des entiers est bien plus efficace.

• Le format de SHOW OPEN TABLE a ´et´e chang´e.

• Les clients multi-thread´es doivent utiliser mysql_thread_init() et mysql_thread_

end(). Voir Section 8.4.8 [Threaded clients], page 660.

• Si vous voulez recompiler le module Perl DBD::mysql, vous devez prendre les versions

Msql-Mysql-modules 1.2218 ou plus r´ecente, car les anciennes versions des module DBD utilisent une fonction drop_db() abandonn´ee.

• RAND(seed) retourne un nombre diff´erent en version 4.0 qu’en version 3.23 : cela est

fait pour diff´erencier plus fortement RAND(seed) de RAND(seed+1).

Dans le document Manuel MySQL pdf enjeux et pratiques (Page 131-134)