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 perd 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.
Nombre limités de ports de connexions
Les systèmes Windows disposent d'environs 4,000 pour les connexions clientes, et après connexion, cela prend de 2 à 4 minutes avant qu'un port soit de nouveau utilisable. Dans des situations où les clients se connectent et se déconnectent à haute vitesse, il est possible que tous les ports soient utilisés, avant que les anciens ports ne redeviennent utilisables. Lorsque cela arrive, le serveur semblera inaccessible, même s'il fonctionne bien. Notez que des ports peuvent aussi être utilisées par d'autres applications, ce qui réduit encore le nombre de ports disponibles pour MySQL.
Lectures concurrentes
MySQL dépends des fonctions pread()
et
pwrite()
pour être capable de mêler
des INSERT
et des
SELECT
. Actuellement, nous utilisons
les 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 Windows 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.
Interrompre MySQL depuis le gestionnaire de tâches
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). See Section 9.2.2, « 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;
Problèmes avec les pipes
Les pipes ne fonctionnent pas de manière fiables depuis
la ligne de commande Windows. Si le pipe re¸oit un
caractère ^Z
/
CHAR(24)
, Windows va croire qu'il
atteint la fin du fichier et arrête le programme.
C'est un problème, notamment lorsque vous essayez d'utiliser le log binaire de cette manière :
mysqlbinlog binary-log-name | mysql --user=root
Si vous rencontrez un problème lors de l'utilisation du
log, et que vous pensez que c'est à cause du caractère
^Z
/ CHAR(24)
, vous
pouvez utiliser le palliatif suivant :
mysqlbinlog binary-log-file --result-file=/tmp/bin.sql mysql --user=root --execute "source /tmp/bin.sql"
Cette dernière commande peut aussi être utilisée pour lire fiablement tout fichier SQL qui contient des données binaires.
L'erreur Can't open named
pipe
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.
DROP
TABLE
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.
DATA DIRECTORY
et
INDEX DIRECTORY
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 :
Ajouter des icônes pour le démarrage et l'arrêt de MySQL, dans l'installateur.
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.
Ajouter des macros pour utiliser les méthodes rapides d'incrément/décrément compatibles avec les threads, fourni par Windows.
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.