2.6.2.7 Сравнительные характеристики 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.
Add your own comment.