На настоящий момент версия 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.