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
はい、これです。☆-(ノ゚Д゚)八(゚Д゚ )ノ
そんなわけで、修正です。
修正前
/kage/lib/kagemai/mysqlstore.rb: table_opt = " type = myisam"
修正後
/kage/lib/kagemai/mysqlstore.rb: table_opt = " ENGINE = myisam"
で、動作確認。
バッチリ動きました!ヽ(=´▽`=)ノ
ちなみに、この手の問題、影舞以外にも同様にmysqlを使っている古いバージョンのBTSやCMSとか起きそうです。
先ほどのリンク先のコメントを見ていると、Movable Typeでも起きるようですね。WordPressとかでも古いバージョンだと起きるのかな?
mysqlの勉強ももう少ししないとね。
【送料無料】実践ハイパフォーマンスMySQL第3版 [ バロン・シュワルツ ] |