2009-04-13 8 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サーバーのオプションを確認してください。データベースの再起動が必要な人が多いためです。推奨される2つはinnodb_file_per_table = 1とinnodb_flush_log_at_tx_commit = 1(それらを調べる)です。innodb_buffer_pool_sizeも見てください。誰もそれを変更しなければ、ほとんど確実に低すぎるはずです。

MyISAMは長い間続くでしょう。これは、多くの状況に役立ついくつかの特性を備えた非常に堅牢なオンディスク形式です。特に、それは速いSELECTを持っています。これは、更新のない小さなテーブルには役に立ちます。つまり、MyISAMは同時読み込みをサポートしていないため、非常に熱いテーブル(SELECT)がInnoDBに移行することで利益を得ます。

MyISAMはほとんどの場合、データベースのクラッシュには、REPAIR TABLE以上のものが必要です。 InnoDBは必ずしも幸運ではありません。 MyISAMは、データベースの下からバックアップすることもできます。あらかじめテーブルをロックしていなくても、うまく動作するファイルが得られる可能性が非常に高いです。 InnoDBファイルはあまり親切ではありません。これがinnodb_hot_copyが存在する理由です。

私たちは最近、MySQL v4/v5のアップグレードを行っており、SQLの問題が1つしかありませんでした:混合モードJOIN s。明示的なLEFT JOIN句と暗黙的なテーブル結合を混在させると、バージョン4のパーサーはかなり寛容でした。バージョン5はあまり許されていません。だから我々はアプリを精査し、JOINをすべて明示的にJOINにアップグレードする機会を得ました。見逃した1つか2つのスポットは別として、これは非常に成功しました。

PHP 4でMySQL v5と対話するテスト環境をセットアップすることをお勧めします。これですべてをテストすることができます。

3

あなたになります彼らは重要なことは、あなたのデータベースが使用されているか、です。 ReadよりWriteが多い場合は、MyISAMを使用してください。WriteよりもWriteが多い場合は、InnoDBを調べる必要があります。

InnoDBとMyISAMの相違点を知りたければ、相違点はWikipedia has a great listです。

MyISAMは既存の行への書き込みにテーブルレベルのロックを使用しますが、InnoDBは行レベルのロックを使用します。

多数の行が頻繁に更新される大規模なデータベースアプリケーションでは、単一のテーブルレベルのロックによってデータベースの並行性が大幅に低下するため、行レベルのロックが重要です。

関連する問題