2.3.16. Windows版MySQL同Unix版MySQL对比

已经证明,WindowsMySQL很稳定。WindowsMySQL的功能与相应的Unix版相同,只有以下例外:

·         Windows 95和线程

Windows 95创建一个线程时大约需要200字节的主内存。MySQL的每个连接都会创建一个新线程,因此如果你的服务器正处理许多连接,你不应当在Windows 95中运行mysqld

·         有限的端口数目

Windows系统有大约4,000个端口供客户端连接,某个端口的连接关闭后,在能够重新利用该端口前,需要24分钟。在客户端频繁连接并从服务器上断开时,在可以重新使用关闭的端口前,有可能用完了所有可用的端口。如果发生这种情况,MySQL服务器不会响应,即使它仍在运行。请注意机器上运行的其它应用程序也可以使用端口,此时可供MySQL使用的端口数要少。

详细信息参见http://support.microsoft.com/default.aspx?scid=kb;en-us;196271

·         并行读

MySQL依靠pread()pwrite()系统调用来同时使用INSERTSELECT。目前我们使用互斥来竞争pread()pwrite()。我们将来想用虚拟接口替换文件级接口,因此要想更快,我们可以在NT2000XP上使用readfile()/writefile()接口。目前MySQL 5.1可以打开的文件的限制数目为2,048,意味着在Windows NT2000,XP2003上可以运行的并行线程不如Unix上多。

·         阻塞读

MySQL为每个连接使用阻塞读取,如果启用了命名管道连接,其含义如下:

o        连接不会在8小时后自动断开,而在UnixMySQL中会发生。

o        如果连接被挂起,不杀掉MySQL则不会将其中断。

o        mysqladmin kill不会杀掉睡眠中的连接。

o        只要有睡眠连接,mysqladmin shutdown不会中断。

我们计划在将来修复该问题。

·         ALTER TABLE

执行ALTER TABLE语句时,将该表锁定不让其它线程使用。在Windows中,你不能删除正被另一个线程使用的文件。在将来,我们会找出办法解决该问题。

·         DROP TABLE

Windows中对一个被MERGE表应用的表执行DROP TABLE不会实现,因为MERGE处理器将表从MySQL上层映射隐藏起来。由于Windows不允许删除打开的文件,必须在删除表之前首先清空所有MERGE(使用FLUSH TABLES)或删掉MERGE表。

·         DATA DIRECTORY and INDEX DIRECTORY

Windows中将忽略DATA DIRECTORYINDEX DIRECTORY选项,因为Windows不支持符号连接。在具有非功能realpath()调用的系统中,这些选项也被忽略。

·         DROP DATABASE

你不能删掉正被线程使用的数据库。

·         Task Manager(任务管理器)杀掉MySQL

你不能从Task Manager(任务管理求)或使用Windows 95shutdown工具来杀掉MySQL。你必须通过mysqladmin shutdown停止它。

·         大小写名

由于Windows对文件名大小写不敏感。因此在WindowsMySQL数据库名和表名对大小写也不敏感。唯一的限制是在同一个语句中,必须同时使用大写或小写指定数据库名和表名。请参见9.2.2节,“识别符大小写敏感性”

·         \’路径名间隔符

Windows中的路径名用‘\’符间隔开,在MySQL中还是转义字符。如果你使用LOAD DATA INFILESELECT ... INTO OUTFILE,用‘/’符使用Unix-类文件名:

mysql> LOAD DATA INFILE 'C:/tmp/skr.txt' INTO TABLE skr;
mysql> SELECT * INTO OUTFILE 'C:/tmp/skr.txt' FROM skr;

你还可以使用双‘\’符:

mysql> LOAD DATA INFILE 'C:\\tmp\\skr.txt' INTO TABLE skr;
mysql> SELECT * INTO OUTFILE 'C:\\tmp\\skr.txt' FROM skr;

·         管道问题。

管道不能在Windows命令行提示符下可靠地工作。如果管道包括字符^Z/CHAR(24)Windows认为遇到了文件末尾并中断程序。

这主要是按照如下所示使用二进制日志的主要问题:

C\>mysqlbinlog binary-log-name | mysql --user=root

如果使用日志时出现问题,怀疑是由于^Z / CHAR(24)字符,你可以使用下面的程序:

C:\> mysqlbinlog binary-log-file --result-file=/tmp/bin.sql
C:\> mysql --user=root --execute "source /tmp/bin.sql"

后面的命令还可以用来可靠读取任何包含二进制数据的SQL文件。

·         Access denied for user错误

如果你试图运行MySQL客户端程序来连接同一机器上运行的服务器,但是遇到错误Access denied for user 'some-user'@'unknown' to database 'mysql',这意味着MySQL不能正确识别你的主机名。

要解决该问题,你应当创建一个名为\windows\hosts包含下面信息的文件:

127.0.0.1       localhost

这儿有一些公开问题,提供给想要帮助我们改进Windows中的MySQL的人们:

·         增加宏来使用Windows提供的更快的线程安全增/减方法。

关注编程学问公众号