|
9.データサーバー MySQL |
2007年3月10日 |
データサーバーMySQLを導入、稼動します。併せて管理ソフトphpMyAdminも導入します。 今回はMySQLのバージョンが4.0から5.0に上がり、データベースと言語コードに一部互換性がなく、ちょっと苦労しました。 |
これは主に次の2つのデータを保存する目的で使用します。
1.ホームページの内容(BBSを始めとしてこのホームページもそうです。)
2.メールのサイト、ユーザ、認証データ、メールボックスの設定など
今回はMySQLと、ブラウザからMySQLを設定したりデータを確認、修正できるように併せてphpMyAdminを導入します。
まずはMySQLの導入を
http://dev.mysql.com/doc/refman/4.1/ja/
を参考にしながら進めます。(Ver5の日本語ドキュメントが見つからないので。)
MySQLインストールその1 失敗編
データの互換性があるか等多少心配があります。
パッケージは、
MySQL-server (perl-DBIも依存関係により指定)
さらにMySQLを制御したり機能を追加するためのパッケージも入れます。
MySQL-client
... これでmysqlコマンドが使えるようになります。
MySQL-Max
... 古いサーバーには入っています。拡張機能を提供するとありますが本当に必要かどうかよくわかりません。
(MySQL-shared)
... phpインストールの際依存パッケージとしてすでにインストールされています。
例によってSynapticでMySQLサーバーをインストールします。
インストール後真っ先にやる特権ユーザーのパスワード設定
#mysqladmin -u root password "password"
な、なんと、サーバーに繋がらないとのエラー。
MySQLサーバーが起動していません。
#service mysql start をやってもだめ。
コンピュータを再起動してもだめ。
/var/lib/mysql に接続ソケット mysql.sock がありません。
インストール失敗です。
MySQLインストールその2 成功!
そこで/var/lib/mysqlをディレクトリごとコピーしたデータそっくり削除。
一旦入れたパッケージもSynapticで完全削除。
もう一度気を取り直してインストールを行います。
今度は以下のパッケージを指定。
MySQL-server
MySQL-client
MySQL-embedded
MySQL-shared
MySQL-devel
インストールが終ったらすぐにrootシェルからMySQLを設定するために必要な特権ユーザー(root)のパスワードを設定します。
#mysqladmin -u root password "password"
成功!
何で1回目がだめだったかは推定ですが、すでに/var/lib/mysqlがあってデータも入っていたので、インストール時の初期設定が省略された可能性があると思っています。
さらに追求する気もないのでひとまずいいことにします。
phpMyAdmin
http://www.phpmyadmin.net/pma_localized_docs/Documentation_ja.html
を参考にします。
これによるとphpにmcryptがあるといいと書いてあるのでさっそくインストール。
php5-mcrypt
libmcrypt (依存により)
の2点を入れておきます。
phpmyadminのホームページから最新版のファイルをダウンロードします。
現在のバージョンは 2.10.0.2 で、
all-languages.tar.bz2 をダウンロードしました。
ダウンロードしたファイルを右クリックでここに展開。
phpMyAdmin-2.10.0.2-...なるディレクトリができて中にファイルが入っています。
これをディレクトリごとそっくり/home/mysite/wwwにコピー、あるいは別のところにコピーして/home/mysite/wwwにディレクトリへのリンクを置きます。
ディレクトリあるいはリンクの名前を単にphpMyAdmin に変えます。
さて、設定です。
今回はsetupスクリプトを使用して設定してみます。
ダウンロードしたファイルの中の解説
http://localhost/phpMyAdmin/Documentation.html#setup_script
を参考にします。
phpMyAdminの中にconfigという名前のディレクトリを作り、apacheに書込み許可を与えておきます。
次にconfig.sample.inc.phpをconfigの中にコピーし、名前をconfig.inc.phpに変えてこれもapacheに書込み権限を与えておきます。
ブラウザから次のアドレスを開きます。
http://localhost/phpMyAdmin/scripts/setup.php
Not secure connection の表示が出ますが、SSL接続をしていないときの警告で気にする必要はありません。
Servers → [Add] を開き、次の項目を設定。
Authentication type を [cookie] にして Actions:[Add]
次に Configuration → [Save]
次にconfig/config.inc.phpを上のphpMyAdminディレクトリにコピーし、apacheのみに読み出し権限を与えます。
configディレクトリは設定がすべて完了したら消去してかまいません。
ブラウザから http://localhost/phpMyAdmin/ でつなぎます。
ユーザ名とパスワードを聞いてきますので、root, "password"を入力。
OKのようです。
但しこのphpMyAdmin2.10はけっこう遅いです。
バージョン2.6の頃から使っていますが、バージョンが上がるたびに遅くなってきている気がします。機能が追加されてきてるからしょうがないのかな。
phpMyAdminバージョンアップ 2007年9月8日
phpMyAdminの次のバージョンが出たのでさっそくアップグレード。
バージョンは2.11.0、やり方は前と同じ。
使ってみると2.10.0.2よりはだいぶ速くなった感じがしました。(でも遅い)
表示等が一部昔に戻っています。
凝った表示であまりに遅くなって不評が出たのでしょうか。
データの移行
ホームページのバックアップ用に作ったコピースクリプトにmysql以外(正確には/var/lib/mysql/mysql以外)の各データベースのコピースクリプトを加えてコピー。
再度phpMyAdminで見るとちゃんとデータが見れました。
でもちょっといやな予感が...
phpMyAdmin のスタート画面に
MySQL の文字セット:UTF-8 Unicode (utf8)
などと表示されています。
今までのバージョン(MySQL-4.0.25)ではたしかujis(EUC-JP)だったはず...
ひとまずそれはさておき、phpMyAdmin からmysqlデータベースを開き、userテーブルにユーザ名、パスワード、権限などを登録。このとき名無しユーザーやパスワードなしのユーザが仮登録されているのでそれは削除。
さらにdbテーブルにデータベース名、ユーザ名、権限を登録。
このmysqlデータベースだけは後述しますが前のバージョンのデータをコピーしてはいけません。
そしてmysqlを再起動。
#service mysql restart
これでapache-phpを通してデータの読み書きができるはずです。
文字化け
同じLAN内の別のコンピュータ(Windows)からhttp://192.168.1.3(新しいサーバーのIPアドレス)/
いちおうページのレイアウトは表示されますが、日本語は見事に文字化けして"???????"になってしまっています。(やっぱり!)
MySQLのオフィシャルサイトを見てもよくわかりませんでしたのでGoogleで検索したら以下のサイトが見つかりました。
http://iandeth.dyndns.org/mt/ian/archives/000108.html
さらにここからのリンクで
http://www.mysql.gr.jp/frame/modules/bwiki/index.php?FAQ
世の中にはずいぶん研究している方がいらっしゃるもので、もうほとんどそのまま。感謝!感謝!
結局 /etc/my.cnf をつくり、その中に以下を記述して読み出し書き込み共ばっちりOK!
[mysqld]
language = /usr/share/mysql/japanese
default-character-set = ujis
skip-character-set-client-handshake
[mysqldump]
default-character-set = ujis
skip-opt
[mysql]
default-character-set = ujis
[client]
default-character-set = ujis
しかしこれでも表示は問題なく行われますが、アクセスの度にmysqlディレクトリ(/var/lib/mysql)の(hostname).errに莫大なcharcter set不一致のwarningが書き込まれてしまいます。
結局最終的にはエクスポート/インポートでデータを移し言語コードの不一致を解消するしかないようです。サーバー切り替えの最後のバックアップのときにやることにします。
MySQL Ver4.0と5.0のちがい
MySQL自身が使用するデータベース/var/lib/mysql/mysqlはVer4.0とVer5.0で互換性がありません。一番重要なuserテーブルの項目を見ますとすでに項目がいくつか追加されています。また新しいテーブルも増えています。
このmysqlテーブルの(特にuserテーブルの)古いデータがあったことが今回MySQLの起動に失敗していた理由のようです。
従ってmysqlデータベースに関してはファイルコピーによる移行やバックアップ等は行えず、ユーザ名、パスワード、権限などをphpMyAdminから再度打ち込んで作成することにしました。(たいした件数もありませんでしたので。)
その他の自分で項目を設定したデータベースに関してはファイルコピーでOKのようです。
またサーバーのディフォルト言語も変わっているようで、サーバーシステムの言語がEUC-JPの場合はその設定も必要ということのようでした。
これらで一週間もかかってしまった...。
さらなる問題が...
データが欠落しているふしがあるのです。
調べてみるとデータを保持するバイト数に互換がないことが判明。
データ型char,varcharで従来の1/3位のバイト数しか保持されません。
すなわち、
1)データ保持数をバイト数から文字数に変更
2)それに伴いマルチバイト文字は3バイト程度ということで保持数を1/3に勝手に変換
3)ところがこれを半角文(1バイト文字)にも適用
ということで、半角英数字の保持数も約1/3になっていたのでした。
ほとんど「どじ!」としか言いようのない変更です。
これも
http://www.mysql.gr.jp/frame/modules/bwiki/index.php?cmd=read&page=FAQ
にはすでに書かれていたのですが見落としていました。
結局データ型変換プログラムを作って各サイトで走らせて解決。
データの場所変更
1) | ユーザデータをまとめておいた方がバックアップや確認が楽。 |
2) | 最悪OSの再インストールなどが必要になった場合、システムと関係ないパーテーションに保存してあればそっくり生かせる。 |
さっそくデータを全部/home/mysqlに移し、今後はこれで動作させることにしました。
MySQLの設定は特になにも変更してはいません。