3

それは簡単だったはずです...私はMyISAMにある約20のテーブルを持つデータベースを持っています。それらを InnoSB に変換したかったので、次のように実行しました。

alter table xxxx engine = InnoDB;

その結果、私は得る

ERROR 1050 (42S01): Table './yyy/xxx' already exists

いくつかのテーブルを試してみましたが、正しく変換された 2 つのテーブルにヒットするまで、すべてで起こると思いました。SHOW TABLE STATUS により、正しい変換が確認されました。不思議なことに、他のテーブルのいくつかは非常に類似または同等の構造を持っていましたが、変換されませんでした。

MySQL のバージョンは 5.5.27 です... phpMyAdmin を使用して、mysql コマンドを直接使用してみました。同じ結果です。

注: 以下に示すスレッドを見つけました。テストの一部を以下に示します。 - テーブルに対して mysqlchk を実行しました。問題ありません。- 提案された DROP TABLE が機能し、テーブルが消えます。 - REPAIR TABLE は、(論理的に) テーブルをファイルできないと報告します。- バックアップからテーブルを復元すると、同じエラーが再び表示されます。

並列の InnoDB テーブルが存在する可能性がありますが、それは表示されませんか?

4

1 に答える 1

1

公平を期すために、このソリューションは #takteek で示されたスレッドの最後のエントリの 1 つに触発されています。

問題はおそらくテーブルの重複 (MyISAM の元のテーブルと、おそらく InnoDB のいくつかのテーブルで、以前の実験から残ったもの) であると判断し、大ハンマー アプローチを使用することにしました。

  • ドロップ データベース yyy;
  • MyISAM データベースをバックアップから復元しました (サーバーを停止し、データベース アーカイブを untar し、サーバーを再起動しました)。
  • 次に、各テーブルで ALTER TABLES xxx ENGINE InniDB を実行しました

ツール (または知識) が不足していると感じさせるので、私は一般的にそのような劇的な解決策を嫌います。この場合、偽のテーブルを確認または確認する方法、またはそれらのテーブルを選択的に削除する方法を見つけることができませんでした。

とにかく、多分これは誰かを助けるでしょう。

于 2013-07-06T14:18:33.680 に答える