На настоящий момент версия MySQL под Windows зарекомендовала себя как весьма устойчивая. Возможности этой версии и версии под Unix аналогичны, за исключением следующих моментов:
-
Windows 95 и потоки
При создании каждого потока в Windows 95 теряется приблизительно 200 байтов основной памяти. А поскольку каждое соединение с MySQL создает новый поток, на Windows 95 не следует запускать
mysqld
на продолжительное время, если ваш сервер обрабатывает много соединений! Другие версии Windows не подвержены этой ошибке. -
Параллельное чтение
Для обработки смешанных запросов
SELECT
иINSERT
в MySQL используются функцииpread()
иpwrite()
. В настоящее время для эмуляцииpread()
/pwrite()
мы применяем mutex'ы. Однако в наши планы на будущее входит замена интерфейса файлового уровня виртуальным интерфейсом, чтобы иметь возможность использовать интерфейсreadfile()
/writefile()
на NT/2000/XP - с целью ускорения работы. В текущей реализации число одновременно открытых в MySQL файлов не может быть больше 1024; это означает, что вы не сможете создать такое же количество одновременных соединений с MySQL в NT/2000/XP, как в Unix. -
Чтение с блокировкой
В MySQL для каждого соединения используется чтение с блокировкой. Это означает, что:
Соединение не будет автоматически закрыто по истечении 8 часов, как в случае Unix-версии MySQL.
В случае ``зависания'' соединения невозможно оборвать его без остановки MySQL.
mysqladmin kill
не работает для ``спящих'' соединенийmysqladmin shutdown
не может отработать до тех пор, пока существуют ``спящие'' соединения.
Перечисленные проблемы мы планируем решить, когда наши разработчики под Windows придумают изящный способ их решения.
-
DROP DATABASE
Нельзя удалить базу данных, если она используется каким-либо потоком.
-
Остановка MySQL из диспетчера задач
В Windows 95 нельзя остановить MySQL из диспетчера задач или с помощью инструментальной программы
shutdown
; это можно сделать с помощьюmysqladmin shutdown
. -
Имена, не зависящие от регистра символов
Имена файлов в Windows не зависят от регистра символов, поэтому имена таблиц и баз данных в MySQL под Windows также не зависимы от регистра. Единственное ограничение заключается в том, что имена баз данных и таблиц в пределах одного выражения должны задаваться с использованием одинакового регистра символов (see Раздел 6.1.3, «Чувствительность имен к регистру»).
-
Символ каталогов '
\
'Компоненты путей в Windows 95 разделяются символом '
\
', который также является символом экранирования в MySQL. Если вы используетеLOAD DATA INFILE
илиSELECT ... INTO OUTFILE
, символ '\
' необходимо вводить дважды:mysql> LOAD DATA INFILE "C:\\tmp\\skr.txt" INTO TABLE skr; mysql> SELECT * INTO OUTFILE 'C:\\tmp\\skr.txt' FROM skr;
В качестве альтернативы можно использовать имена файлов Unix-стиля:
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
(невозможно открыть именованный канал)При использовании MySQL версии 3.22 на NT с самым свежим клиентом
mysql
можно получить следующее сообщение об ошибке:error 2017: can't open named pipe to host: . pipe...
Это происходит из-за того, что в данной версии MySQL на NT именованные каналы применяются по умолчанию. Чтобы избежать таких ошибок, следует использовать с новым клиентом MySQL флаг
--host=localhost
или создать файл флаговC:\my.cnf
, содержащий следующие строки:[client] host = localhost
Начиная с версии 3.23.50 именованные каналы используются только в случае, если
mysqld
запущен с флагом--enable-named-pipe
. -
Ошибка
access denied for user
(доступ пользователю запрещен)Если вы получили сообщение об ошибке
Access denied for user: `some-user@unknown' to database `mysql'
при попытке доступа к MySQL-серверу, находящемуся на той же машине, с которой происходит доступ, это значит, что MySQL не может правильно определить адрес вашей машины. Для решения данной проблемы следует создать файл\windows\hosts
, содержащий:127.0.0.1 localhost
-
ALTER TABLE
При выполнении оператора
ALTER TABLE
доступ к таблице для других потоков блокируется. Именно поэтому Windows не может удалить файл, который используется другим потоком (возможно, в будущем мы найдем какой-нибудь способ обойти эту проблему). ВыполнениеDROP TABLE
над таблицей, входящей в состав сводной таблицыMERGE
, не будет работать в Windows, так как отображение таблицы, которое выполняет обработчикMERGE
, скрыто от верхнего уровня MySQL. Поскольку в Windows нельзя удалять открытые файлы, вначале следует сбросить всеMERGE
-таблицы (используяFLUSH TABLES
) или удалить всеMERGE
-таблицы перед удалением таблицы. Мы исправим эту ошибку одновременно с введением оператораVIEW
. ОператорыDATA DIRECTORY
иINDEX DIRECTORY
вCREATE TABLE
в Windows игнорируются, поскольку Windows не поддерживает символические ссылки.
Ниже приведены некоторые открытые вопросы для всех, кто захочет помочь нам в работе над выпусками под Windows:
Требуется создать однопользовательский сервер
MYSQL.DLL
. Он должен включать все возможности стандартного MySQL-сервера, за исключением потоков. Это заметно упростит использование MySQL в приложениях, которые не нуждаются в настоящем клиент-серверном взаимодействии и в доступе к базе с других машин.Нужно было бы добавить в инсталляционный пакет нескольких симпатичных иконок для старта и остановки MySQL.
При регистрации
mysqld
в качестве сервиса с флагом--install
(на NT) было бы неплохо иметь возможность добавлять флаги по умолчанию к командной строке. Сейчас эта проблема решается путем записи списка параметров в файлC:\my.cnf
.Было бы удобно останавливать
mysqld
из диспетчера задач. Сейчас для этого нужно применятьmysqladmin shutdown
.Требуется перенести
readline
в Windows для использования с инструментальной программой, запускаемой из командной строкиmysql
.GUI версия стандартных MySQL-клиентов (
mysql
,mysqlshow
,mysqladmin
иmysqldump
) будет очень полезна.Было бы хорошо, если бы чтение и запись сокетов из
net.c
можно было бы прерывать. Это позволило бы останавливать открытые потоки командойmysqladmin kill
в Windows.mysqld
всегда стартует в местоположении "C", а не в местоположении, установленном по умолчанию. С благодарностью будет принято исправление, позволяющее использование программойmysqld
текущего значения местоположения для порядка сортировки.Требуется добавить макрос для ускорения безопасного для потоков метода инкремента/декремента, обеспечиваемого Windows.
Остальные, специфические для Windows вопросы, можно найти в файле
README
, который находится в поставке MySQL-Windows.