次の制限が、Windows プラットフォームで MySQL を使用する場合に適用されます。
-
プロセスメモリー
Windows 32 ビットプラットフォームでは、デフォルトで、MySQL などの単一プロセス内で 2G バイトを超える RAM を使用できません。これは、Windows 32 ビットでの物理アドレスの制限が 4G バイトであり、Windows 内のデフォルト設定では、カーネル (2G バイト) とユーザー/アプリケーション (2G バイト) とに仮想アドレス空間を分割するためです。
Windows の一部のバージョンには、カーネルアプリケーションを減らすことによってより大きなアプリケーションに対応するブート時設定があります。または、2G バイト以上を使用するには、64 ビットバージョンの Windows を使用します。
-
ファイルシステムエイリアス
MyISAM
テーブルの使用時には、Windows でエイリアスを使用して、別のボリューム上のデータファイルにリンクしててからメインの MySQLdatadir
の場所に戻るようにはリンクできません。この機能は、多くの場合、
datadir
オプションで構成されたデフォルトのデータディレクトリにメインの.frm
ファイルを保持しながら、データファイルおよびインデックスファイルを RAID またはその他の高速ソリューションに移動させるために使用されます。 -
ポート数の制限
Windows システムにはクライアント接続のポートがおよそ 4,000 あり、1 つのポート接続が閉じるとそのポートを再度利用できるようになるまで 2 から 4 分かかります。クライアントがサーバーとの接続と切断を高い頻度で繰り返す環境では、閉じたポートが再度利用できるようになる前に、利用できるポートがすべて使用されてしまうことがあります。このようになると、MySQL Server は動作中であっても反応していないように見えます。ポートはマシンで実行されているほかのアプリケーションでも使用されている場合があり、このときには、MySQL に利用できるポート数は少なくなります。
この問題の詳細は、http://support.microsoft.com/default.aspx?scid=kb;en-us;196271 を参照してください。
-
DATA DIRECTORY
およびINDEX DIRECTORY
CREATE TABLE
のDATA DIRECTORY
オプションは、セクション14.5.4「テーブルスペースの位置の指定」で説明するように、Windows ではInnoDB
テーブルに対してのみサポートされます。MyISAM
およびその他のストレージエンジンの場合、CREATE TABLE
のDATA DIRECTORY
およびINDEX DIRECTORY
オプションは、Windows と、非機能的realpath()
呼び出しを使用するほかのプラットフォームでは無視されます。 -
DROP DATABASE
別のセッションで使用されているデータベースは削除できません。
-
大文字と小文字を区別しない名前
Windows ではファイル名の大文字と小文字は区別されないため、MySQL のデータベース名とテーブル名も Windows では大文字と小文字は区別されません。唯一の制約は、特定のステートメント全体で大文字と小文字を変更せずに、データベース名とテーブル名を指定する必要があるということだけです。セクション9.2.2「識別子の大文字と小文字の区別」を参照してください。
-
ディレクトリ名とファイル名
Windows では、MySQL Server は現行の ANSI コードページと互換性のあるディレクトリ名とファイル名のみをサポートします。たとえば、次の日本語のディレクトリ名は欧米のロケール (コードページ 1252) では機能しません。
datadir="C:/私たちのプロジェクトのデータ"
同じ制限は、
LOAD DATA INFILE
のデータファイルパス名など、SQL ステートメントで参照されるディレクトリ名とファイル名にも適用されます。 -
「
\
」 (パス名の区切り文字)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;
または、「
\
」文字を 2 重にする必要があります。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 ファイルを確実に読み取るために使用することもできます。