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.