でかるちゃー

毎日の発見に驚き、感じる!感謝する!

-スポンサードリンク-

mysql で create table が エラーするらしい

とあるところで、バグトラッキングシステムの「影舞」というのを使っているのですが、「ある日突然、新規プロジェクトの作成が出来なくなった。」との障害報告を頂きました。

影舞では、データの保存形式をXMLファイルやDBなどを選択できるのですが、その現場では、mysqlを選択していました。

で、その場合、「新規プロジェクトの作成」というのは、mysqlに対して「create table」を実行するということになります。

ちなみに、画面には以下の様なエラーメッセージが表示されていました。

Following errors occurred. Please contact administrator.

Unknown table 'kagemai.TestProjectName_reports' (DBI::DatabaseError)

うーん、create table が失敗しているはずなのに select のエラーが出ているっぽい。エラーログも追ってみましたが、それらしい原因がのこっていませんでした。これはエラーハンドリングしっかり出来てませんな。Σ(´∀`;)

影舞自体は何年も手を加えないまま運用してきたのですが、なぜ「ある日突然、新規プロジェクトの作成が出来なくなった。」のか。まぁ、そもそも「新規プロジェクト作成」自体が滅多に行わない作業なので、最近2~3ヶ月くらいで、その他環境周りの変化を調べると、やってました。

2ヶ月ほど前にmysql が乗っているサーバーの移設があり、ついでにmysqlのバージョンもあげていたのでした。たしか、移行前は「mysql4.x系か5.0系」で、移行後は「mysql5.6」でした。

むむむ、これは何か臭うぞと慣れないrubyでDBサンプルを書いて、しっかりとエラーログ残すようにしたところ、しっかりでました。

 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 = myisam default character set ujis' at line 1

これは昔、見たことあるぞ!と思い、「mysql create table type engine」でぐぐったところ。

MySQL 5.5 からTYPE構文はエラーになります - kngy.net

http://kngy.net/2011/05/19/mysql_5_5_type_error_engine/

 はい、これです。☆-(ノ゚Д゚)八(゚Д゚ )ノ

そんなわけで、修正です。

修正前

/kage/lib/kagemai/mysqlstore.rb: table_opt = " type = myisam"

修正後

/kage/lib/kagemai/mysqlstore.rb: table_opt = " ENGINE = myisam"

で、動作確認。

バッチリ動きました!ヽ(=´▽`=)ノ

 

ちなみに、この手の問題、影舞以外にも同様にmysqlを使っている古いバージョンのBTSCMSとか起きそうです。

先ほどのリンク先のコメントを見ていると、Movable Typeでも起きるようですね。WordPressとかでも古いバージョンだと起きるのかな?

 

mysqlの勉強ももう少ししないとね。