繁体   English   中英

InnoDB在导入时转换为MyISAM

[英]InnoDB converting to MyISAM on Import

我正在CentOS 6.5下运行MySQL 5.1服务器。 在今天导入SQL文件的过程中,即使已声明使用InnoDB引擎,所有表也是在MyISAM下创建的。

例如,我在.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 config上添加了将默认引擎设置为InnoDB并重新启动的方法,但是由于表引擎被声明为InnoDB,因此不应该使用该声明的引擎而不是默认引擎来加载它吗?

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

另一种方法是禁用my.cnf中的其他InnoDB设置,直到运行innoDB。

 show engine innodb status

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

在长时间寻找问题的解释之后,我没有找到任何答案,但是有一些方法可以防止该问题并加以解决。

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

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

第三-由于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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM