2.3.6 Windows 平台限制
在 Windows 平台上使用 MySQL 时,以下限制适用:
-
进程内存
在 Windows 32 位平台上,不能默认使用超过 2GB 的 RAM 在单个进程中,包括 MySQL。这是因为 Windows 32 位的物理地址限制为 4GB,且 Windows 的默认设置将虚拟地址空间分配给内核(2GB)和应用程序(2GB)。
某些 Windows 版本有一个在启动时设置来启用更大的应用程序,或者可以使用 64 位 Windows 版本来使用超过 2GB 的内存。
-
文件系统别名
使用
MyISAM
表时,不能在 Windows 中使用别名将数据文件链接到另一个卷,然后链接回 MySQLdatadir
位置。这项功能通常用于将数据和索引文件移到 RAID 或其他高速解决方案中。
-
有限的端口数量
Windows 系统有大约 4,000 个端口可用于客户端连接,并且在客户端连接关闭后,端口可能需要 2-4 分钟才能重用。在客户端频繁连接到服务器并断开的情况下,可能会使用完所有可用端口。如果发生这种情况,MySQL 服务器可能会出现不响应的情况,即使它仍在运行。其他应用程序也可能占用端口,从而减少 MySQL 可用的端口数量。
有关这个问题的更多信息,请参阅 https://support.microsoft.com/kb/196271。
-
DATA DIRECTORY
和INDEX DIRECTORY
在 Windows 平台上,
DATA DIRECTORY
takeCREATE TABLE
语句的子句仅支持InnoDB
表,详见 Section 17.6.1.2, “Creating Tables Externally”。对于MyISAM
和其他存储引擎,DATA DIRECTORY
和INDEX DIRECTORY
子句在 Windows 和其他平台上都将被忽略,因为它们不支持realpath()
调用。 -
不能删除正在使用的数据库。
-
大小写不敏感名称
Windows下,文件名不区分大小写,因此MySQL数据库和表名也不会区分大小写。唯一的限制是,在给定的语句中,数据库和表名必须使用相同的大小写。请参阅第11.2.3节,“标识符大小写敏感性”。
-
目录和文件名
在Windows上,MySQL Server仅支持与当前ANSI代码页兼容的目录和文件名。例如,在西方locale(代码页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)
字符,您可以使用以下工作-around:C:\> mysqlbinlog binary_log_file --result-file=/tmp/bin.sql C:\> mysql --user=root --execute "source /tmp/bin.sql"
后一个命令也可以用来可靠地读取可能包含二进制数据的SQL文件。