ただいまブログのデザインがてきとーになっております

ここのところ当ブログのサーバーがCPU100%に張り付いて無応答になることが頻発していたので、ApacheとかPHPとかAPCとかWordPressプラグインとか、あーでもないこーでもないと色々いじっていました。

何をやっても改善しないので、ふとテーマファイルをWordPressについてきたものに変えてみると、サーバの負荷がぴたりとおさまりました。まさかテーマファイルが原因だったとは。

ということで、真の原因はまだ見てないのですが、時間が取れるまでこのテーマのままになります。

symfony1.x+propel1.3+MySQL5.1/5.5で生成したSQLのCreate TableがType=InnoDBで失敗する場合の対処法

サーバーをMySQL5.0から5.5に変えたら、symfony1.2+propelでbuild:allした際に生成されたSQLがエラーで動かなくなりました。

このようなエラー

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘Type=InnoDB’ at line 13

MySQL5.1以降で、テーブルのエンジン指定でtype=が使えなくなり、engine=と書かなければいけなくなったようです(table_optionのところ)。propel1.4以前のジェネレーターでは”type=InnoDB”のようなSQL文を生成しているので、古いpropelを使っているsymfony1.xではMySQLを5.1以上に変更した際にテーブルが生成できなくなってしまいます。

symfony1.2がpropel1.3-devを更新することはなさそうなので、これを回避するには、自分でpropelにパッチをあてることになります。

(symfony)/lib/plugins/sfPropelPlugin/lib/vendor/propel-generator/classes/propel/engine/builder/sql/mysql/MysqlDDLBuilder.php

163行目の

$script .= “Type=$mysqlTableType”;

を、

$script .= “Engine=$mysqlTableType”;

に修正。

XAMPP 1.7.0でMySQLアクセス時にApacheが落ちるとき

ここのところ普段と違うパソコンを使っているのですが、そこでPHP/symfonyの開発環境を構築する必要があり、ひさしぶりに、Windowsの簡単ウェブ開発環境インストーラXamppを使ってみました。

# 普段はビルド済のPHPとMySQL, Apacheをダウンロードして入れています。これでも手抜きと言われるかもしれませんが

xamppのサイトから、Windows版 1.7.0 ベーシック版 インストーラ(xampp-win32-1.7.0-installer.exe)というやつをダウンロードして実行するだけです。

それで、xamppについてくるサンプルや静的なページは問題なく動くのですが、symfonyで作ったアプリケーションを呼び出そうとすると、PHPがApacheを巻き込んで落ちてしまいます。

Apacheのログにはこんなエラーが

[notice] Parent: child process exited with status 3221225477 — Restarting.

いったいこれは何だ、ということで類似の問題が起こってないか検索してみたところ、このフォーラムにたどり着きました。XAMPP 1.7.0のインストーラが展開するdllが、XAMPPの中のMySQLと合致していないために起こると読みました。

フォーラムに書かれているとおり、

c:\xampp\php\libmysql_5.0.51a.dll

c:\xampp\php\ext\php_mysql_5.0.51a.dll

c:\xampp\php\ext\php_mysqli_5.0.51a.dll

を、それぞれ”_5.0.51a”のない方に上書きすることで、エラーは無くなりました。問題が解決するdllまで一緒に配布しているということは、原因は把握されてるんじゃないかと思うのですが、なんでこうなってるんでしょう。今これをやってるのがWindows 2000なので、XPやVistaでは問題ないのかしら。

というわけで、XAMPPで簡単にPHP開発環境ができることは確認できたのですが(上記の問題で何時間も使ったので簡単でもないという話も)、XAMPPの設定するphp.iniはいくつか微妙ですね。いまどきmagic quoteオンとかshort tagオンとか。E_NOTICEがオフになってたのでオンにしたら、XAMPP自身のトップページが警告を出しちゃうし。

WindowsのXAMPPでそのまま本番環境にする人はあんまりいないだろうとは思いますけど、万一自宅サーバとかでそういうことをするなら、php.iniは上から下まで読んで設定しなおしたほうがよさそうです。

[追記] Windows XPでも同様のエラーになるそうです

FlickrがPHP4からPHP5に移行

Flickr上で先月出された「このグラフの変化は何?」というクイズ

Drop in CPU

答えは、「PHP5に移行したFlickr.comのサーバのCPU利用率」ということでした。サーバのスクリプトエンジンをPHP5に切り替えた際に、上記のようなCPU利用率の削減が見られたということです。

このクイズを出したのは、Yahoo/Flickrでキャパシティ・プランニングを担当するジョン・アルスポーさん。先週のWeb2.0 ExpoでFlickrのサーバマシン入れ替えとパフォーマンス改善について話されています。

Web2.0 Expoのスライドで話されているのは、以下のような内容です。

  • Flickrのストレージ構成やデータ量
  • PHP5移行でCPU利用率が15%減ったこと
  • ImageMagickからGraphicsMagickに変更して高速化
  • OpenMPでサムネイル作成を並列化
  • サーバマシンを良いスペックのものに置き換えて台数や設置面積を削減
  • 交換前の古いサーバを、リアルタイム性を要しない処理や開発用に転用
  • 自動コンフィギュレーションやデプロイの自動化
  • 自己診断や自己回復を機械にまかせる
  • トラブルシューティング連絡手段(IRC, IMなど)とそのログ化や検索手段提供

未読ですが、この人のこの本もこのあたりについての本のようですね。

[am]4873113997[/am]

via Kitchen Soap

Windows VistaにMySQL5.051aを入れたときのトラブル回避

まだVistaへのホームマシン移行をやってます。

MySQL 5.0 Community Serverの今日のところの安定最新版5.051aをWindows Vista Home Premiumにインストールしようとしてつまったのでメモ。

まず、UACはとうの昔に切ってます。MySQL以外にも面倒が起こったのでつい。セキュリティセンターには叱られっぱなしです。

インストールを起動してTypicalでインストールは終了するのだけれど、そのあとConfigurationのコマンド(MySQL Server Instance Config Wizard)がエラーで起動できません。エラーメッセージはこれ。

指定されたファイルに対してこの操作を行うプログラムが関連付けられていません。コントロール パネルの [関連付けを設定する] でプログラムを関連付けてください。

何を何に関連づけるのか、さっぱりわかりません。このエラーメッセージの元ネタ、英語版を探すと

“This file does not have a program associated with it for performing this action. Create an association in the Set Associations control panel”

のようなので、MySQLとこのメッセージで検索すると、このページが出てきます。

この手順でこのエラーを回避できたよ、という話なので、したがってみることに。リンク先のバグレポートの回答にも関連した情報があります。

指定されたResource Hackerをダウンロードして実行。日本語翻訳版があるようです。(Windowsの開発環境を持ってる人ならResource Hackerを使わなくてもリソースの編集はできます)

MySQLInstanceConfig.exeファイルをリソースハッカーで開きます。/24/1/1033を開いて、”asAdministrator”を”requireAdministrator”に編集。スクリプトをコンパイルして保存、終了。

これで、MySQLInstanceConfig.exeが起動するようになります。

バグということで認識されているので、そのうち修正版が出るでしょう。