MySQL 4.0、5.0、5.1 の共存インストール

  MySQL 4.0インストール済み環境に、MysQL 5.0、MySQL 5.1 を共存



それぞれのバージョンでメリットがある為、2006/07/20 現在では全て共存する方向で考えます。

MySQL 4.0 : sjis 完全対応、レンタルサーバなどはまだこのバージョン
MySQL 5.0 : sjis は、テーブル名に使えない(バグ) が、正式リリース版
MySQL 5.1 : sjis 完全対応、但しベータ版でインストーラが付属していない


  • ※ MySQL 5.0 : ODBC ドライバが最新でないと動きません。5.1 は 古いタイプの 3.51 ドライバが動作します
  • ※ MySQL 5.1 : 06/09/08 現在で、4.0 で動いていたある複雑なSQL がエラーになりました。
  • ※ MySQL 5.1 : 06/09/11 追記 : group by の処理で ODBC ドライバは最新でないと動きませんでした
  • ※ MySQL 5.1 : 06/09/14 追記 : Shift_JIS で作成したDBが接続時 set names 'sjis' をしないと化ける環境がありました




  ODBC ドライバを最新に変更



ODBC ドライバ 3.51.04.00 は ADO ベースでメリットがあるのですが、
VIEW の使える MySQL 5.0、MySQL 5.1 を使うほうが大きなメリットがあるので、
最新(2006/07/20 現在)の ODBC 3.51.12 をインストールします。

ODBC ドライバ 3.51.04.00


旧 ODBC ドライバのアンインストール


mysql-connector-odbc-3.51.12-win32.msi を実行



  MySQL 5.0

MySQL 4.0 がサービスで実行中の場合は停止して下さい( 同じポートでインストールするので )
サービス名は絶対に MySQL5 にしてください。( MySQL4.0 のサービスと区別する )

1) http://dev.mysql.com/downloads/mysql/5.0.html より Windows (x86) をダウンロード
2) 解凍して Setup.exe を実行して Custom を選択
3) インストールディレクトリを C:\mysql5\ にしてインストールします



4) 続けて、Configuration Wizard が実行されるので、オプションは基本的にデフォルトで進めます(以下は変更)
※1 default character set を manual で sjis にする
※2 サービス名を MySQL5 にします
※3 root パスワードを入力して、Enable root access from remote machines にチェック







インストールが終了したら、自動起動しないように「サービス」から「手動」に切り替えます。



sjis 対応する為に、インストールディレクトリにある my.ini を編集します。

mysqld セクションに以下を追加して下さい

※ 追加後、MySQL5 サービスを再起動して下さい。

  
skip-character-set-client-handshake
  

これについての説明は、付属のマニュアルで以下のように書かれています

--character-set-client-handshake

Don't ignore character set information sent by the client. To ignore client information and use the default server character set, use --skip-character-set-client-handshake; this makes MySQL behave like MySQL 4.0.

--------------------------------------------------------------------
※ 接続時に set names 'sjis' という方法もあります。
クライアントの キャラクタセットが sjis 以外の場合有効であると思われます。

C:\mysql5\bin>mysql -h localhost -u root -D test --password=xxxxxxxx
でログインして以下を実行

show variables like 'character_set%';

以下のようになれば OK

Variable_nameValue
character_set_clientsjis
character_set_connectionsjis
character_set_databasesjis
character_set_filesystembinary
character_set_resultssjis
character_set_serversjis
character_set_systemutf8
character_sets_dirC:\mysql5\share\charsets\



  mysqld-nt の実行オプション

以下を実行して、usage ファイルに書き込みます

  
C:\mysql5\bin>mysqld-nt --verbose --help > usage
  

以下は、サービスに登録したり、サービスから削除する為の使用方法です。

Usage: mysqld-nt [OPTIONS]説明
NT and Win32 specific options:
--installInstall the default service
--install-manualInstall the default service started manually
--install service_nameInstall an optional service
--install-manual service_nameInstall an optional service started manually
--removeRemove the default service from the service list
--remove service_nameRemove the service_name from the service list
--enable-named-pipeOnly to be used for the
--standaloneDummyoption to start as a standalone server

サービスに登録されているコマンドラインは以下のようになります

  
"C:\mysql5\bin\mysqld-nt" --defaults-file="C:\mysql5\my.ini" MySQL5
  

上記登録をするには、以下のような実行をします

  
mysqld-nt --install MySQL5  --defaults-file="C:\mysql5\my.ini"
  



  MySQL 5.1 ベータ

2006/07/20 現在
mysql-noinstall-5.1.11-beta-win32.zip をダウンロード

※ インストーラが付属していないので、MySQL5.0 の my.ini を使用します

ダウンロードしたら、解凍して中身を C:\mysql51beta へ移動します。

C:\mysql5\my.ini を C:\mysql51beta にコピーして、中の mysql5mysql51beta に変更します

cmd.exe を実行し、カレントを C:\mysql51beta\bin にして以下を実行して下さい

my_ini.lzh
  
C:\mysql51beta\mysqld-nt --install MySQL51beta --defaults-file="C:\mysql51beta\my.ini"
  
共存前提なので、mysqld-nt はフルパスで実行して下さい(トラブルを回避できます)

インストールが終了したら、自動起動しないように「サービス」から「手動」に切り替えます。

これで、インストールは終了なので動作確認を行いますが、root パスワードは空のままなので注意して下さい

この方法が可能であるという事は、既にインストール済みで運用している DB や TABLE や データを持つ
MySQL5.1 をディレクトリごと他の PC にコピーしてサービスのみ登録すれば、そのまま動くと言う事です。
( ※ ほぼ同じ環境の PC で 5台検証しました )



  PHP での実行

MySQL 4.0 と MySQL 5.1 は、PHP 4 のいままでの環境でそのまま動きました。

しかし、MySQL 5.0 は、PHP で実行すると、以下のエラーが出ます

Client does not support authentication protocol requested by server; consider upgrading MySQL client

未確認ですが、これを動かすには PHP 5 の MySQL 改良版拡張サポート(mysqli) が必要そうですが、
なにかと環境設定が面倒そうです。

結局 ベータですが、MySQL 5.1 が全てにおいて使いやすいという事が解りました。
この結果から、MySQL 5.1 はひょっとして古い ODBC ドライバも使えるのでは無いかと思います。
( 使えました、というか深いところで最新版よりちゃんと動きます )

MySQL 4.0 で出ていた sjis.conf が無いとエラーになるという問題も発生しません。
( MySQL 5.0以降 では、xml になっています )



  MySQL 5.0 のテーブル名に sjis 使った場合のバグについて

テーブル名は、ファイルシステムの「ファイル名」として保存される為、各バージョンで以下のような変遷があります

1) MySQL 4.0 では、sjis 設定で、ファイル名は sjis で保存されていた。


2) MySQL 5.0 では、sjis 設定で、utf-8 の内部表現のまま保存されており、show tables 等で呼び出すと化ける。
( 元に戻す時に余計な変換がなされているようであった )
このバージョンでは、初期化パラメータとして、以下のようなのがあったが、実際は動作していない
--character-set-filesystem=charset_name

The filesystem character set. This option sets the character_set_filesystem system variable. It was added in MySQL 5.0.19.

しかも、MySQL 5.1 では無くなっていた。
要するに決めた仕様通りに動かすのが困難だったので、仕様変更されている。


3) MySQL 5.1 では専用エンコードされて保存され、変換は正しく行われている
( 例 : @53d6@5f15@30c7@30fc@30bf.frm )



  cp932 SJIS for Windows Japanese

SHOW CHARACTER SET を実行すると以下のような結果が得られます

CharsetDescriptionDefault collationMaxlen
big5Big5 Traditional Chinesebig5_chinese_ci2
dec8DEC West Europeandec8_swedish_ci1
cp850DOS West Europeancp850_general_ci1
hp8HP West Europeanhp8_english_ci1
koi8rKOI8-R Relcom Russiankoi8r_general_ci1
latin1cp1252 West Europeanlatin1_swedish_ci1
latin2ISO 8859-2 Central Europeanlatin2_general_ci1
swe77bit Swedishswe7_swedish_ci1
asciiUS ASCIIascii_general_ci1
ujisEUC-JP Japaneseujis_japanese_ci3
sjisShift-JIS Japanesesjis_japanese_ci2
hebrewISO 8859-8 Hebrewhebrew_general_ci1
tis620TIS620 Thaitis620_thai_ci1
euckrEUC-KR Koreaneuckr_korean_ci2
koi8uKOI8-U Ukrainiankoi8u_general_ci1
gb2312GB2312 Simplified Chinesegb2312_chinese_ci2
greekISO 8859-7 Greekgreek_general_ci1
cp1250Windows Central Europeancp1250_general_ci1
gbkGBK Simplified Chinesegbk_chinese_ci2
latin5ISO 8859-9 Turkishlatin5_turkish_ci1
armscii8ARMSCII-8 Armenianarmscii8_general_ci1
utf8UTF-8 Unicodeutf8_general_ci3
ucs2UCS-2 Unicodeucs2_general_ci2
cp866DOS Russiancp866_general_ci1
keybcs2DOS Kamenicky Czech-Slovakkeybcs2_general_ci1
macceMac Central Europeanmacce_general_ci1
macromanMac West Europeanmacroman_general_ci1
cp852DOS Central Europeancp852_general_ci1
latin7ISO 8859-13 Balticlatin7_general_ci1
cp1251Windows Cyrilliccp1251_general_ci1
cp1256Windows Arabiccp1256_general_ci1
cp1257Windows Balticcp1257_general_ci1
binaryBinary pseudo charsetbinary1
geostd8GEOSTD8 Georgiangeostd8_general_ci1
cp932SJIS for Windows Japanesecp932_japanese_ci2
eucjpmsUJIS for Windows Japaneseeucjpms_japanese_ci3

"How does cp932 differ from sjis" で chm を検索して下さい。

以下、Why is cp932 needed? の翻訳
---------------------------------------------------------------------------------------------
MySQLでは、sjis文字集合はIANAによって定義されたShift_JIS文字集合に対応しています。
IANAはJIS X0201とJIS X0208がキャラクタであるとサポートします。
( http://www.iana.org/assignments/character-sets を見てください。)

しかしながら、用語としての「シフトJIS」の意味は非常にあいまいになりました、
そして、それはしばしばシフト_JISへの様々なベンダーによって定義される拡張が含まれます。

例えば、日本のWindows環境で使用される「シフトJIS」はシフト_JISのマイクロソフト拡大です、
そして、正確な名前はマイクロソフトWindows Codepageです: 932かcp932。
Shift_JISによってサポートされたキャラクタに加えて、cp932はNEC特殊文字や、選択されたNECや
IBMの拡大キャラクタをサポートします

MySQL4.1以来、多くの日本人のユーザがこれらの拡大キャラクタを使用することにおける問題を経験しました。
これらの問題は以下の要素に由来します:

MySQLは自動的に文字集合を変換します。
Unicode (ucs2)で文字集合は変換されます。
sjis文字集合はこれらの拡大キャラクタの変換をサポートしません。

キャラクタの中にはいわゆる「シフトJIS」からUnicode までいくつかの変換規則があって、
変換規則によって異る Unicode に変換される人もいます。
MySQLはこれらの規則(後で説明される)の1つだけをサポートします。

MySQL cp932文字集合は、これらの問題を解決するように設計されています。
それはMySQL4.1.12現在、利用可能です。

MySQL4.1の前では、sjis文字集合に関連して「シフトJIS」のどんなバージョンも使用するのは安全でした。
しかしながら、MySQLが4.1で始まる文字集合変換をサポートするので、異なった変換規則を提供して、
2つの異なった文字集合にIANA Shift_JISとcp932を切り離すのは重要です。
---------------------------------------------------------------------------------------------



  information_schema について

MySQL をを管理するデータベースとして実装されています
( 以下は 5.1 の一覧( 5.0 より増えています )

テーブル名タイプ
1CHARACTER_SETSMEMORY
2COLLATIONSMEMORY
3COLLATION_CHARACTER_SET_APPLICABILITYMEMORY
4COLUMNSMyISAM
5COLUMN_PRIVILEGESMEMORY
6ENGINESMEMORY
7EVENTSMyISAM
8FILESMEMORY
9KEY_COLUMN_USAGEMEMORY
10PARTITIONSMyISAM
11PLUGINSMyISAM
12PROCESSLISTMyISAM
13REFERENTIAL_CONSTRAINTSMEMORY
14ROUTINESMyISAM
15SCHEMATAMEMORY
16SCHEMA_PRIVILEGESMEMORY
17STATISTICSMEMORY
18TABLESMEMORY
19TABLE_CONSTRAINTSMEMORY
20TABLE_PRIVILEGESMEMORY
21TRIGGERSMyISAM
22USER_PRIVILEGESMEMORY
23VIEWSMyISAM



  MySQL Connector/ODBC 3.51 のバージョン調整

通常は最新のドライバでどの MySQLも動作しますが、バージョンダウンしないと
全ての ODBC 機能が使えない場合があります。

しかし、基本的にバージョンアップの事しか頭に無いんでしょうか、
MySQL4.1 のあたりから、バージョンダウンがそのままではできません。
「プログラムの追加と削除」から削除しても、全ての関係ファイルが消えません。
Windows のシステムディレクトリ内の myodbc3*.* を全て手動で削除します

アーカイブで手に入る最新バージョンは 3.51.04 なので、ダウンロードして実行します
このドライバは、MySQL4.0 と MySQL5.1 で正しく動作し、MySQL5.0 では動作しません。



  sift_jis ツールで DB をメンテして、Web アプリは ujis で処理

MySQL5.1 を使えば、SQLの窓 Build C++ 等の shift_jis ベースのツールでメンテナンスしながら、
PHP の処理の接続直後に "set names 'ujis'" を実行しておくと、サーバーとクライアントのやり取りのみ euc-jp
に変更する事ができます。

これによって、euc-jp や utf-8 といった、レンタルサーバー等で使用されているキャラクタセット対応のアプリをローカル
で容易に開発できる事になります










  infoboard   管理者用   
このエントリーをはてなブックマークに追加





フリーフォントWEBサービス
SQLの窓WEBサービス

SQLの窓フリーソフト

素材

一般WEBツールリンク

SQLの窓

フリーソフト

JSライブラリ