使用InnoDB引擎创建新表时出现问题。 MyISAM没问题

时间:2014-02-24 17:42:16

标签: mysql innodb

我无法使用InnoDB引擎创建表。我的其余表正在使用InnoDB而没有任何问题。

创建表语句:

USE aps_cmdb;
CREATE TABLE IF NOT EXISTS servers_services(
  server_id INT(10) UNSIGNED NOT NULL,
  service_id INT(10) UNSIGNED NOT NULL,
  created DATETIME DEFAULT NULL,
  modified DATETIME DEFAULT NULL,
  created_by INT(10) UNSIGNED DEFAULT NULL,
  modified_by INT(10) UNSIGNED DEFAULT NULL,
  PRIMARY KEY (server_id, service_id)
)
ENGINE = MYISAM
CHARACTER SET utf8
COLLATE utf8_unicode_ci;

如果我放下桌子并使用engine = innodb重试:

USE aps_cmdb;
CREATE TABLE IF NOT EXISTS servers_services(
  server_id INT(10) UNSIGNED NOT NULL,
  service_id INT(10) UNSIGNED NOT NULL,
  created DATETIME DEFAULT NULL,
  modified DATETIME DEFAULT NULL,
  created_by INT(10) UNSIGNED DEFAULT NULL,
  modified_by INT(10) UNSIGNED DEFAULT NULL,
  PRIMARY KEY (server_id, service_id)
)
ENGINE = InnoDB
CHARACTER SET utf8
COLLATE utf8_unicode_ci;

我得到errno 150

如果我使用MYISAM引擎重新创建它并尝试将其转换为InnoDB:

ALTER TABLE servers_services ENGINE = InnoDB;

我收到以下错误:

Error on rename of './aps_cmdb/#sql-5241_3dae' to './aps_cmdb/servers_services' (errno: 150) SQL5.sql 1 1

我还查看了现有数据库中的所有外键,并且没有提到servers_services。由于我没有在create语句中创建外键,因此我怀疑在创建表时会产生任何影响。

将其他迷路MyISAM表转换为InnoDB时没有任何问题。

更新#1

SHOW VARIABLES LIKE 'inno%'

的输出
innodb_adaptive_hash_index  ON
innodb_additional_mem_pool_size 1048576
innodb_autoextend_increment 8
innodb_autoinc_lock_mode    1
innodb_buffer_pool_size 8388608
innodb_checksums    ON
innodb_commit_concurrency   0
innodb_concurrency_tickets  500
innodb_data_file_path   ibdata1:10M:autoextend
innodb_data_home_dir    /mysql/path/here
innodb_doublewrite  ON
innodb_fast_shutdown    1
innodb_file_io_threads  4
innodb_file_per_table   ON
innodb_flush_log_at_trx_commit  1
innodb_flush_method 
innodb_force_recovery   0
innodb_lock_wait_timeout    50
innodb_locks_unsafe_for_binlog  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_rollback_on_timeout  OFF
innodb_stats_method nulls_equal
innodb_stats_on_metadata    ON
innodb_support_xa   ON
innodb_sync_spin_loops  20
innodb_table_locks  ON
innodb_thread_concurrency   8
innodb_thread_sleep_delay   10000
innodb_use_legacy_cardinality_algorithm ON

更新#2

如果我这样做:

select * from information_schema.tables where table_name like '%service%';

我明白了:

(null) aps_cmdb2 servers_services BASE TABLE InnoDB

更新#3

在使用MyISAM创建表后,我在磁盘上有三个文件:

  1. servers_services.frm
  2. servers_services.MYI
  3. servers_services.MYD
  4. 我删除了表,磁盘上没有这些文件。我尝试使用InnoDB创建表,但仍然出现错误。

0 个答案:

没有答案