将MySQL数据库从MyISAM转换为InnoDB


4

因此,我认为Joomla的组件存在问题,因为我没有使用InnoDB引擎的数据库设置。我之所以这样认为是因为我在MySQL的运行过程中没有做任何更改,并且相信MyISAM是默认的。首先有办法检查吗?

第二,如果我相信是真实的,那么有人知道将数据库从一种引擎转换为另一种引擎的任何好的资源/指南吗?我发现了一些,但又急于指出,我是一名大量的SQL初学者,事实证明这有点像是洗礼。到目前为止,我看过的指南在方法上都有些不同,并且许多命令都被抽在一起,因此弄清楚正在发生的事情有些棘手。最大的福音是该服务器是虚拟服务器,我已经拍摄了很多快照,因此任何错误都不是主要问题。

我正在使用带有Ubuntu 9.10 x64,Apache 2.2.12,MySQL 5.1.37和PHP 5.2.10-2的Lamp堆栈

Answers:


2

相信MyISAM是最好的选择。首先有办法检查吗?

是的,只是在my.ini(或my.cnf)中查找并搜索myisam或innodb或引擎。如果未指定任何内容,请在mysql网站上检查您的mysql版本的默认值。您可以了解如何使用SHOW TABLE STATUS命令创建表,并在输出中查找引擎

有谁知道将数据库从一种引擎转换为另一种引擎的良好资源/指南吗?

我知道的最简单的方法就是mysqldump当前数据库,而不是打开转储的文件并将所有myisam替换为innodb。然后删除旧数据库,创建一个新数据库,然后从修改后的转储中导入。

PS:引擎在表级别而不在数据库级别!


转储数据库然后重新创建不是那么简单。可能需要很多干预,尤其是在用户有很多视图的情况下,因为娱乐顺序是一个因素。我不建议将此作为最简单的解决方案,尽管它是一种解决方案。
托尼·吉尔

您也不会获得任何约束和外键(如果有的话),因为MyISAM不支持它们。
卢卡·拉米什维利

7

回答您问题的第一部分。确定whoch存储引擎默认的最快方法是发出以下命令;

$mysql -h localhost -u user -p -e "SHOW ENGINES"

这将导致启用与您连接的数据库服务器所支持的引擎的列表。默认引擎将具有“ Support DEFAULT”(支持默认),指示将哪个引擎配置为服务默认引擎。

关于问题的第二部分。有很多方法可以做到这一点。第一种方法是使用SQL,因此您可以执行;

ALTER TABLE mytable ENGINE = InnoDB;

这可能有许多缺点。如果您的桌子也很大,那将需要一些时间。有关更多信息,请参见http://dev.mysql.com/doc/refman/5.1/en/alter-table.html。但是,如果它是一种快速而肮脏的方法,那会很好。

另一个选择是使用mysqldump转储所有MyISAM数据库。然后,您可以使用find replace更改生成的SQL转储。

sed -i 's/MyISAM/INNODB/g' file.sql

但是,就像Patkos建议的那样,我只转储create语法,然后创建一个新的db,但是将该模式的默认引擎设置为Innodb并重新导入数据

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.