所以我认为我在 Joomla 的某个组件上遇到了问题,因为我没有设置数据库来使用 InnoDB 引擎。我之所以这么想,是因为我没有在 MySQL 的运行中做任何更改,并且相信 MyISAM 是默认的。有没有办法首先检查一下?
其次,如果我认为是真的,那么是否有人知道将数据库从一个引擎转换为另一个引擎的优质资源/指南?我找到了一些,但必须指出的是,我是一个 SQL 新手,这在某种程度上可以说是一次严峻的考验。到目前为止,我看过的指南在方法上都有些不同,而且很多命令都混杂在一起,让人很难弄清楚到底发生了什么。最大的好处是,这台服务器是虚拟的,我已经拍了很多快照,所以任何错误都不是大问题。
我正在使用带有 Ubuntu 9.10 x64、Apache 2.2.12、MySQL 5.1.37 和 PHP 版本 5.2.10-2 的 Lamp 堆栈
答案1
相信 MyISAM 是默认值。有没有办法首先检查一下?
是的,只需查看 my.ini(或 my.cnf)并搜索 myisam 或 innodb 或 engine。如果未指定任何内容,请在 mysql 网站上查看您的 mysql 版本的默认设置。您可以找出如何使用该SHOW TABLE STATUS
命令创建表,并查找引擎在输出中。
是否有人知道将数据库从一个引擎转换到另一个引擎的良好资源/指南?
我知道的最简单的方法就是 mysqldump 当前数据库,然后打开转储文件并用 innodb 替换所有 myisam。然后删除旧数据库,创建一个新数据库,并从修改后的转储中导入。
PS:发动机位于桌面高度不是在数据库级别!
答案2
回答你问题的第一部分。确定哪个存储引擎是默认存储引擎的最快方法是发出以下命令;
$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 数据库。然后,您可以使用查找替换来更改生成的 SQL 转储;
sed -i 's/MyISAM/INNODB/g' file.sql
但是,正如 Patkos 所建议的那样,我只需转储创建语法,然后创建一个新的数据库,但将该模式的默认引擎设置为 Innodb,然后重新导入数据