It is worthwhile separating the MySQL v4/v5 upgrade from the table upgrades. That reduces the potential range of problems.
That said, if restarting the database is a rare occurance, then take some time to review the InnoDB server options before the v4/v5 upgrade, anyway, because many of them need a database restart. The two recommended are innodb_file_per_table=1 and innodb_flush_log_at_tx_commit=1 (look them up) and you should also look at innodb_buffer_pool_size, as it is almost certainly going to be too low if no-one has changed it.
MyISAM is going to be around for a long time. It is a very robust on-disk format that has some qualities useful for many situations. In particular, it has a fast SELECT
which can be useful for a smallish table that has no or very few updates. That said, a very hot table (lots and lots of SELECT
s) will benefit from being migrated to InnoDB because MyISAM does not support concurrent read.
MyISAM almost always survives a database crash with nothing more than a REPAIR TABLE
needed. InnoDB is not always so lucky. The MyISAM can also be backed-up out from under the database; even if you don't lock the table beforehand, you will very likely get a file that will just work. InnoDB files are not so kind; this is why innodb_hot_copy exists.
We recently went through a MySQL v4/v5 upgrade and we only had one SQL problem: mixed-mode JOIN
s. Version 4's parser was fairly forgiving when mixing implicit table joins with explicit LEFT JOIN
clauses. Version 5 is not so forgiving. So we took the opportunity to scour the app and upgrade all the JOIN
s to explicit JOIN
s. Apart from one or two spots that were missed, this was very successful.
I'd recommend you setup a test environment with PHP 4 talking to MySQL v5. This will let you test all this out.