このドキュメントは2009年に行ったプロジェクトDBサーバ移行時のドキュメントです。現時点では得意必要ない文章ですが、参考までに残されています。 OSDNではプロジェクト Web 等から使用できるデータベースサーバとして、 mysql.sourceforge.jp という MySQL サーバを稼働させています。 このサービスを新しいハードウェアに移行し、 mysql5.sourceforge.jp として稼働することになりました。
新サーバは MySQL 5.0 を利用しており、 旧サーバの 4.0 とは文字コードの扱いなどが大きく異なっています。 よって、SourceForge.JP 側で一括してデータの変換を行うことができません。
そのため、しばらくの間、新旧両サーバを同時に動かしておき、 ユーザの皆様にデータの移行をお願いすることになりました。
移行期間は2009年5月31までの予定です。6月1日以降に旧サーバ(mysql.sourceforge.jp)は停止いたします。
移行期間が過ぎても移行を行っていないプロジェクトのデータの移行は行いませんので、 必要な場合は上記期間内に必ず作業を行ってください。
良く分からない場合や、手間が取れない場合は SourceForege.JP のスタッフに変換を 依頼することも出来ます(この場合は文字コード変換なしでバイナリで入れる事になります)。 その際は チケット まで対象のプロジェクト名を記入してください。
旧サーバ | 新サーバ | |
ホスト名 | mysql.sourceforge.jp | mysql5.sourceforge.jp |
MySQL のバージョン | 4.0.24 | 5.0.51a |
以下の移行作業が必要なのは、
プロジェクトでSourceForge.JPが提供しているデータベース機能を利用している場合のみ
です。
プロジェクトでデータベースを利用していない場合、移行作業は必要ありません。
プロジェクトメニューの「管理」から「データベースの管理」を参照してください。
「現在のデータベース」にデータベース名が表示されているプロジェクトはデータベースの 利用がありますので、作業の必要があります。
「このプロジェクトに割り当てられているデータベースはありません。」
のように、表示されているプロジェクトはデータベースの利用がありませんから、 作業の必要はありません(以下、読み飛ばしていただいて構いません)
データの移行を行うにあたって、以下のポイントに注意してください。
MySQL 5.0 では、データベース(テーブル)や接続クライアントなどにエンコーディングを設定し、 必要に応じてコード変換を行います。そのため、これらのエンコーディングの設定が間違っていると、 データが壊れてしまう場合があります。
mysql5.sourceforge.jp では、以下のようなエンコーディングに設定しています。 標準で全て文字コードは utf8 に設定され、データベースの文字コードも 初期状態では utf8 で作成されます。
mysql> show global variables like 'character_set\_%'; +--------------------------+--------+ | Variable_name | Value | +--------------------------+--------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | +--------------------------+--------+ 7 rows in set (0.00 sec)
データの文字コードに UTF-8 を使い、mysql コマンドのみを使う場合は、とくに設定は必要ありません。 しかし、多くの方が利用している Web アプリなど、 PHP や Perl のライブラリを利用して MySQL にアクセスする場合は、 character_set_client はデフォルトでは latin1 になっています。 そのため、UTF-8 を利用する場合であっても、各種設定およびコードの修正が必要になりますので、注意してください。
各種エンコーディング設定に応じてコード変換を行うため、 データそのもののエンコーディングを、 設定のエンコーディングに合わせておく必要があります。 たとえば、データベースのエンコーディング設定(character_set_database)と、 クライアントのエンコーディング設定(character_set_client)が utf8 になっているのに、 EUC-JP のデータを入れてしまうと、正しいデータが入らなくなってしまいます。
EUC-JP のデータを扱う場合は、 character_set_database と character_set_client をともに ujis に設定しておくと、 全く変換されずにデータのやりとりを行います。 また、character_set_database を utf8 にし、character_set_client を ujis にすると、 EUC-JP でデータのやりとりを行うが、データベースには utf8 に変換して保存することになります。
実際のデータがどのエンコーディングになっており、それと設定が合っているかどうかを必ず確認してください。
過去既にデータベースを使っていた場合、mysql5 側には空のデータベースが出来ています。 以下のような手順で、データを移行してから、アプリケーションの変更を行ってください。
例として、EUC-JP を利用している(内部的に EUC-JP で処理を行い、EUC-JP で出力している) アプリケーションを移行する方法について、下記のプロジェクト名を利用して解説します。
プロジェクトUNIX名 | mysql-test |
データベース名(プロジェクトUNIX名と同じ) | mysql-test |
データベースユーザ名(プロジェクトUNIX名と同じ) | mysql-test |
データベース接続パスワード | プロジェクトページで確認 |
初めに、移行後にどのエンコーディングを使うか決めてください。 今回の例では以下のように移行します。
MySQL 4.1 から、各種文字列関数や varchar カラムの長さ制限をバイト単位ではなく文字単位で扱ったり、 接続時に自動的に文字エンコーディングを変換する事が可能になっています。
この機能を正しく使うには、 アプリケーション側で MySQL のエンコーディングを設定出来る必要があります。 具体的には接続時に SET NAMES (もしくは charset や set character_set_* など)を発行出来なくてはなりません。
もし、アプリケーション側にそのような機能がなかったり、 アプリケーション側の変更を最低限に留めたい場合は、 MySQL 側でデータベースのエンコーディングを binary に設定することで、 今までのシステムをほとんど変更無しで動かすことができます。 その方法は最後に書きましたので、そちらもご確認ください。
まず、データをダンプします。ダンプする前に、アプリケーションのデータ更新系が止まっていることを確認してください。 ダンプ時にデータベースへの接続パスワードを聞かれますので入力してください。
mysqldump -h mysql.sourceforge.jp -u プロジェクトUNIX名 -p プロジェクトUNIX名 > dump.sql
mysql-test プロジェクトの場合、以下のようになります。
mysqldump -h mysql.sourceforge.jp -u mysql-test -p mysql-test > dump.sql
これで dump.sql の中にプロジェクトDBの全データがダンプされます。
次に、適切なエンコーディングオプションを付けて mysql5.sourceforge.jp に書き戻します。 使うコマンドは以下の通りです。
mysql -h mysql5.sourceforge.jp -u プロジェクトUNIX名 -p プロジェクトUNIX名 --default-character-set=エンコーディング名 < dump.sql
ここで指定する エンコーディング名 は、mysql.sourceforge.jp に入っていたデータのエンコード名を指定してください。 EUC-JP の場合は "ujis", Shift_JIS の場合は "cp932" を使います。
mysql-test プロジェクトの場合、いままで EUC-JP を利用していましたので、ujis を指定します。
mysql -h mysql5.sourceforge.jp -u mysql-test -p mysql-test --default-character-set=ujis < dump.sql
これにより、データは新データベースサーバに UTF-8 で格納されます。
もし、エンコードの指定を間違えた場合は、単純に指定を変更してもう一度リストアしてください。
データが問題なく入っているかどうか確認出来たら、アプリケーションの接続先ホスト名を ”mysql5.sourceforge.jp” に切り替えてください。
また、接続のエンコーディングを正しく指定してください。 具体的な設定方法はアプリケーション毎に異なるため解説できません。 アプリケーションの設定でできる場合もありますし、ライブラリの設定を行う場合もあります。 接続直後に "SET NAMES utf8" や "CHARSET utf8" と言ったクエリを自動実行するなど、 様々な方法で可能です。コードの変更が必要な場合は、ここで変更してください。
mysql-test プロジェクトの場合は EUC-JP を利用しますので、 たとえば、接続直後に "SET NAMES ujis" を実行するようにします。
最後に、アプリケーションを再開し、動作確認を行ってください。 問題が起きなければこれで完了です。
現在動いているシステムを極力変更なしで移動したい場合は、 MySQL 側でデータベースのエンコーディングを "binary" に設定します。 これによりクライアント側のエンコーディングが何であっても、 エンコード変換無しで結果を受け取ることが出来ます。
ただしこの場合、色々な動作がバイト単位になる点に注意してください。 例えば varchar カラムの文字数制限や、like のマッチの挙動 などがマルチバイト文字の途中に適用される可能性があり、 結果としてデータが破壊される場合があります。
具体的な手順は以下の通りです。
まず、ALTER DATABASE を使ってデータベースのエンコーディングを binary に変更します。 以下のようにします。
$ mysql -h mysql5.sourceforge.jp -u プロジェクトUNIX名 -p プロジェクトUNIX名 Enter password: (データベース接続パスワードを入力) Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 14263 Server version: 5.0.51a-24-log (Debian) Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> ALTER DATABASE `プロジェクトUNIX名` CHARACTER SET binary; Query OK, 1 row affected (0.00 sec) mysql> quit Bye
mysql.sourceforge.jp からデータをダンプし、--default-character-set=binary のオプションを付けて mysql5.sourceforge.jp に書き戻します。 使うコマンドは以下の通りです。 データベース接続パスワードを聞かれますので入力してください。
ダンプ
mysqldump -h mysql.sourceforge.jp -u プロジェクトUNIX名 -p プロジェクトUNIX名 > dump.sql
書き戻し
mysql -h mysql5.sourceforge.jp -u プロジェクトUNIX名 -p プロジェクトUNIX名 --default-character-set=binary < dump.sql
エラー無く終了すれば、新サーバ側にデータがコピーされています。 アプリケーションの接続先を mysql5.sourceforge.jp に切り替えてください。
[PageInfo]
LastUpdate: 2016-10-03 17:10:29, ModifiedBy: ishikawa
[License]
GNU Free Documentation License
[Permissions]
view:all, edit:members, delete/config:members