• Aucun résultat trouvé

2.6 Notes spécifiques aux systèmes d'exploitation

2.6.2 Notes relatives à Windows

2.6.2.7 MySQL pour Windows face à MySQL pour Un

MySQL pour Windows a prouvé qu'il était très stable. Cette version de MySQL a les mêmes fonctionnalités que la version Unix, a quelques exceptions :

Windows 95 et les threads

Windows 95 perf environs 200 octets de mémoire central lors de la création de chaque thread. Chaque connexion MySQL crée un nouveau thread, ce qui fait qu'il n'est pas recommandé d'exécuter mysqld

pour des durées longues sur Windows 95 si votre serveur gère de nombreuses connexions. Les autres versions de Windows ne souffrent pas du même problème.

Lectures concurrentes

MySQL dépends des fonctions pread()

et pwrite()

pour être capable de mêler des INSERT

et des SELECT

. Actuellement, nous utilise mutexes pour émuler les fonctions pread()

/ pwrite()

. Nous allons, à long terme, remplacer ce niveau d'interface par une interface virtuelle de façon à ce que nous puissions utiliser l'interface readfile()

/ writefile()

de Windows NT/2000/XP pour gagner de la vitesse. L'implémentation courante limite le nombre de fichiers ouverts par MySQL à 1024, ce qui signifie que vous ne pouvez pas utiliser d'aussi nombreux threads concurrents sur NT/2000/XP que sur Unix.

Blocking read

MySQL utilise une lecture bloquée pour chaque connexion. Cela signifie que :

Une connexion ne sera pas déconnectée automatiquement après 8 heures d'inactivité, comme c'est le cas sous Unix.

Si une connexion se bloque, il est impossible de la détruire sans tuer MySQL.

mysqladmin kill

ne fonctionne pas sur une connexion endormie.

mysqladmin shutdown

ne peut pas s'exécuter tant qu'il y a des connexions qui dorment.

Nous envisageons de corriger ce problème, lorsque les développeurs Windows auront fourni un palliatif.

DROP DATABASE

Vous ne pouvez pas détruire une base qui est utilisée par un autre thread.

Killing MySQL from the task manager

Vous ne pouvez pas tuer MySQL depuis le gestionnaire de tâche ou avec un utilitaire d'extinction de Windows 95. Vous devez l'éteindre avec mysqladmin shutdown

.

Noms sensibles à la casse

Les noms de fichiers sont insensibles à la casse sous Windows, ce qui fait que les noms de tables et de bases ne sont pas sensibles à la casse pour MySQL sur Windows. La seule restriction est que les noms de tables et de bases doivent être donnés avec même casse dans le nom (tout en majuscules, ou en minuscules). Sensibilité à la casse pour les noms .

Le caractère '\'

Les composants d'un chemin sont séparés par le caractère '\'

sous Windows, qui est aussi le caractère de protection de MySQL. Si vous utilisez la commande LOAD DATA INFILE

ou SELECT ... INTO OUTFILE

, vous devez doubler le caractère '\'

:

mysql> LOAD DATA INFILE "C:\\tmp\\skr.txt" INTO TABLE skr; mysql> SELECT * INTO OUTFILE 'C:\\tmp\\skr.txt' FROM skr;

Alternativement, vous pouvez utiliser les noms de fichiers au format Unix, avec le caractère '/'

:

mysql> LOAD DATA INFILE "C:/tmp/skr.txt" INTO TABLE skr; mysql> SELECT * INTO OUTFILE 'C:/tmp/skr.txt' FROM skr; Can't open named pipe

erreur

Si vous utilisez MySQL 3.22 sous NT avec les derniers clients mysql, vous allez obtenir cette erreur :

error 2017: can't open named pipe to host: . pipe...

Ceci est dû au fait que les versions modernes de MySQL utilisent des pipes nommés sous NT, par défaut. Pour éviter cette erreur, vous devez utiliser l'option −−host=localhost

sur les nouveaux clients, ou bien créer le fichier d'options C:\my.cnf

, qui contiendra les informations suivantes :

[client] host = localhost

Depuis la version 3.23.50, les pipes nommés sont les seuls activés si mysqld

est démarré avec −−enable−named−pipe

.

Erreur Access denied for user

Si vous rencontrez l'erreur Access denied for user: 'utilisateur@unknown' to database 'mysql'

lors de l'accès au serveur MySQL sur la même machine, cela signifie que MySQL ne peut résoudre proprement votre nom d'hôte.Pour corriger cela, vous devriez créer un fichier \windows\hosts

dans l'information suivante :

127.0.0.1 localhost ALTER TABLE

Lorsque vous exécutez la commande ALTER TABLE

, la table est verrouillé, empêchant les autres threads d'y accéder. Cela est lié au fait que sous Windows, vous ne pouvez pas effacer un fichier qui est en cours d'utilisation par d'autres threads : à l'avenir, vous pourrions trouver un moyen de contourner ce problème.

La commande DROP TABLE

sur une table qui est utilisée dans le cadre

d'un MERGE

ne fonctionne pas sous Windows, car le gestionnaire de MERGE

garde la carte des tables cachée de la couche supérieure de MySQL. Comme Windows ne vous autorise pas à effacer des fichiers qui sont ouverts, vous devez d'abord vider de la mémoire toutes les tables du MERGE

(avec la commande FLUSH TABLES

) puis effacer la table

MERGE

avant d'effacer les tables. Nous allons corriger cela lorsque nous introduirons la

notion de VIEW

s.

Les directives DATA DIRECTORY

et INDEX DIRECTORY

de

CREATE TABLE

sont ignorées sous Windows, car Windows ne supporte pas les liens symboliques.

Voici quelques problèmes connus et pas encore corrigés, si jamais quelqu'un souhaite nous aider sur la version Windows :

Mettre en place une librairie pour un utilisateur simple MYSQL.DLL

. Elle inclurait toutes les caractéristiques d'un serveur MySQL standard, hormis la création de threads. Cela

permettra d'inclure facilement MySQL dans des applications qui n'ont pas vraiment besoin du support client, ou qui n'ont pas besoin d'accéder à un serveur distant.

Ajouter des icônes sympas pour le démarrage et l'arrêt de MysQL, dans l'installateur.

Lorsque mysqld

est enregistré comme service avec −−install

(sous NT) il serait bien de pouvoir ajouter les options par défaut de la ligne de commande. Pour le moment, le palliatif consiste à lister les paramètres dans le fichier C:\my.cnf

.

Il serait vraiment pratique de pouvoir arrêter le processus mysqld

depuis le gestionnaire de tâches. Pour le moment, il faut passer par mysqladmin shutdown

.

Le port de readline

sur Windows pour pouvoir l'utiliser avec l'outil de ligne de commande mysql

.

Des versions graphiques des clients standards MySQL ( mysql

, mysqlshow , mysqladmin et mysqldump ) seraient bien. •

Il serait bien si les fonctions de lecture et d'écriture sur les sockets de net.c

pouvaient être interrompues. Cela rendrait possible l'arrêt des threads en court avec mysqladmin kill

sous Windows.

mysqld

se lance toujours avec la locale "C" et non pas avec la locale par défaut. Nous voulons que mysqld

utilise la configuration de localisation pour l'ordre de tri.

Ajouter des macros pour utiliser les méthodes rapides d'incrément/décrément compatibles avec les threads, fourni par Windows.

D'autres spécificités de Windows sont décrites dans le fichier README

qui est livré avec la distribution Windows de MySQL.