先日、value-domain(GMO)のレンタルサーバー「coreserver」が新しい環境に移行しました。これに伴い、パッケージのバージョンが変更になりましたが、特に大きな問題は発生しませんでした。ひとつ、MySQLのバージョンが5.1から5.7に上がったため、5.6から実装されたコマンドにパスワードを入力するとアラートが表示される問題。cronでデータベースをダンプしているので、毎日毎日アラートがメールで飛んで来るように。根本から断つために、シェルを若干調整しました。mysql/mysqldumpexitと変更します。passwordとなります。これでcronが走る毎にメールが飛んでこなくなりました。入り組んだデータベースになりますと、正規化の基準となるカラムを間違えるととんでもないことになったりします。今回はさほど問題ではないのではなく、設定を基準にデータベースを正規化したものの、やはり後で色々と問題になりそうなので、データベースを基準に作り直すことにしました。更新時にはサービスをとめないといけないのですが、リスクを抱えたまま運営を続けるよりはよいでしょう。そのサービスとは印刷受注サイトプリントライのことです。一通り入れた後に、MySQLを入れ忘れたのに気がついて入れてみたところ、PHPからアクセスできない。実際にはphpMyAdmin3からアクセスできない。エラーメッセージも表示されず、1分ぐらい待たされて方真っ白な画面になってしまう。コマンドからは問題なくアクセスできるものの、mod_phpからアクセスできない。このときのPHPは5.3.3、MySQLは5.1.50(64bit)でした。httpd.confやphp.iniやmy.iniをいじっては見たものの改善せず。ここで不貞寝しました。最初にMySQLをノーマルからエッセンシャルに入れ替えたり、32bitにしたりバージョンを入れ替えたりしたけれどうまくいかない。PHPを入れる際にVCのライブラリを更新したのでそれに問題があるのではと考え、仕方がなくWindows7を入れなおすことに。Windows7を上書きでインストールしなおしてみたところ、前のシステムが複製されて残っていて、とっても気持ちが悪い状態に。仕方がないので改めてパーティションをフォーマットしなおしてから、改めて入れなおすことに。最初にMySQL5.1.50(64bit)を入れて、次にApache2.2.16、そしてVCを更新せずにPHP5.3.3を入れなおしてみたところ、やはり現象は同じ。ここでふとPHPのインストーラーにVCの対象を選択する新しい項目があったのを思い出して、前のバージョンで試してみようと思い立ちました。PHP5.2.14を入れなおしたところ、zlib.dllがないといわれるのでネットから拾ってきて放り込んだところ、難なく起動。問題だったのはPHP5.3.3.データベースとの連携が高いはずのPHPで、このような障害が発生しました。何でもかんでも組み込み関数にしてしまったPHPの成れの果てを垣間見た気がしました。結局それ以外では、ActivePerlを64bitにするとMinGWと連携できないようなので、32bitで入れなおしたぐらいで、特に大きな問題もなく開発環境は整いました。あとはデータを移していくだけです。これもかなり面倒なのですが。(i686)での話です。データベースをコピーしようともって、cronで保存してあったDUMPファイルをインポートしようと思ったらファイル形式が違うといわれてショック。これじゃバックアップの意味ないじゃん?原因は・・・なんだろ?とりあえず目先の問題を解決することにして、mysqlをダンプします。dump.sqlデータベースがでかいほど時間がかかるのはお約束です。正確にはインポートとは言わないらしいけど。dump.sqlこれもデータベースが大きいとそこそこ時間がかかります。<と>を切り替えるだけでok。これで、めでたしめでたし。通常のCGIでは問題なく動くスクリプトを、いざmod_perl環境下に置いたとたんに動かなくなるのはよくある話。変数や配列などの初期化がいい加減で、どんどん肥大化してしまうのは、日ごろから心がければ何とか回避できるものの、いまだに良くわからないエラーが次のもの。&ModPerl::ROOT::ModPerl::Registry::」Registryの後には実行されるスクリプトのパスが入る。mod_perl環境下で実行ファイルはモジュールとして扱われる。このため、ライブラリやモジュールの読み込みまわりで順番がおかしくなり、ファイルが見つからないといわれることになるのだ。この文字を検索すると以下のようなサンプルが表示される。lib_webObjects;1;startup.plを読めばいいらしいのだが、そのとおりにやってもサーバーエラーになる。Apacheのエラーログを見ても同じメッセージか載ってないので、構文エラーという前に効果がないのかもしれない。日本語のサイトがひとつも見つからないときは、英語が苦手でなければと常に思う。このエラーも.htaccessと、httpd.confにディレクトリで指定したときでは挙動が違うような気がする。Apache起動時に読み込ませた環境では、実行時に読む.htaccessと違うのはもちろん当たりまえなのだが、解決方法が見つからなければいくら原因がわかっていてもしょうがないのである・・・さてはて、いったいどうしたものか。久しぶりにジュンク堂池袋店へ行きました。レジの応対が不気味なほど丁寧で、しかも対応してくれた娘がちょっと好み入っていたのでドキドキ・・・ってオヤジですな。衝動買いした本はこれです。初版」となっている新刊です。ポケリ(ポケットリファレンス)シリーズは、まれに外れがあるけども割とお買い得なシリーズです。使い続けているMySQLへの理解を深めるために、この1冊を衝動買いしてしまったというわけです。admin返信PHPでMySQLを扱うときのお話。データベースに変更のあった行の数を取得するmysql_affected_rows();ただし、UPDATEの場合、更新が行わなければ0が返る。admin返信いい加減覚えられないので書いておく。基本的に使うのはMySQLなので。mysql_escape_string()は非推奨で、mysql_real_escape_string()がお勧めだったのか。非推奨だと無くなるかもしれないし、切り替えますか。