Сравнительные характеристики MySQL под Windows и под Unix
На настоящий момент версия 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 section 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.
Содержание раздела