Windows 用の MySQL は、非常に安定していることを自ら証明しました。Windows バージョンの MySQL には、それに対応する Unix バージョンと同じ機能が組み込まれていますが、以下の例外があります。
Windows 95 とスレッド
Windows 95 は、スレッド生成のたびに約 200
バイトのメインメモリをリークする。 MySQL
に接続するたびに新しいスレッドが生成されるため、サーバが多数の接続を処理する場合は、Windows
95 上で mysqld
を長時間実行しない。その他のバージョンの
Windows ではこのバグはない。
同時読み取り
MySQL は、pread()
呼び出しおよび pwrite()
呼び出しに依存して、INSERT
と SELECT
の混在を可能にしている。現時点では、当社は相互排他ロック(mutex)を使用して
pread()
/pwrite()
をエミュレートしている。長期的には、処理速度を向上させるためにNT/2000/XP
上で
readfile()
/writefile()
インタフェースを使用できるように、ファイルレベルのインタフェースを仮想インタフェースに置き換える予定である。
現在の実装では、MySQL
が使用できるオープンファイルの数は 1024
個に制限されている。したがって、NT/2000/XP
上では、Unix
の場合と同じ数の同時実行スレッドを実行することはできない。
ブロック読み取り
MySQL は、接続ごとにブロック読み取りを使用する。これには、以下のような意味がある。
Unix バージョンの MySQL の場合のように 8 時間後に接続が自動的に切断されるということはない。
接続がハングした場合、MySQL を強制終了しなくても切断することができる。
mysqladmin kill
はスリープ状態の接続では機能しない。
スリープ状態の接続がある限り、mysqladmin
shutdown
が中断することはない。
この問題については、当社の Windows 開発者が適切な回避策を考え出したときに修正する予定である。
DROP
DATABASE
スレッドが使用しているデータベースを破棄することはできない。
タスクマネージャから MySQL を強制終了する
タスクマネージャまたは Windows 95
のシャットダウンユーティリティを使用して
MySQL を強制終了することはできない。MySQL
を停止するには、mysqladmin
shutdown
を使用する。
ケース非依存の名前
Windows では、ファイル名はケース非依存である。したがって MySQL のデータベース名とテーブル名も Windows ではケース非依存である。唯一の制約は、所定のステートメント全体を通じて同じケースを使用してデータベース名とテーブル名を指定する必要があることである。 See 項6.1.3. 「名前におけるケース依存」。
‘\
’
ディレクトリ文字
Windows 95
のパス名の構成要素は、‘\
’
文字で区切られる。これは、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
は、End-Of-File(EOF)を検出したと見なして、プログラムを中止する。
これは、主に、以下のようにバイナリログを適用しようとしたときに発生する問題である。
mysqlbinlog binary-log-name | mysql --user=root
ログを適用するときに問題が発生し、^Z
/ CHAR(24)
文字が原因であると思われる場合は、以下の回避策をとる。
mysqlbinlog binary-log-file --result-file=/tmp/bin.sql mysql --user=root --execute "source /tmp/bin.sql"
2 番目のコマンドは、バイナリデータが含まれている可能性のある SQL ファイルを確実に読み取とる場合にも使用できる。
Can't open named
pipe
エラー
最新の MySQL クライアントプログラムを組み込んだ NT 上で MySQL バージョン 3.22 サーバを使用している場合に、以下のエラーが発生することがある。
error 2017: can't open named pipe to host: . pipe...
このエラーは、リリースバージョンの MySQL
がNT
上ではデフォルトで名前付きパイプを使用するということが原因で発生する。新しい
MySQL クライアントに
--host=localhost
オプションを使用してこのエラーを回避するか、以下の情報を格納したオプション設定ファイル
C:\my.cnf
を作成する。
[client] host = localhost
バージョン 3.23.50
以降では、--enable-named-pipe
オプションを指定して
mysqld-nt
または
mysqld-max-nt
を起動した場合にのみ、名前付きパイプが有効になる。
Access denied for
user
エラー
MySQL
クライアントプログラムを実行して、同じマシン上で稼動しているサーバへの接続を試みたときに、Access
denied for user: 'some-user@unknown' to database
'mysql'
というエラーが表示された場合は、MySQL
がホスト名を正しく解決できなかったことを意味する。
このエラーを修正するには、以下の情報を格納した
\windows\hosts
ファイルを作成する。
127.0.0.1 localhost
ALTER
TABLE
ALTER TABLE
ステートメントの実行中は、他のスレッドによって使用されるのを防ぐためにテーブルがロックされる。これは、Windows
上では他のスレッドが使用中のファイルを削除することはできないという事実に対処する必要がある。将来、この問題の解決策が見つかる可能性がある。
DROP
TABLE
Windows では、MERGE
テーブルが使用しているテーブルに対して
DROP TABLE
を実行できない。これは、MERGE
ハンドラが実行するテーブルマッピングを
MySQL
の上位レイヤが認識しないためである。Windows
では開いているファイルを破棄できないため、対象のテーブルを破棄する前に、FLUSH
TABLES
ですべての MERGE
テーブルをフラッシュするか、MERGE
テーブルを破棄する必要がある。これについては、ビューを導入するときに修正する予定である。
DATA DIRECTORY
と INDEX DIRECTORY
Windows では、CREATE TABLE
の
DATA DIRECTORY
オプションと
INDEX DIRECTORY
オプションは無視される。これは、Windows
がシンボリックリンクをサポートしていないためである。
Windows 上の MySQL の改良に協力してくださるユーザのために、未解決の問題を以下に示す。
MySQL に使いやすい起動アイコンまたはシャットダウンアイコンを追加する。
タスクマネージャから mysqld
を強制終了できれば非常に便利である。
しばらくは、mysqladmin shutdown
を使用する必要がある。
mysql
コマンドラインツールで使用するため
Windows に readline
を移植する。
GUI バージョンの標準 MySQL
クライアント(mysql
、mysqlshow
、mysqladmin
、および
mysqldump
)があれば便利である。
net.c
のソケット読み取りおよび書き込みの関数が割り込み可能になれば便利である。これによって、Windows
で mysqladmin kill
を使用して、開いているスレッドを強制終了することができるようになる。
Windows によって提供されるより高速でスレッドセーフなインクリメント/デクリメントメソッドを使用するマクロを追加する。
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.