DOC HOME SITE MAP MAN PAGES GNU INFO SEARCH PRINT BOOK
 

(mysql.info.gz) InnoDB troubleshooting datadict

Info Catalog (mysql.info.gz) InnoDB troubleshooting (mysql.info.gz) InnoDB troubleshooting
 
 15.18.1 Troubleshooting `InnoDB' Data Dictionary Operations
 -----------------------------------------------------------
 
 A specific issue with tables is that the MySQL server keeps data
 dictionary information in `.frm' files it stores in the database
 directories, while `InnoDB' also stores the information into its own
 data dictionary inside the tablespace files.  If you move `.frm' files
 around, or use `DROP DATABASE' in MySQL versions before 3.23.44, or the
 server crashes in the middle of a data dictionary operation, the `.frm'
 files may end up out of sync with the `InnoDB' internal data dictionary.
 
 A symptom of an out-of-sync data dictionary is that a `CREATE TABLE'
 statement fails. If this occurs, you should look in the server's error
 log. If the log says that the table already exists inside the `InnoDB'
 internal data dictionary, you have an orphaned table inside the `InnoDB'
 tablespace files that has no corresponding `.frm' file. The error
 message looks like this:
 
      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.
 
 You can drop the orphaned table by following the instructions given in
 the error message.
 
 Another symptom of an out-of-sync data dictionary is that MySQL prints
 an error that it cannot open an `.InnoDB' file:
 
      ERROR 1016: Can't open file: 'child2.InnoDB'. (errno: 1)
 
 In the error log you will find a message like this:
 
      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?
 
 This means that there is an orphaned `.frm' file without a
 corresponding table inside `InnoDB'. You can drop the orphaned `.frm'
 file by deleting it manually.
 
 If MySQL crashes in the middle of an `ALTER TABLE' operation, you may
 end up with an orphaned temporary table inside the `InnoDB' tablespace.
 With `innodb_table_monitor' you see a table whose name is `#sql-...'.
 Starting from MySQL 4.0.6, you can perform SQL statements also on
 tables whose name contains the character `#' if you enclose the name in
 backticks.  Thus, you can drop such an orphaned table like any other
 orphaned table with the method described above. Note that to copy or
 rename a file in the Unix shell, you need to put the file name in
 double quotes if the file name contains `#'.
 
 Older MySQL versions did not allow accessing any table with a name
 containing `#'. The solution in older MySQL versions is to use a
 special InnoDB mechanism available starting from MySQL 3.23.48. When
 you have an orphaned table `#sql-id' inside the tablespace, you can
 cause `InnoDB' to rename it to `rsql-id_recover_innodb_tmp_table' with
 the following statement:
 
      CREATE TABLE `rsql-id_recover_innodb_tmp_table`(...) TYPE=InnoDB;
 
Info Catalog (mysql.info.gz) InnoDB troubleshooting (mysql.info.gz) InnoDB troubleshooting
automatically generated byinfo2html