2

我有一个旧的 Web 应用程序 php4/mysql4(MyISAM,db 包含一些 cms、一些用户数据、一些日历应用程序)。现在我要迁移到一个带有 php5/mysql5 的新服务器。

迁移 mysql 数据库时是否应该更改为 InnoDB?- 预期的优势/劣势/风险?- MyISAM 是被弃用还是有一天会被弃用?或者我可以安全地保留它吗?- 我听说MyISAM 容易损坏,InnoDB 呢,它抗崩溃吗?- InnoDB 是否更容易或更安全地备份和恢复?

当我改变(破坏 SQL 查询)或破坏逻辑(因为改变了锁定机制)时,它会破坏我的代码吗?如果是这样,典型的场景是什么?

(对于 php 问题,我创建了一个不同的问题:Migrating php4/mysql4 to php5/mysql5: expected php issues?

4

2 回答 2

3

您应该研究的关键是您的数据库是如何使用的。如果它的读多于写,那么你应该坚持使用 MyISAM,如果它的写多于读,你应该研究 InnoDB。

如果您想知道 InnoDB 和 MyISAM 之间的区别,那么Wikipedia 上有一个很好的区别列表。

MyISAM 对任何现有行的写入使用表级锁定,而 InnoDB 使用行级锁定。

对于经常更新许多行的大型数据库应用程序,行级锁定至关重要,因为单个表级锁定会显着降低数据库中的并发性。

于 2009-04-13T23:34:35.587 回答
2

值得将 MySQL v4/v5 升级与表升级分开。这减少了潜在的问题范围。

也就是说,如果重新启动数据库很少发生,那么在 v4/v5 升级之前花一些时间查看 InnoDB 服务器选项,因为其中许多都需要重新启动数据库。推荐的两个是 innodb_file_per_table=1 和 innodb_flush_log_at_tx_commit=1(查找它们),您还应该查看 innodb_buffer_pool_size,因为如果没有人更改它几乎肯定会太低。

MyISAM 将会存在很长时间。它是一种非常健壮的磁盘格式,在许多情况下具有一些有用的特性。特别是,它的速度非常快SELECT,这对于没有更新或更新很少的小型表很有用。也就是说,一个非常热的表(很多很多SELECT)将受益于迁移到 InnoDB,因为 MyISAM 不支持并发读取。

MyISAM 几乎总是能在数据库崩溃中幸存下来,只不过是REPAIR TABLE需要而已。InnoDB 并不总是那么幸运。MyISAM 也可以从数据库中备份出来;即使您没有事先锁定表格,您也很可能会得到一个可以正常工作的文件。InnoDB 文件不是那么好;这就是 innodb_hot_copy 存在的原因。

我们最近进行了 MySQL v4/v5 升级,我们只有一个 SQL 问题:混合模式JOINLEFT JOIN在将隐式表连接与显式子句混合时,版本 4 的解析器相当宽容。版本 5 不是那么宽容。所以我们趁机搜遍了app,把所有的JOINs都升级为explicit JOINs。除了错过一两个景点外,这是非常成功的。

我建议您使用 PHP 4 与 MySQL v5 对话来设置测试环境。这将让您测试所有这些。

于 2009-04-14T01:01:38.593 回答