テーブルに関する特定の問題点は、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
        テーブルスペースの中に孤立したテンポラリ
        テーブルができてしまうかもしれません。innodb_table_monitor
        を利用して、#sql-...
        が誰の名前なのかが表示されたテーブルのリストを確認する事ができます。名前をバックフォートで囲めば、文字
        ‘#’
        を名前に含んでいるテーブル上で SQL
        ステートメントを実行する事ができます。したがって、先ほど説明した方法で、そのような孤立テーブルを他の孤立テーブルと同じようにドロップする事ができます。Unix
        シェル内でファイルをコピーしたりリネームしたりするには、もしファイル名が
        ‘#’
        を含んでいたら、ファイル名を二重引用符で囲まなければいけない事を覚えておいてください。
      

