Windows を使用した MySQL は実証済みで安定しています。Windows バージョンの MySQL は以下の例外を除いて Unix バージョンの MySQL と同じです。
ポート数の制限
Windows システムにはクライアント接続のポートがおよそ 4,000 あり、1 つのポート接続が閉じるとそのポートを再度利用できるまで 2~4 分かかります。クライアントのサーバーへに接続/切断頻度が高い環境では、すべての利用できるポートは閉じたポートが再度利用できるようになる前に使用してしまうことができます。このようになると、MySQL サーバーはそれが動作中であっても反応していないようにみえます。ポートはマシンで実行されているほかのアプリケーションでも同様に使用できます。その際、MySQL に利用できるポート数は少なくなります。
この問題については、http://support.microsoft.com/default.aspx?scid=kb;en-us;196271 を参照してください。
同時読み込み
            MySQL は INSERT と
            SELECT を混合する際
            pread()
            および
            pwrite()
            のシステムコールに依存しています。現在、弊社では
            pread() および
            pwrite()
            をエミュレートするために mutex
            を使用しています。弊社では将来的にファイルレベルのインタフェースを仮想インタフェースに置き換えて、readfile()/writefile()
            インタフェースを使用して高速化を図れるようにする予定です。現在の実装では
            MySQL 5.1
            が使用できるオープンファイルの数は 2,048
            に制限されており、Windows 上では Unix
            上と同じほど多数の並列スレッドを実行できません。
          
ブロック読み込み
MySQL は各接続にブロック読み込みを使用しています。それは名前付きパイプ接続が有効になった場合以下が想定されます。
接続は、Unix バージョンの MySQL とは異なり、8 時間後でも自動的に切断されない。
接続がハングした場合、MySQL を停止せずにハングを解消できない。
mysqladmin kill はスリープ中の接続には機能しない。
mysqladmin shutdown はスリープ接続がある限るシャットダウンできない。
弊社でこの問題を将来的に解決する予定です。
            ALTER
            TABLE
          
            ALTER TABLE
            ステートメントを実行中は、テーブルはほかのスレッドが使用できないようにロックされます。これは
            Windows
            の場合、使用中のファイルは別のスレッドで削除できないという事実に関連しています。将来的にはこの問題を解決する方法を見つける予定でます。
          
            DROP
            TABLE
          
            MERGE
            ハンドラーがテーブルのマッピングを上部層の
            MySQL
            に非表示にしているために、MERGE
            テーブルで使用されている
            DROP TABLE は Windows
            では機能しません。Windows
            では開いているファイルは削除できないようになっているため、まずすべての
            MERGE テーブル
            (FLUSH
            TABLES で)
            をフラッシュするか、あるいはテーブルを削除する前に
            MERGE
            テーブルを削除する必要があります。
          
            DATA
            DIRECTORY および INDEX
            DIRECTORY
          
            CREATE TABLE の
            DATA DIRECTORY
            オプションと
            INDEX
            DIRECTORY オプションは Windows
            がシンボリックリンクをサポートしていないので
            Windows
            では無視されます。これらのオプションは、関数でない
            realpath()
            呼び出しがあるシステムでも無視されます。
          
            DROP
            DATABASE
          
スレッドで使用中のデータベースは削除できません。
ケースインセンシティブネーム
Windows ではファイル名の大文字と小文字は区別されないため、MySQL のデータベース名とテーブル名も Windows では大文字と小文字は区別されません。唯一の制限はデータベースおよびテーブル名は所定のステートメントでは同じケースを使用して指定される必要があるということだけです。項5.2.2. 「識別子の大文字小文字の区別」 を参照してください。
ディレクトリ名とファイル名
Windows では、MySQL サーバーは現行の ANSI コードページと互換性のあるディレクトリ名とファイル名のみをサポートします。たとえば、次の日本語のディレクトリ名は欧米のロケール (コードページ 1252) では使用できません。
datadir="C:/ç»´åºç¾ç§å ³äºä¸æç»´åºç¾ç§"
            同じ制限は、LOAD
            DATA INFILE
            のデータファイルパス名など、SQL
            ステートメントで参照されるディレクトリ名とファイル名にも適用されます。
          
            「\」
            (パス名の区切り文字)
          
            Winndows のパス名の構成要素は
            「\」
            文字で区切られますが、これは 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;
            または、「\」
            文字を 2 重にする必要があります。
          
mysql>LOAD DATA INFILE 'C:\\tmp\\skr.txt' INTO TABLE skr;mysql>SELECT * INTO OUTFILE 'C:\\tmp\\skr.txt' FROM skr;
パイプに関する問題
            Pipes は Windows
            のコマンドラインプロンプトでは信頼性に欠けます。パイプに
            ^Z /
            CHAR(24)
            が含まれている場合、Windows
            はファイルの最後だと勘違いしてプログラムを中止します。
          
これは以下のようにバイナリのログを適用する際の主な問題です。
C:\> mysqlbinlog binary_log_file | mysql --user=root
            ログに関する問題が発生しその問題が
            ^Z /
            CHAR(24)
            文字によるものだと考えられる場合は、以下の回避法が使用できます。
          
C:\>mysqlbinlogC:\>binary_log_file--result-file=/tmp/bin.sqlmysql --user=root --execute "source /tmp/bin.sql"
後者のコマンドはバイナリのデータを含む SQL ファイルを確実に読み込むためにも使用できます。
            Access denied
            for user エラー
          
MySQL がホスト名を正しく解決できない場合は、MySQL クライアントプログラムを実行して同じマシン上で動作しているサーバーに接続しようとすると、次のエラーが発生する場合があります。
Access denied for user 'some_user'@'unknown'
to database 'mysql'
            この問題を解決するためには、以下の情報を含むファイル名
            \windows\hosts
            を作成する必要があります。
          
127.0.0.1 localhost
ここに皆さんから改善に向けたご協力を頂けるであろう Windows を使用した MySQL の周知の問題を示します。
Microsoft から提供された高速のスレッドセーフな増分/減分メソッドを使用するためにマクロを追加します。
