皆さん、ご存知だとは思うが、MySQL というデータベースがある。
オープンソース、低価格 (場合によってはタダ)でありながら比較的性能が高い。

個人的には、ドッグイヤーと呼ばれる IT 業界にありながら
ここ数年間世界のトレンドでありつづけている、数少ないベンダー発のソフトウェアだと
考えている。

実際に、Web システムの開発、運用をしたことがある人ならば、データベースの
重要性はよく知っていると思う。
システムをスケーリングする際に AP サーバーと DB サーバーを分離することはよくある。

そして、AP サーバーをさらにスケーリング、冗長化するには ロードバランサーと複数のサーバーが
有れば良いことがおおい。

しかし、DB サーバーはそうはいかない。
サーバーが複数台あれば即座に DB サーバーを分散させられるとは限らないし、
冗長化にも CLUSTERPRO 等の専用ソフトが必要だったりする。

一方で、お客様のご要望は厳しい物がある。
専門知識をもたない一般ユーザーにとって、PC とは リッチクライアントであり、
Web システムとは google であり Yahoo! だった。
安くて、速い物と考えられていた。

内部統制、セキュリティ、簡単などの機能要件と、応答速度○○秒以内、同時接続数最大○○、などの
性能要件を両立させるために、サーバー管理者は細かいチューニングに奔走してたと思う。

そんな時代にあって、「安くて早い」を両立している MySQL が時代の寵児となることは
当然の事だったかもしれない。


今後はどうだろう?
ファイル共有ソフトによる情報流出事件や、Youtube のような動画配信の流行により、
Web システムが google や Yahoo! だけではない事や、リッチクライアントとも違うことが
一般ユーザーにも浸透しつつあるのではないか。

サーバー管理者の立場からすると、少ない管理コストと人的ミスの削減、より一層の内部統制や
情報管理が求められている。

そんな中、私にあ MySQL の管理機能が、やはりオープンソースの Postgresql に比べて
貧弱である気が否めない。

物理マシンが、明らかに性能の劣る仮想マシンへと次第に置き換わっている昨今、
3年後の MySQL はどうなっている?
私の会社の製品で不具合が見つかった。
どうやら、特定の条件では Javascript が正常に動作していない。

簡単に調べてみたところ、IE には URL に使用可能な文字数に制限が有るようだ。
大体、2000文字強まで送信が可能な模様。
今回の不具合は、この制限に引っかかっていたらしい。

2000文字あれば十分と思われるかもしれないが、GET メソッドという方法を用いて
パラメータを送信する際は、URL にそのパラメータを記載する。
例えば URL に '?' という文字があれば、少なくともそれ以降は全てパラメータである。
その為、場合によっては URL が 2000文字を超える可能性も十分有るのだ。
(google で検索する際、ブラウザーから入力した検索キーワードを GET メソッドで送信している)


ところで、具体的には何文字なのだろうか?

IE の文字数制限については、色々な人が blog や HP で記述しており、皆さん
「IE6 の URL は 2083文字まで」
と書いてある。

多分、情報現は以下の Microsoft のページだろう。

▼ [IE] URL に使用可能な文字数は最大 2,083 文字
http://support.microsoft.com/kb/208427/ja

ところが、私の手元の環境で検証をしてみても URL は 2083文字も使用することが出来ない。
どうやら、Microsoft の日本語のページは古く、訳も正確では無いようだ。

▼ Maximum URL length is 2,083 characters in Internet Explorer(英語のページ)
http://support.microsoft.com/kb/208427/en

ここには、以下のように書かれている。
・IE で使用できる URL の長さは最大 2083文字である
・IE で使用できるパスの長さは 最大 2048文字である
・GET メソッドで送信できるパラメータは、2048から実際のパスの長さを引いた文字数まで
送信できる
・IE7 でも仕様は同じである

"パス" というのは、恐らく URL から "http://" や "https://" などを除き、
先頭に '/' を加えた物と思われる。

例えば、以下のような URL の場合
"http://aaa.bbb.co.jp/hoge?fuga=aaaaaaaaaaaaaaaaaaaaaaaaaa..."
パスは "/aaa.bbb.co.jp/hoge?fuga=aaaaaaaaaaaaaaaaaaaaaaaaaa..." となる。

私の手元で行った検証では、このパスが 2046文字以内ならば、正常にアクセスできた。
2048文字と比較して 2文字の違いが有るのは、改行コードなどの問題だろうか?

エンジニアとしては追求したい気持ちもあるが、あいにくと私は SE であり、
プログラマーではない。
本職以外の事にこれ以上工数をかけるなと上司に諭され、泣く泣くあきらめた。
まあ、原因の一次切り分けは十分に行ったと思うので、これ以上は開発部が
何とかしてくれるだろう。

家で仮想マシンを使う事になったので、VMware Server 2 を入れた。

インストール、使用方法については、IDEA*IDEA さんが詳細に書いてくださっているので無事に終了。

▼ IDEA*IDEA VMware Server 2を入れてみた(そして使わないことにした)
http://www.ideaxidea.com/archives/2008/09/vmware_server_2.html

ところで、VMware Server 2 については、IDEA*IDEA さんを含めて色々な所で叩かれている。
でも、そんなに悪いソフトかな?
インターフェースが Web になったので、VMware Server 1.x と使い勝手が変わったことは確か。
でも、アプリケーションタイプの仮想マシンとして必要な機能は一通りそろえているし、画面は十分に直感的だと思う。

あえて気になった点を挙げるとすれば、次のような事
1.ページをリロードするまで操作の結果が画面に反映されない事がある
2.インストール後、[スタート] -> [すべてのプログラム] から
VMware Server を選択するとブラウザーが https で Web インターフェースを開こうとする
(そして、セキュリティの関係で開くことが出来ない。)
3.新規に仮想マシンを作成する際、HDD を

1. について言えば、運用で十分回避できるレベル
2. について言えば、Web インターフェースには http でもアクセスできる
[スタート] -> [すべてのプログラム] -> [VMware] -> [VMware Web Access] -> [Web Access])


とりあえず、我が家のネットは、マンションタイプの Bフレッツを使用している。
その場合、マンションに 1個あるルータから DHCP で IP アドレスを振られる。
しかし、家の中のネットワークでは諸々の事情により固定 IP を振りたかったので、
VMware で簡易ルータ兼ファイやウォールを建てた。

今のところ、何も問題なく動いている。備忘録:router の設定大まかな流れは以下1. パケット転送を許可する2. iptables を編集する1. の方法 /proc/sys/net/ipv4/ip_forward の値を 1 にする echo 1 > /proc/sys/net/ipv4/ip_forward 又は /etc/sysconfig/network に "FORWARD_IPV4=yes" を記述 /etc/sysctl.conf を適当に編集(ディストリビューションによって異なるらしい)2. の方法 router として機能させるためには、最低限以下のコマンドを実行すれば良い # 定数の設定 INTERNAL_IP='192.168.0.0/24' INTERNET_IP=`ifconfig |grep 'inet addr:' |sed '2d; 3d; s/:/ /' |awk '{print $3}'` # デフォルトの設定(実運用では、セキュリティに配慮する必要有り) iptables -F iptables -t nat -F iptables -P INPUT ACCEPT iptables -P FORWARD ACCEPT iptables -P OUTPUT ACCEPT iptables -t nat -A POSTROUTING -s $INTERNAL_IP -j SNAT --to-source $INTERNET_IP