テーブルに関する特定の問題点は、MySQL
        サーバーが、データベースディレクトリ内に格納する
        .frm
        ファイル内にデータ辞書情報を保存する一方、InnoDB
        もまたテーブル領域ファイル内にあるそれ自体のデータ辞書に情報を格納するということです。もし
        .frm
        ファイルを移動させたり、サーバーがデータ辞書操作の最中にクラッシュしたりすると、.frm
        ファイルの場所は、InnoDB
        内部データ辞書内に記録された場所と同期しなくなってしまうかもしれません。
      
        同期していないデータ辞書の兆候は、CREATE
        TABLE
        ステートメントが失敗することです。もしこれが起こったら、サーバーのエラーログを確認する必要があります。もしログが、テーブルはすでに
        InnoDB
        内部データ辞書内に存在すると報告すると、対応する
        .frm
        ファイルを持たない
        InnoDB
        テーブル領域ファイル内に孤立テーブルを持つということになります。エラーメッセージはこのようになります:
      
InnoDB: Error: table test/parent already exists in InnoDB internal InnoDB: data dictionary. Have you deleted the .frm file InnoDB: and not used DROP TABLE? Have you used DROP DATABASE InnoDB: for InnoDB tables in MySQL version <= 3.23.43? InnoDB: See the Restrictions section of the InnoDB manual. InnoDB: You can drop the orphaned table inside InnoDB by InnoDB: creating an InnoDB table with the same name in another InnoDB: database and moving the .frm file to the current database. InnoDB: Then MySQL thinks the table exists, and DROP TABLE will InnoDB: succeed.
        エラーメッセージで指示された方法に従えば、孤立テーブルを削除することができます。もしまだ
        DROP TABLE
        を無事にに利用できないのであれば、その問題は
        mysql
        クライアント内での名前補完に原因があるかもしれません。この問題を解決するには、--skip-auto-rehash
        オプションを利用して
        mysql
        クライアントを開始し、もう一度
        DROP TABLE
        を実行してみてください。(名前補完がオンになっていると、mysql
        は今説明したような問題が存在するときに失敗する、テーブル名のリストを構築しようとします)。
      
        同期していないデータ辞書のその他の兆候は、.InnoDB
        ファイルを開くことができないエラーを MySQL
        がプリントすることです:
      
ERROR 1016: Can't open file: 'child2.InnoDB'. (errno: 1)
エラーログ内に次のようなメッセージが表示されます:
InnoDB: Cannot find table test/child2 from the internal data dictionary InnoDB: of InnoDB though the .frm file for the table exists. Maybe you InnoDB: have deleted and recreated InnoDB data files but have forgotten InnoDB: to delete the corresponding .frm files of InnoDB tables?
        これは InnoDB
        内に、対応するテーブルを持たない孤立した
        .frm
        ファイルがあることを意味します。孤立した
        .frm
        ファイルは、マニュアルで削除することで削除できます。
      
        もし MySQL が ALTER
        TABLE
        操作の最中でクラッシュしたら、InnoDB
        テーブル領域の中に孤立した一時テーブルができてしまうかもしれません。表モニターを使えば、#sql-
        で始まる名前を持つテーブルを表示できます。名前を逆引用符で囲めば、文字
        「#」
        を名前に含んでいるテーブル上で SQL
        ステートメントを実行することができます。したがって、先ほど説明した方法で、そのような孤立テーブルをほかの孤立テーブルと同じように削除することができます。UNIX
        シェル内でファイルをコピーしたりリネームしたりするには、もしファイル名が
        「#」
        を含んでいたら、ファイル名を二重引用符で囲まなければいけません。
      
        innodb_file_per_table
        が有効になっていると、.frm
        ファイルまたは .ibd
        ファイル (あるいはその両方)
        が見つからない場合に、次のメッセージが発生する可能性があります。
      
InnoDB: in InnoDB data dictionary has tablespace id N,
InnoDB: but tablespace with that id or name does not exist. Have
InnoDB: you deleted or moved .ibd files?
InnoDB: This may also be a table created with CREATE TEMPORARY TABLE
InnoDB: whose .ibd and .frm files MySQL automatically removed, but the
InnoDB: table still exists in the InnoDB internal data dictionary.
これが発生した場合には、問題を解決するために次の手順を試してください。
            どれかほかのデータベースディレクトリ内で対応する
            .frm
            ファイルを作成し、それを孤立テーブルが格納されているデータベースディレクトリにコピーします。
          
            元のテーブルに対して
            DROP TABLE
            を発行します。すると、そのテーブルが正常に削除され、.ibd
            ファイルが見つからないことを示す警告が、InnoDB
            からエラーログに出力されるはずです。
          

