富士山 御殿場口


Date/Time: 2016:10:15 09:31:37
Camera: PENTAX
Model: PENTAX K-5 II s
Exporsure Time: 1/800
FNumber: 5.6
Aperture Value: 5.0
Focal Length: 21.0

Close

y2blog » MySQL 4 → MySQL 5 へのアップデート

2

21

2010

MySQL 4 → MySQL 5 へのアップデート

MySQL 4 から MySQL 5 へのアップデート


データベースの文字化けに悩まされないために


WordPress が2.9.x になって暫く経過したので、試しにアップデートしようとしたらMySQLのバージョンが 4.x には対応していませんと言われてしまいました.使っているレンタルサーバがさくらのインターネットサーバなので、MySQL5には変更可能なのですが、最初にレンタルサーバを申し込んだ時の環境が PHP4 + MySQL4 だったので、PHPだけV5系列に切り替えて使っていました.


さくらのインターネットサーバのFAQにMySQL4 → MySQL 5 への切り替え方法が簡単に紹介されていたので、ちょうど良い機会なので思い切ってMySQL 5へ切り替えてみることにしました.このFAQにはしつこいくらい文字化けやMySQLについては一切サポートしないと書かれている.全て自己責任で対応しろと言うことのようですが、文字化けが起きた場合のトラブルシュートの方法ぐらい載せて置いても良いのではないでしょうか.


今回のMySQLのバージョンアップで起こった文字化けに対してどのような手順で文字化けを回避したのか簡単に紹介します.今回の方法はたまたま試行錯誤を繰り返して上手く行っただけのことだと思います.もっとスムーズ(簡単な)手法がきっと有る筈ですので、皆さんでもっとスムーズな手法を見つけ出してみて下さい.


MySQL4 → MySQL 5 への切り替えでは、DB システムの文字コードの取り扱いが大きく変更されたようで、データの移行では特に文字化けが起こりやすいので、実際にMySQL4 → MySQL 5 へ切り替える前に、文字化け対策の指南が書かれたページで予め勉強して置いて下さい.


参考URL:  [MySQLウォッチ]第36回 文字化けのメカニズム(日経ITPro)


さくらのインターネットサーバでのMySQLアップデート手順(概略)


まずは上記のFAQページにアクセスして手順を確認して下さい.このページに書かれているように、MySQL 4 からMySQL 5 に切り替えるには、既存のDBを削除しなければなりません.当然ですがこれまでに蓄積されていたDBの中身が全て無くなりますので、まず最初に行うことはDBのバックアップ(フルダンプ)を取ることです.


データベースの中身を綺麗に整理するという意味では、実際に必要なDBのテーブルだけダンプしたほうが良いのですが、念のためフルバックは必ず取っておきましょう.


データベースの中身の容量にもよりますが、フルダンプ(リストア)を行う際にphpMyAdmin は殆ど役に立ちません.取り扱うデータ量が多すぎてphpMyAdminがエラーを起こしてしまいます.従ってmysql コマンドなどのコマンドラインを駆使して作業を行う必要があります.

1.  既存データベースのフルバックアップを取る

まず、自分のアカウントでレンタルサーバにssh等でログインして下さい.前の記事『MySQL DB のバックアップ・リストア』でも紹介しましたが、さくらのインターネットサーバでは、WEBアプリケーションを動かしているサーバ(ログインしているサーバ)とデータベースサーバは物理的に別なサーバ上に置かれています.


さくらのインターネットサーバで『さくらのレンタルサーバで mysql コマンドは使えますか?』を確認しておいて下さい.


用意されている “mysqldump-4.0” コマンドを用いてデータベースのフルダンプを取ります.恐らくコマンドラインのオプションを設定すれば細かな制御ができる筈ですが、どのようなオプションが使えるかは予め調べておいて下さい.さくらのインターネットサーバでは、MySQL4系とMySQL5系のコマンドを区別するため、4系のコマンドには “-4.0” というサフィックスを付けてありますが、中身は通常の MySQLのコマンドラインツールそのものです.MySQL4.1 のマニュアルを参照して下さい.
単純にSQLで中身をそのまま吐き出すだけであれば
%mysqldump-4.0 -h mysqlxx.db.sakura.ne.jp -u user_name -p database_name > file_name
のように指定して下さい.さくらのインターネットサーバ(スタンダードプラン)ではuser_namedatabase_name の部分はログインアカウントと同じ筈です.このコマンドを実行するとデータベースのテーブル構造や中身がSQLで吐き出されます.念のため吐き出されたSQLの中身をテキストエディタ等で確認して問題が無いことを確認しておいて下さい.このSQLデータに問題があると取り返しがつきませんので、レンタルサーバ上と手元のPC上にもコピーを保存しておきましょう.

2.  既存データベースを削除し、新規データベースを作成する

データベースのバックアップが済んだら、次に『さくらインターネットサーバコントロールパネル』にログインして、データベースの管理画面に入ります.”データベースを削除” というボタンが有りますので、既存のデータベースを削除します.注意書きにあるように一旦削除すると復旧は自分でDBを新規作成し、バックアップデータからリストアする以外方法はありませんので、この作業は慎重に行って下さい.


データベースの削除が済んだら、同じデータベースの設定画面が、新規にデータベースを作成する画面に切り替わっている筈です.新規作成するデータベースの形式を指定し(MySQL5系)、データベースアクセス用のパスワードを設定します.無事データベースの作成が終わると、どのデータベースサーバ上にデータベースが作成されたのか情報が表示されますので、データベースサーバ名を控えて置いて下さい.データベース名は前と同じくユーザ名がそのままデータベース名になっている筈です.

既存のデータベースを削除する
データベースの設定画面で既存のデータベースを削除する
新しいDBを作成する
新しいデータベースを作成する

3.  新規データベース環境およびクライアント環境の確認

データベースのリストア作業を始める前に新しいデータベースサーバの環境やクライアント側のレンタルサーバの言語環境がどのようになっているのか確認する必要があります.この作業をきちんと行っておかないと高い確率で文字化けに悩まされることになります.先ずは、mysqlコマンドで現在の環境を表示してみます.


%mysql -h mysqlxxx.db.sakura.ne.jp -u xxxxxx -p
Enter password: 

mysql> show variables like 'character_set%';
+--------------------------+----------------------------------+
| Variable_name            | Value                            |
+--------------------------+----------------------------------+
| character_set_client     | ujis                             | 
| character_set_connection | ujis                             | 
| character_set_database   | ujis                             | 
| character_set_filesystem | binary                           | 
| character_set_results    | ujis                             | 
| character_set_server     | ujis                             | 
| character_set_system     | utf8                             | 
| character_sets_dir       | /usr/local/share/mysql/charsets/ | 
+--------------------------+----------------------------------+

mysql> show create database xxxxxx;
+----------+----------------------------------------------------------------------------------------+
| Database | Create Database                                                                        |
+----------+----------------------------------------------------------------------------------------+
| xxxxx    | CREATE DATABASE `xxxxxx` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci */ | 
+----------+----------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> 


この例では、新規作成されたデータベースの文字コードが “ujis” になっています.サーバコントロールパネルでデータベースを作成するとデフォルトで”ujis”となってしまうようです.


私は”ujis”ではなく、”utf8″ を使いますので、サーバコントロールパネルでデータベースを作成した後で、自分でデータベースの character_set_systemを”utf8″ に変更してあります.この作業はコマンドライン以外でも、phpMyAdmin のGUI画面でも変更可能ですので、もしデータベースの文字コードが自分が使いたい文字コード以外で作成されている場合は、データベースのリストアを行う前に変更しておいて下さい.

Collationの設定
データベースの文字コードの設定をphpMyAdminで変更している様子

4.  文字環境の統一

データベースの文字コード環境の確認が済んだら、再びレンタルサーバのコンソールに戻って、先程ダンプしたSQLデータを新しいデータベースにリストアします.今度は MySQL4系のコマンドではなくて MySQL5系のコマンドを使います.


使用するコマンドとしては “mysqlimport” を使うのが一般的でしょうが、恐らくコマンドライのオプションで細かく文字コードなどの設定を行わないと文字化けが発生するでしょう.今回は”mysqlimport” コマンドは試していませんので、このコマンドを使う場合は各自でオプションの詳細を調べてみて下さい.文字コードの自動変換機能が勝手に作用しないように設定する必要があるでしょう.


今回は “mysql” コマンドでデータベースのリストア作業を行ってみました. “mysql” コマンドでデータベースサーバにつながった状況で、”status” コマンドで状態を確認しておきます.


mysql> use xxxxx;      (← 使用するデータベースを指定している)

mysql> status;
--------------
  ... 

Using delimiter:	;
Server version:		5.1.42 FreeBSD port: mysql-server-5.1.42
Protocol version:	10
Connection:		mysqlxxx.db.sakura.ne.jp via TCP/IP
Server characterset:	ujis
Db     characterset:	utf8
Client characterset:	ujis
Conn.  characterset:	ujis

  ...

サーバ側の文字コードとクライアントの文字コードが”ujis” のままです.サーバ側の文字コード環境についてはユーザ側からは変更する術が無さそうですので、とりあえずそのまま放っておきます.クライアントの文字コードを”utf8″ に変更します.クライアント側の文字コードを変えるには、mysqlコマンド下で “set names” の後にutf8 を指定します.


mysql> set names utf8;
Query OK, 0 rows affected (0.01 sec)

mysql> status
--------------
  ...
Connection:		mysqlxxx.db.sakura.ne.jp via TCP/IP
Server characterset:	ujis
Db     characterset:	utf8
Client characterset:	utf8
Conn.  characterset:	utf8

  ...
 

これで、サーバ側の文字環境以外は “utf8” で揃いましたので、先程バックアップした SQLダンプデータでリストアする前準備が整いました.

5.  データベースのリストア

データベースの文字コード環境の設定が済みましたので、SQLダンプデータを使ってリストアします.”mysql” コマンドの下で、”source” コマンドでバックアップ済みのSQLダンプファイル名を指定するだけです.


mysql> source DBBackupFeb20.sql;
Query OK, 0 rows affected, 1 warning (0.02 sec)

Query OK, 0 rows affected, 1 warning (0.02 sec)

Query OK, 1 row affected (0.02 sec)

Query OK, 1 row affected (0.01 sec)

  ...
 
 

特にエラーが無ければデータベースのリストア作業は問題無く行われた筈です.phpMyAdminやmysqlコマンドなどのツールを使ってデータベーステーブルの中身を確認しておきましょう.文字化けが発生した場合は、データベース、テーブル、クライアントなどの文字コードが正しく設定されているかもう一度確認して下さい.

6.  アプリケーション側の設定変更

データベースのリストアは無事済みましたが、最後にデータベースにアクセスする側のアプリケーションソフトウェア側の環境設定も忘れずに行って下さい.さくらのインターネットサーバでは MySQL 4 系と MySQL 5 系のデータベースサーバは別々に運用されていますので、アプリケーションソフトウェア側のデータベースサーバに関する設定項目(サーバ名や接続パスワード)を書き換えることを忘れないで下さい.


以上で、さくらのインターネットサーバでの MySQL 4 系から MySQL 5 系へ切り替える作業は終了です.