4

ファイルからmysqlコマンドラインアプリにコピーして貼り付けることにより、MySQLデータベースにテーブルを追加しています。私の手順は、ファイルから CREATE TABLE ステートメントをコピーして開発データベースに貼り付け、別のマシンのテスト データベースにも貼り付けることです。test データベースを使用しているのは私だけです。CREATE TABLE ステートメントで Engine=InnoDB を指定しています。テスト データベースでは InnoDB が有効になっています。

最近、別の開発者が、テスト データベースのテーブルがすべて MyISAM テーブルであることを発見しました。ファイルを確認しましたが、すべて「Engine = InnoDB」と表示されています。開発データベースを確認しました。テーブルは Engine=InnoDB です。

テスト データベースが InnoDB に問題がないことを証明するために、すべてのテーブルでエンジンを InnoDB に設定するために ALTER TABLE を実行しました。

コピー & ペーストまたはその他のばかげた間違いを犯したことを願っています。しかし、すべてのテスト テーブルが MyISAMであるというのは奇妙に思えます...確かに、私は自分の間違いとそれほど一貫していることはできません。すべてのバックアップと復元は mysqldump で行われています。

エンジンを誤って変更する方法はありますか?

4

1 に答える 1

4

これは、広く知られている MySQL の落とし穴の別の例だと思います。私はこの問題に数回遭遇しました。

基本的に問題は、InnoDB エンジンが何らかの理由 (通常は構成の問題) で起動に失敗した場合、MySQL が暗黙のうちに MyISAM エンジンにフォールバックすることです。あなたの声明が言うとしても:

CREATE TABLE (...) ENGINE=InnoDB;

次に、InnoDB がアクティブでない場合、MySQL は、警告も出さずに喜んで MyISAM テーブルを作成します。後で InnoDB の問題を発見して修正しても、問題の発生中に作成されたすべてのテーブルは MyISAM のままです。さようならデータの完全性!:)

実行SHOW ENGINESして、アクティブなエンジンを確認できます。詳細については、この MySQL バグ レポートを参照してください。

于 2009-11-26T06:48:08.957 に答える