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