Windows を使用した MySQL は実証済みで安定しています。Windows バージョンの MySQL は以下の例外を除いて Unix バージョンの MySQL と同じです。
Windows 95 およびスレッド
Windows 95 は各スレッドの作成毎におよそ 200 バイトのメモリを消費します。MySQL の各接続毎にスレッドが作成されます。ですからサーバが多くの接続を扱う場合には Windows 95 では mysqld をあまり長時間使用しないようにします。Windows の新しいバージョンではこのバグによる影響はありません。
ポート数の制限
Windows システムにはクライアント接続のポートがおよそ 4,000 あり、一つのポート接続が閉じるとそのポートを再度利用できるまで 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()
インターフェースを NT、2000、および XP
に使用できるようにしてファイル
レベルのインターフェースを仮想インターフェースに置き換える予定です。現在は
MySQL 5.1 が使用できるオープン
ファイルは 2,048 に制限されており、Unix
に相当する同時スレッドを Windows
NT、2000、XP、および 2003
では使用できないということを意味しています。
ブロック読み込み
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
スレッドで使用中のデータベースは削除できません。
タスク マネージャで MySQL をシャットダウンする
Windows 95 では、タスク マネージャあるいはシャットダウン ユーティリティで MySQL をシャットダウンできません。それを停止するには mysqladmin shutdown を使用します。
ケース インセンシティブ ネーム
ファイル名は Windows ではケース センシティブではありません。ですから MySQL データベースおよびテーブル名も Windows ではケース センシティブではありません。唯一の制限はデータベースおよびテーブル名は所定のステートメントでは同じケースを使用して指定される必要があるということだけです。項8.2.2. 「識別子の大文字/小文字区別」 参照。
‘\
’
パス名区切り文字
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:\>mysqlbinlog
C:\>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 から提供された高速のスレッド セーフな増分/減分メソッドを使用するためにマクロを追加します。