Bug #10487 DROP TABLE does not delete .ibd files when "One File Per Table" is set
Submitted: 9 May 2005 18:10 Modified: 1 Jun 2005 16:10
Reporter: Anker Berg-Sonne Email Updates:
Status: Can't repeat Impact on me:
None 
Category:MySQL Server: InnoDB storage engine Severity:S2 (Serious)
Version:4.1.11 OS:Windows (Windows Server 2000 SP1)
Assigned to: CPU Architecture:Any

[9 May 2005 18:10] Anker Berg-Sonne
Description:
DROP Table does not delete per-table .ibd files when "One File Per Table" is set. This causes a subsequent CREATE TABLE to fail. The .ibd file is also locked by the server, so I can't delete the file by hand without stopping the server.

How to repeat:
Set "One File Per Table" and then try to CREATE, DROP and then CREATE the same table.
[11 May 2005 7:25] Hartmut Holzgraefe
Couldn't reproduce this on Linux, looks like a windows only issue?
[11 May 2005 7:50] Heikki Tuuri
Anker,

please post the complete, unedited contents of the .err log. It is in the datadir of MySQL. You have probably a mismatch between existing .ibd files and the internal data dictionary of InnoDB.

DROP TABLE does work in the Windows version of 4.1.11, also if innodb_file_per_table is set.

Regards,

Heikki

C:\Program Files\MySQL\MySQL Server 4.1\bin>mysql test
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1 to server version: 4.1.11

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> show variables;
+---------------------------------+---------------------------------------------
----------------+
| Variable_name                   | Value
                |
+---------------------------------+---------------------------------------------
----------------+
| back_log                        | 50
                |
| basedir                         | C:\Program Files\MySQL\MySQL Server 4.1\
                |
| binlog_cache_size               | 32768
                |
| bulk_insert_buffer_size         | 8388608
                |
| character_set_client            | latin1
                |
| character_set_connection        | latin1
                |
| character_set_database          | latin1
                |
| character_set_results           | latin1
                |
| character_set_server            | latin1
                |
| character_set_system            | utf8
                |
| character_sets_dir              | C:\Program Files\MySQL\MySQL Server 4.1\shar
e\charsets/     |
| collation_connection            | latin1_swedish_ci
                |
| collation_database              | latin1_swedish_ci
                |
| collation_server                | latin1_swedish_ci
                |
| concurrent_insert               | ON
                |
| connect_timeout                 | 5
                |
| datadir                         | C:\Program Files\MySQL\MySQL Server 4.1\data
\               |
| date_format                     | %Y-%m-%d
                |
| datetime_format                 | %Y-%m-%d %H:%i:%s
                |
| default_week_format             | 0
                |
| delay_key_write                 | ON
                |
| delayed_insert_limit            | 100
                |
| delayed_insert_timeout          | 300
                |
| delayed_queue_size              | 1000
                |
| expire_logs_days                | 0
                |
| flush                           | OFF
                |
| flush_time                      | 1800
                |
| ft_boolean_syntax               | + -><()~*:""&|
                |
| ft_max_word_len                 | 84
                |
| ft_min_word_len                 | 4
                |
| ft_query_expansion_limit        | 20
                |
| ft_stopword_file                | (built-in)
                |
| group_concat_max_len            | 1024
                |
| have_archive                    | NO
                |
| have_bdb                        | NO
                |
| have_blackhole_engine           | NO
                |
| have_compress                   | YES
                |
| have_crypt                      | NO
                |
| have_csv                        | NO
                |
| have_example_engine             | NO
                |
| have_geometry                   | YES
                |
| have_innodb                     | YES
                |
| have_isam                       | NO
                |
| have_ndbcluster                 | NO
                |
| have_openssl                    | NO
                |
| have_query_cache                | YES
                |
| have_raid                       | NO
                |
| have_rtree_keys                 | YES
                |
| have_symlink                    | YES
                |
| init_connect                    |
                |
| init_file                       |
                |
| init_slave                      |
                |
| innodb_additional_mem_pool_size | 1048576
                |
| innodb_autoextend_increment     | 8
                |
| innodb_buffer_pool_awe_mem_mb   | 0
                |
| innodb_buffer_pool_size         | 8388608
                |
| innodb_data_file_path           | ibdata1:10M:autoextend
                |
| innodb_data_home_dir            |
                |
| innodb_fast_shutdown            | ON
                |
| innodb_file_io_threads          | 4
                |
| innodb_file_per_table           | ON
                |
| innodb_flush_log_at_trx_commit  | 1
                |
| innodb_flush_method             | unbuffered
                |
| innodb_force_recovery           | 0
                |
| innodb_lock_wait_timeout        | 50
                |
| innodb_locks_unsafe_for_binlog  | OFF
                |
| innodb_log_arch_dir             |
                |
| innodb_log_archive              | OFF
                |
| innodb_log_buffer_size          | 1048576
                |
| innodb_log_file_size            | 5242880
                |
| innodb_log_files_in_group       | 2
                |
| innodb_log_group_home_dir       | .\
                |
| innodb_max_dirty_pages_pct      | 90
                |
| innodb_max_purge_lag            | 0
                |
| innodb_mirrored_log_groups      | 1
                |
| innodb_open_files               | 300
                |
| innodb_table_locks              | ON
                |
| innodb_thread_concurrency       | 8
                |
| interactive_timeout             | 28800
                |
| join_buffer_size                | 131072
                |
| key_buffer_size                 | 8388600
                |
| key_cache_age_threshold         | 300
                |
| key_cache_block_size            | 1024
                |
| key_cache_division_limit        | 100
                |
| language                        | C:\Program Files\MySQL\MySQL Server 4.1\shar
e\english\      |
| large_files_support             | ON
                |
| license                         | GPL
                |
| local_infile                    | ON
                |
| log                             | OFF
                |
| log_bin                         | OFF
                |
| log_error                       |
                |
| log_slave_updates               | OFF
                |
| log_slow_queries                | OFF
                |
| log_update                      | OFF
                |
| log_warnings                    | 1
                |
| long_query_time                 | 10
                |
| low_priority_updates            | OFF
                |
| lower_case_file_system          | OFF
                |
| lower_case_table_names          | 1
                |
| max_allowed_packet              | 1048576
                |
| max_binlog_cache_size           | 4294967295
                |
| max_binlog_size                 | 1073741824
                |
| max_connect_errors              | 10
                |
| max_connections                 | 100
                |
| max_delayed_threads             | 20
                |
| max_error_count                 | 64
                |
| max_heap_table_size             | 16777216
                |
| max_insert_delayed_threads      | 20
                |
| max_join_size                   | 4294967295
                |
| max_length_for_sort_data        | 1024
                |
| max_relay_log_size              | 0
                |
| max_seeks_for_key               | 4294967295
                |
| max_sort_length                 | 1024
                |
| max_tmp_tables                  | 32
                |
| max_user_connections            | 0
                |
| max_write_lock_count            | 4294967295
                |
| myisam_data_pointer_size        | 4
                |
| myisam_max_extra_sort_file_size | 2147483648
                |
| myisam_max_sort_file_size       | 2147483647
                |
| myisam_recover_options          | OFF
                |
| myisam_repair_threads           | 1
                |
| myisam_sort_buffer_size         | 8388608
                |
| net_buffer_length               | 16384
                |
| net_read_timeout                | 30
                |
| net_retry_count                 | 10
                |
| net_write_timeout               | 60
                |
| new                             | OFF
                |
| old_passwords                   | OFF
                |
| open_files_limit                | 510
                |
| pid_file                        | C:\Program Files\MySQL\MySQL Server 4.1\data
\koticompaq.pid |
| port                            | 3306
                |
| preload_buffer_size             | 32768
                |
| protocol_version                | 10
                |
| query_alloc_block_size          | 8192
                |
| query_cache_limit               | 1048576
                |
| query_cache_min_res_unit        | 4096
                |
| query_cache_size                | 0
                |
| query_cache_type                | ON
                |
| query_cache_wlock_invalidate    | OFF
                |
| query_prealloc_size             | 8192
                |
| range_alloc_block_size          | 2048
                |
| read_buffer_size                | 131072
                |
| read_only                       | OFF
                |
| read_rnd_buffer_size            | 262144
                |
| relay_log_purge                 | ON
                |
| relay_log_space_limit           | 0
                |
| rpl_recovery_rank               | 0
                |
| secure_auth                     | OFF
                |
| shared_memory                   | OFF
                |
| shared_memory_base_name         | MYSQL
                |
| server_id                       | 0
                |
| skip_external_locking           | ON
                |
| skip_networking                 | OFF
                |
| skip_show_database              | OFF
                |
| slave_net_timeout               | 3600
                |
| slave_transaction_retries       | 0
                |
| slow_launch_time                | 2
                |
| sort_buffer_size                | 2097144
                |
| sql_mode                        |
                |
| storage_engine                  | MyISAM
                |
| sql_notes                       | ON
                |
| sql_warnings                    | ON
                |
| sync_binlog                     | 0
                |
| sync_replication                | 0
                |
| sync_replication_slave_id       | 0
                |
| sync_replication_timeout        | 0
                |
| sync_frm                        | ON
                |
| system_time_zone                | Normaaliaika
                |
| table_cache                     | 64
                |
| table_type                      | MyISAM
                |
| thread_cache_size               | 0
                |
| thread_stack                    | 196608
                |
| time_format                     | %H:%i:%s
                |
| time_zone                       | SYSTEM
                |
| tmp_table_size                  | 33554432
                |
| tmpdir                          |
                |
| transaction_alloc_block_size    | 8192
                |
| transaction_prealloc_size       | 4096
                |
| tx_isolation                    | REPEATABLE-READ
                |
| version                         | 4.1.11
                |
| version_comment                 | Official MySQL binary
                |
| version_compile_machine         | ia32
                |
| version_compile_os              | Win32
                |
| wait_timeout                    | 28800
                |
+---------------------------------+---------------------------------------------
----------------+
184 rows in set (0.05 sec)

mysql> create table anker(a int) type = innodb;
Query OK, 0 rows affected, 1 warning (0.30 sec)

mysql> drop table anker;
Query OK, 0 rows affected (0.09 sec)

mysql> create database test2
    -> ;
ERROR 1007 (HY000): Can't create database 'test2'; database exists
mysql> use test2
Database changed
mysql> create table anker(a int) type = innodb;
Query OK, 0 rows affected, 1 warning (0.20 sec)

mysql> drop table anker;
Query OK, 0 rows affected (0.05 sec)

mysql> create table anker(a int) type = innodb;
Query OK, 0 rows affected, 1 warning (0.24 sec)

mysql>
[11 May 2005 12:33] Anker Berg-Sonne
Hi Heikki,

I am afraid the log files have been deleted. Later the same day I had to do a hard reboot of the system, and when it came back up again the database was so badly corrupted that the server went into a loop complaining. I decided to delete all InnoDB files and the database and rebuild the database from a backup.

It is possible that all these problems stem from me using mixed case table names? The database is managed by a database independent front end that allows me to switch between database vendors relatively easily. It has its own schema meta data that is all mixed case. I can make the MySQL interface force table names in CREATE TABLE to lower case.

I'll try to replicate the problem with the new instance of the database.

Also, if I can cause the database to get corrupted again, I'll save more evidence. Its kind of hard to discipline yourself to do that because of the pressure of getting it up and running again. I have had two instances of corruption. The first was triggered by running out of disk space, the second by the hard reboot. When this database goes into production, it needs to not get corrupted because it will quickly grow to over a TB and restoring from a normal backup is going to be awfully slow.

Thanks for all your help, and sorry I can't give you more to work with/Anker
[1 Jun 2005 16:10] Heikki Tuuri
Hi!

This bug may have been caused by a mismatch between .ibd files and .frm files.

Regards,

Heikki