MB-Support

パソコン初心者のサポートページ

MySQL 4.0.13-nt から MySQL Community Server 5.1.50 へ移行方法 SJIS 後編



MySQL の設定

1.前編 の続きです。MySQL の設定へとすすみます。設定方法はマイクロソフトの TechNet を参照しました。 「MySQL Server Instance Configuration」で「Detailed Configuration(詳細構成)」をチェックして「Next」ボタンをクリックします。 次の画面でローカルのテスト環境にインストールするので「Developer Machine」をチェックして「Next」ボタンをクリックします。 本サーバーで利用するなら「Server Machine」や MySQL サーバーだけをインストールするサーバー PC なら「Dedicated MySQL Server Machine」を選択します。

PHP アプリケーション用の MySQL のセットアップ



2.「Multifunctional Database」をチェックして「Next」ボタンをクリックします。次の「InooDB Tablespace Settings」は、そのまま「Next」ボタンをクリックします。次の画面で「Decision Support(DSS)/OLAP」にチェックを入れ、「Next」ボタンをクリックします。本サーバーにインストールする場合は、「Online Transaction Processing (OLTP)」が良いかも知れません。



3.「Enable TCP/IP Networking」にチェックを入れ、「Port Number」に「3306」、「Add Firewall exception for this port」にチェックを入れ、「Enable Strict Mode」にもチェックを入れ、「Next」ボタンをクリックします。これにより、ポート「3306」がMySQL 4.0.13-nt と衝突します。そこで、サービスで先に MySQL 4.0.13-nt を停止しました。二つ同時に利用する事はありませんが、サービスで停止と稼働を手動にする事で、二つを使い分ける事ができます。



4.「Manual Selected Default Character Set / collation」にチェックを入れ、「sjis」を選択します。「Next」ボタンをクリックします。



5.「Install As Windows Service」にチェックを入れ、「Service Name」に「MySQL」以外を選択します。 なぜならば、「MySQL」は4.0.13-nt で使っているからです(サービスにて確認する文字)。さらに、「Lanch the MySQL Server automatically」「Include Bin Directory in Windows PATH」にチェックを入れ、「Next」ボタンをクリックします。



6.この設定は MySQL 4.0.13-nt と同じにします。root のパスワードを2回入力して、「Next」ボタンをクリックします。次に「Execute」ボタンをクリックします。



7.右の様に 4 つの項目にチェックが入ったら「Finish」ボタンをクリックします。



8.サービスを起動すると、今インストールした「MySQL501(選択した名称により異なる)」が表示され、スタートアップの種類は「自動」、状態は「開始」になっています。もし、データ移行が上手くできなければ、「MySQL501」のスタートアップを「手動」に、状態を「停止」に変更して、MySQL 4.0.13-nt を表す「MySql」のスタートアップを「自動」に、状態を「開始」にすれば元に戻ります。要するに、同時に利用するのではなく、サービスで使い分ける訳です。



データの移行

さて、MySQL Server 5.1の「data」フォルダーは何処にあるのでしょうか?このページの通りにインストールした場合は、C:\MySQL Server 5.1 に「my.ini」が保管されています。これを Windows に付属するメモ帳で開きます。



C:/ProgramData/MySQL/MySQL Server 5.1/Data/ に存在する事が分かります。これは、フォルダー オプションを変更しないと、エクスプローラーで追いかける事はできませんが、このアドレスをコピーしてエクスプローラーのアドレス欄に張り付けて「Enter」キーを押せば表示できます。



たぶん「mysql」の他に、「test」も存在していると思います。このフォルダーがデータベースで、その中にテーブルが存在します。



MySQL 4.0.13-nt のデータベース「goods」を新しい MySQL にコピー&ペーストします。同じ C ドライブなので、ドラッグ&ドロップすると単純に移動してしまいます。



もし、MySQL からデータを抽出して表示するホームページが文字化けするならば、my.ini の [mysqld] 以下に「skip-character-set-client-handshake」を追加します。



見当違いな事を多くやった日々・・・

PHP + MySQL(SJIS)の環境では、以下の40文字の後ろに\が挿入されます。また、挿入されない場合は、挿入しないとデータベースに書き込むことができません。

一、ソ、Ы、噂、浬、欺、圭、構、蚕、十、申、曾、箪、貼、能、表、暴、予、禄、兔、喀、媾、彌、拿、 杤、歃、濬、畚、秉、綵、臀、藹、觸、軆、鐔、饅、鷭

phpMyAdmin のエクスポートで生成したファイルには、当然これらの文字の後ろに「\」が入ります。これが問題なのかと思い、ホームページ制作ソフト(なければ、無料で利用できるテキストエディタ TeraPad)で40文字(たとえば「ソ\」)の\を置き換えで除去していました。しかし、全然関係ありませんでした。



本サーバーで利用するのはどうかと思いますが、ローカルでは phpMyAdmin を使っています。今回、これもアップデートしてみました。とりあえず、新しい環境でデータベースだけは手動で作成します。今回はデータベース「goods」のテーブルをエクスポートして移行したいと思います。MySQL Server 5.1 をサービスで停止して、 MySQL 4.0.13-ntを開始します。古いデータベースで「goods」を開き、「shinamono」テーブルをエクスポートしたいと思います。「Shinamono」テーブルを開き、「エクスポート」をクリックします。



ここでエクスポートして、新しい環境でインポートすれば済む話しなのですが、これがエラーが発生してどうも上手くできませんでした。本当は、データベースを丸ごとエクスポートするのが一番楽なのですが、どうにもならないので一つ一つ試してみる事になりました。



テーブルが複数ある場合は面倒なのですが、まず、インポートでエラーが発生したデータベースを個別にエクスポートします。ここで、構成とデータを分離しました。まず、「エクスポート」に「SQL」を指定して、「構造」にチェックを入れ、「データ」のチェックを外します。「ファイルで保存する」にチェックを入れ、「SJIS」にチェックを入れ、「実行する」ボタンをクリックします。これをデスクトップに保存します。



データベースの構造だけ、「テーブル名.sql」ファイルにエクスポートできました。



次はデータのエクスポートです。今度は、「エクスポート」に「CSVデータ」をチェックして、「ファイルで保存する」にチェックを入れ、「SJIS」にチェックを入れ、「実行する」ボタンをクリックします。これをデスクトップに保存します。



データベースのデータだけ、「テーブル名.csv」ファイルにエクスポートできました。



サービスで「sql」を停止して、新しい「MySQL501」を開始します。さらに、バージョンアップした phpMyAdmin にアクセスして、「言語」に「日本語 - Japanese」、「MySQL 接続の照合順序」に「sjis_japanese_ci」を選択します。データベースの「goods」は手動で作成するので、新規データベースを作成する」に「goods」と入力して、「sjis_japanese_ci」を選択、「作成」ボタンをクリックします。



データベース「goods」が作成できたので、これをクリックします。



「インポート」をクリックします。



まず、構造が保管された「テーブル名.sql」からインポートします。インポートするファイルで「参照」ボタンをクリックして、「テーブル名.sql」を指定します。ファイルの文字セットに「sjis」を指定、部分インポートのチェックを外し、インポートするファイル形式に「SQL」を選択します。オプションのSQL互換モードを「MYSQL40」に指定、「SJIS」エンコーディングへ変換するをチェックして、「実行する」ボタンをクリックします。



一度、データベースを変更するか、MySQLをリロードする必要がありますが、テーブルの構造がインポートできたのを確認します。右のスクリーンショットでは、「shinamono.sql」をインポートした事で、データベース「goods」にテーブル「shinamono」が作成されました。これを選択した状態で、「インポート」をクリックします。



インポートするファイルの「参照」をクリックして、「テーブル名.csv」ファイルを指定します。ファイルの文字セットに「sjis」を指定します。部分インポートのチェックを外して、インポートするファイルの形式で「LOAD DATA する CSV」をチェック、「SJIS」にもチェックを入れ「実行」ボタンをクリックします。



以上で、データをインポートできました。いろいろやった結果、この方法しか上手くいかなかったのですが、テーブルが多いと面倒です。他のテーブルを追加する場合は、再びテーブルをクリックして、インポートを実行します。データベースが多い場合は、どこへテーブルをインポートするか間違わない様にしましょう。しかし、これが出来るという事は、結局先に紹介した「data」フォルダー以下のデータベースフォルダーを、そのまま移動してしまえばいい訳です。



結局、このデータは新しい MySQL でも利用できる訳で、問題は MySQL を設定する時の文字コードだと思います。


my.ini

[client]
port=3306
[mysql]
default-character-set=sjis
[mysqld]
# The TCP/IP Port the MySQL Server will listen on
port=3306
skip-character-set-client-handshake
# The default character set that will be used when a new schema or table is
# created and no character set is defined
default-character-set=sjis

古い MySQL で SJIS を選択したため、このようなことになりましたが、このやり方が良いのかは疑問を感じます。 ですから、あくまでも個人的なメモで、多くの人に関係する事ではありません。これから始めるのであれば、SJIS を避けた方が良いとも思いますし、難しいところです。後は PHP との関連で、自分で作成したプログラムが新しいデータベースがまともに動くかのチェックが必要です。




戻る 一覧表示 次へ


Copyright © 2018 MB-Support パソコン初心者のサポートページ All Rights Reserved.

管理人サイト閲覧方法プライバシーポリシー著作権/免責事項