已經證明,Windows版MySQL很穩定。Windows版MySQL的功能與相應的Unix版相同,只有以下例外:
· Windows 95和線程
Windows 95創建一個線程時大約需要200字節的主內存。MySQL的每個連接都會創建一個新線程,因此如果你的服務器正處理許多連接,你不應當在Windows 95中運行mysqld。
· 有限的端口數目
Windows系統有大約4,000個端口供客戶端連接,某個端口的連接關閉后,在能夠重新利用該端口前,需要2至4分鐘。在客戶端頻繁連接并從服務器上斷開時,在可以重新使用關閉的端口前,有可能用完了所有可用的端口。如果發生這種情況,MySQL服務器不會響應,即使它仍在運行。請注意機器上運行的其它應用程序也可以使用端口,此時可供MySQL使用的端口數要少。
詳細信息參見http://support.microsoft.com/default.aspx?scid=kb;en-us;196271 。
· 并行讀
MySQL依靠pread()和pwrite()系統調用來同時使用INSERT和SELECT。目前我們使用互斥來競爭pread()和pwrite()。我們將來想用虛擬接口替換文件級接口,因此要想更快,我們可以在NT、2000和XP上使用readfile()/writefile()接口。目前MySQL 5.1可以打開的文件的限制數目為2,048,意味著在Windows NT,2000,XP和2003上可以運行的并行線程不如Unix上多。
· 阻塞讀
MySQL為每個連接使用阻塞讀取,如果啟用了命名管道連接,其含義如下:
o 連接不會在8小時后自動斷開,而在Unix版MySQL中會發生。
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 DIRECTORY和INDEX DIRECTORY選項,因為Windows不支持符號連接。在具有非功能realpath()調用的系統中,這些選項也被忽略。
· DROP DATABASE
你不能刪掉正被線程使用的數據庫。
· 從Task Manager(任務管理器)殺掉MySQL
你不能從Task Manager(任務管理求)或使用Windows 95的shutdown工具來殺掉MySQL。你必須通過mysqladmin shutdown停止它。
· 大小寫名
由于Windows對文件名大小寫不敏感。因此在Windows中MySQL數據庫名和表名對大小寫也不敏感。唯一的限制是在同一個語句中,必須同時使用大寫或小寫指定數據庫名和表名。請參見9.2.2節,“識別符大小寫敏感性”。
· ‘’路徑名間隔符
Windows中的路徑名用‘’符間隔開,在MySQL中還是轉義字符。如果你使用LOAD DATA INFILE或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-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不能正確識別你的主機名。
要解決該問題,你應當創建一個名為windowshosts包含下面信息的文件:
127.0.0.1 localhost
這兒有一些公開問題,提供給想要幫助我們改進Windows中的MySQL的人們:
· 增加宏來使用Windows提供的更快的線程安全增/減方法。