2009-04-13 49 views
2

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

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

当我改变(打破SQL查询)或破坏逻辑(由于更改的锁定机制),它可以中断我的代码吗?如果是这样,典型的情况是什么?

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

回答

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问题:混合模式JOIN s。将隐式表连接与显式LEFT JOIN子句混合时,版本4的解析器相当宽容。版本5并不那么宽容。因此,我们借此机会刷新应用程序并将所有JOIN s升级到明确的JOIN s。除了一两个错过的点外,这是非常成功的。

我建议你设置一个PHP 4与MySQL v5交谈的测试环境。这将让你测试所有这一切。

3

你应该看看,就会使用你的数据库如何他们关键的事情。如果它比Write更多,那么你应该坚持使用MyISAM,如果它的Write比Read更多,你应该看看InnoDB。

如果你想知道InnoDB和MyISAM之间的区别,那么Wikipedia has a great list的区别。

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

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