アイルというレンタルサーバ(iCLUSTAプラン)の MySQL のバージョンアップ作業を依頼されました。
現状は MySQL4.0 を使ってるっぽいんですが、 MySQL5 に移行するようアイル側から通知があったそうです。
バージョン4は夏ごろに利用不可になるとか。。(そもそもパッチ提供がとっくに終わっている4.0をここまで引っ張るのも問題ですが...)
で、アイルのWEBサイトでDBバージョンアップについての情報を探してみましたが、ほとんど見当たりません。
仕方ないので、問い合わせることに。。
Q1:バージョンアップ時に、既存のテーブル構造、データを移行するようなシステムはあるのか?
A: ない。DBManagerから、ダンプ・リストアをユーザ側でやって。
Q2:ストレージエンジンは選べる?
Q3:テーブルの文字コードは選べる?
A :MySQL5側のデフォルト文字コードは ujis。文字コードの変更は不可。
Q4:DBへの接続情報は変わる? 変わる場合は前もってわかるの?
A :データベースサーバ名、ポート番号が変更。DB名は変わらない。バージョンアップ後に新しいDB名、ポート名を表示するよ。
なんというかアイル結構不親切だなと思った今日この頃です。
まず、DBのデータ移行くらいはしてほしかったですね。
また、文字コードが選べないのも問題です。特に、アイルのシステムはWEBサーバ,DBともに EUC を強要するんですが、配置してるHTMLやWEBアプリケーションはすべて UTF-8 で書いてます。
(よって、MySQL4.0 の時は無理やり UTF-8 のデータを放り込んでます。アイル付属のDB管理ツールDBManagerから見たら文字化けしまくりです。)
(でも、よく考えたら、MySQL4.1移行は SET NAMES が使えるので文字コード選べなくても問題ないですね。。。。)
それから、新しい接続情報を前もって教えてくれないってどゆことですか。これじゃ、バージョンアップしてから接続情報確認して、phpのソース書き換えてしないといけなくなり、その間データ移行も必要で、結局WEBアプリ停止時間が長くなってしまいます。
まあ、愚痴ばかり言ってもしかたないので、実作業のメモ。
まず、DBManager → databaseのバックアップ から既存のデータをダンプしてローカルに保存します。(このとき、ちゃんとUTF-8の情報も文字化けせずダンプできました。これが、テーブル毎で文字コード異なってるとおおごとなんでしょうね。)
この後、DBを使ってるページにメンテナンス中であることを表示させます。
次に、iCLUSTAのPlanManager → ユーティリティ → データベース設定 で MySQL のバージョンアップを実行します。
これで、データは全部消えちゃいます。
この時にパスワードの変更が要求されたので、前と同じパスワードを設定します。
それで、新DBサーバ名と、ポート番号が表示されるので忘れずにメモします。
ダンプしておいたファイルを DBManager → databaseのリストア から復元さしたのですが、案の定データが文字化けしてしまいました。
ということで一旦文字化けしたテーブル消し、phpMyAdmin を使用することとしました。(これも config.inc.php でDB接続先を新しいのに変更する必要あります)
phpMyAdminをutf-8でログインし、インポートからダンプファイルを選択し、文字セットを utf8 にします。
これでインポートすると、ujisのテーブルに、ujisに変換してインポートしてくれます。
最後はDBにつなぐPHPファイルでDB接続情報の変更です。今回、DBにつなぐ部分はCakePHPだけだったので、database.php を修正するだけで済みました。
下記のような感じです。
var $default = array('driver' => 'mysql',
'persistent' => false,
'host' => '新サーバ名:ポート番号',
'login' => 'ログイン名は変わらず',
'password' => 'パスワード',
'database' => 'DB名も変わらず',
'encoding' => 'utf8', //これ重要。WEBアプリ側はUTF8の文字を要求。
'prefix' => '',
);
重要なのは 'encoding' => 'utf8' でしょうかね。
これを指定しないと、MySQLが勝手に考えた別の文字コードで返してくるので、文字化けしてしまいます。(HTML,PHPはUTF-8で作ってるので。。)
これで、なんとか無事に MySQL のバージョンアップが完了しました。