2.3.7 Windows 平台限制
以下限制适用于 Windows 平台上的 MySQL:
- Process memory
在 Windows 32 位平台上,默认情况下,单个进程(包括 MySQL)不可能使用超过 2GB 的 RAM。这是因为 Windows 32 位的物理地址限制为 4GB,并且 Windows 中的默认设置是在内核(2GB)和用户/应用程序(2GB)之间分配虚拟地址空间。
Windows 的某些版本具有启动时间设置,以通过减少内核应用程序来启用更大的应用程序。或者,要使用 2GB 以上的内存,请使用 64 位版本的 Windows。
- 文件系统别名
使用MyISAM
table 时,不能在 Windows 中使用别名链接到另一个卷上的数据文件,然后再链接回 MySQL datadir的主要位置。
该功能通常用于将数据和索引文件移至 RAID 或其他快速解决方案,同时将主要的.frm
文件保留在使用datadir选项配置的默认数据目录中。
- 有限数量的端口
Windows 系统具有约 4,000 个可用于 Client 端连接的端口,并且在端口上的连接关闭后,需要 2 至 4 分钟才能重新使用该端口。在 Client 端高速率连接到服务器和从服务器断开连接的情况下,所有可用端口都可能在关闭的端口再次变得可用之前就用完了。如果发生这种情况,即使 MySQL 服务器正在运行,它似乎也没有响应。端口也可以由计算机上运行的其他应用程序使用,在这种情况下,MySQL 可用的端口数较少。
有关此问题的更多信息,请参见http://support.microsoft.com/default.aspx?scid=kb;en-us;196271。
DATA DIRECTORY
和INDEX DIRECTORY
Windows 上仅针对InnoDB
table 支持CREATE TABLE语句的DATA DIRECTORY
子句,如第 14.6.1.2 节“在外部创建 table”中所述。对于MyISAM
和其他存储引擎,在 Windows 和任何其他无法使用realpath()
调用的平台上,将忽略CREATE TABLE的DATA DIRECTORY
和INDEX DIRECTORY
子句。
您不能删除另一个会话正在使用的数据库。
- Case-insensitive names
文件名在 Windows 上不区分大小写,因此 MySQL 数据库和 table 名在 Windows 上也不区分大小写。唯一的限制是,在给定语句中,必须使用相同的大小写来指定数据库和 table 名。参见第 9.2.3 节“标识符区分大小写”。
- 目录和文件名
在 Windows 上,MySQL Server 仅支持与当前 ANSI 代码页兼容的目录和文件名。例如,以下日语目录名称在西方语言环境中将不起作用(代码页 1252):
datadir="C:/私たちのプロジェクトのデータ"
相同的限制适用于 SQL 语句中引用的目录和文件名,例如LOAD DATA中的数据文件路径名。
\
路径名分隔符
Windows 中的路径名组件用\
字符分隔,该字符也是 MySQL 中的转义字符。如果您使用的是LOAD DATA或选择...进入外档,请使用带有/
个字符的 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_file | 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 文件。