現在、このサーバーのアップグレードを行っている最中です。
サーバーをOSごと移設するのは、dump & restore を使えるので確実なのですが、旧サーバーはOSが FreeBSD 9.3 で freebsd.org によるメンテナンスが終了していることと、ports からパッケージが廃止されて消去も出来ず放置せざるを得なくなっているパッケージ数が増えてきていることから、今回は新規インストールを選択し古いファイルを置き去りにしたいと考えました。
準備状況次第で程度の差はありますが、こういう時は、だいたい何らかのトラブルが発生します。
ちなみにサーバーは、x86 CPUは Celeron 1.2GHz → AthlonXP1600+ 1.4GHz へちょっとだけパワーアップ。メモリが1GB→3GB へ大幅増量しました。発熱マシンなので、今年の冬場だけ使用する予定。
まずは、新しいサーバーへ Webページだけ移設し終わりました。
この「システム管理メモ」を動かしている WordPress はMySQL データベースと、ファイルを丸ごとコピーしたので、全情報が引き継がれているはず。
ところが、ページの一部にエラーが発生します。
ページ右下に、当日のアクセス状況を表示するようにしていたのですが、これがエラーになってしまいます。
Fatal error: Call to undefined function mysql_real_escape_string() in …/notes/wp-content/plugins/statpress-visitors/statpress.php on line 429
Statpress-visitors という統計情報集計プラグインがあり、これのウィジェットが集計している、当日のアクセス数やページアクセス数を表示していました。これが上図のようなエラーとなります。
4項目の変数を表示していたので、この項目数を2項目まで減らすとエラーが出なくなりました。
コンテンツ丸ごとコピーなのになぜ?
エラーを検索してみると、
http://stackoverflow.com/questions/13856639/mysql-real-escape-string-is-undefined
に答えがありました。PHP の mysql拡張がインストールされていない場合にこの症状になるそうです。
<旧サーバー>
> pkg info|grep mysql mysql56-client-5.6.34 Multithreaded SQL database (client) mysql56-server-5.6.34 Multithreaded SQL database (server) php56-mysql-5.6.29 The mysql shared extension for php php56-mysqli-5.6.29 The mysqli shared extension for php
<新サーバー>
# pkg info|grep mysql mysql56-client-5.6.34 Multithreaded SQL database (client) mysql56-server-5.6.34 Multithreaded SQL database (server) php56-mysqli-5.6.29 The mysqli shared extension for php
確かに、php56-mysql が無い!
依存関係で自動的にインストールされると思っていたのですが、なぜか入っていませんでした。または、パッケージの出し入れも行っているので、途中で消えてしまったのか・・・・
ログは、旧マシンのもので上書きしてしまったので細かいことは不明。
原因はわかったので、php56-mysql を手動でインストールしたところ、問題解決。3つ以上の変数でも表示できるようになりました。
この Statpress-visitors のウィジットをページに貼り付けておくと、統計用ページを開かなくても、サイトページを開くだけで当日のアクセス状況がわかるので管理者としては便利です。