1

我在 CentOS 6.5 下运行 MySQL 5.1 服务器。今天在导入 SQL 文件期间,所有表都是在 MyISAM 下创建的,即使它们被声明为使用 InnoDB 引擎。

例如,我在 .sql 文件中声明了一个表,如下所示:

CREATE TABLE `customer` (
  `customer_id` int(11) NOT NULL AUTO_INCREMENT,
  `customer_no` varchar(20) DEFAULT NULL,
  `company_name` varchar(50) DEFAULT NULL,
[....]
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT

当使用以下命令导入 .sql 文件时:

mysql -u <username> -p < new_db.sql

客户表是使用 MyISAM 表创建的。这怎么可能?

为了解决我在 MySQL 配置中添加的问题,将默认引擎设置为 InnoDB 并重新启动,但是,由于表引擎被声明为 InnoDB,不应该使用声明的引擎而不是默认引擎来加载它吗?

4

2 回答 2

0

经过很长时间寻找该问题的解释后,我没有发现任何问题,但是有一些方法可以防止该问题并对其进行修复。

1st - 检查这个 MySQL 配置:no engine substitution. 这将有助于避免该问题。http://dev.mysql.com/doc/refman/5.0/en/sql-mode.html#sqlmode_no_engine_substitution

2nd - 发生错误时,同时使用show_warningsshow_engines查看发生的任何错误并查看是否启用了 InnoDb。您还可以show engine innodb status用来收集详细信息。

3rd - 由于 MySQL 5.1 默认将 MyISAM 作为默认引擎,设置 mysql 配置以使用 InnoDB 作为默认引擎。

default-storage-engine=InnoDB
default-table-type=InnoDB

如果所有这些都失败了,而您仍然无法找出原因或发生了什么,那么这可能会有所帮助:

$ sudo service mysqld stop
$ mv /var/lib/mysql/ib_logfile0 /var/lib/mysql/ib_logfile0.bak
$ mv /var/lib/mysql/ib_logfile1 /var/lib/mysql/ib_logfile1.bak
$ sudo service mysqld start

它没有正确解释问题发生的原因,但有助于解决问题。我的下一步是验证服务器和应用程序是否支持 MySQL 更新到 5.5

于 2015-01-15T13:43:40.200 回答
0

MySQL 5.1 有一些问题。我更喜欢更新它。

另一种方法是在你的 my.cnf 中禁用不同的 InnoDB 设置,直到 innoDB 运行。

 show engine innodb status

使用此命令,您可以检查当前状态。每次更改后不要忘记重新启动 mysql。

于 2015-01-14T21:32:17.047 回答