2017-08-29 7 views
-1

みんな!私はphpbb3.1フォーラムでデータベースを破壊しないようにしようとしています。今月2回潰された。 2つの質問があります:
1)MyISAMをInnoDBに変換するのは安全ですか?私は拡張機能が正常に動作するのでしょうか?次のバージョンに更新した後、フォーラムを利用できるようになりますか?
2)どのようにしてベースの破損を防ぐことができますか?Phpbb3.1 MyIsamデータベースが壊れました

p.s. 私はこの質問をここに掲載しました: https://www.phpbb.com/community/viewtopic.php?f=466&t=2436326

+0

この質問は、PHPとは全く関係がありません。なぜタグを付けましたか?また、全体的な質問はデータベース管理に関するものです。**は**コーディングではありません。 –

+0

私はphpbbがPHPに関連していると思った –

+0

はい。あなたの**質問**はありません。あなたが書いたコードで何かを尋ねてきたのであれば、それを使う方法を尋ねるだけではないでしょう。 –

答えて

1

私は想像してみましょう。あなたは停電していました。バックアップが復帰したとき、MySQLはいくつかのテーブルのインデックスが破損していると不平を言いましたか?そのテーブルはMyISAMでしたか?

  1. myisamchkを使用してテーブルを修復します。
  2. http://mysql.rjweb.org/doc.php/myisam2innodbのgotchasを調べて、InnoDBへの変換が新たな不具合を追加するかどうかを確認してください。おそらく何もないでしょう。 2つの部分からなるPRIMARY KEYは、InnoDBで実装されていない唯一のものです。また、MySQLのバージョンが古すぎる場合、InnoDBにはまだFULLTEXTのインデックスがないかもしれません(必要な場合)。
  3. my.cnf:key_buffer_size = 20Minnodb_buffer_pool_sizeの約半分と同じに変更してください。メモリ。
  4. ALTER TABLE xx ENGINE=InnoDB;各テーブルxx

私は、それぞれの更新/削除/挿入がテーブルに壊れている可能性があるとマークすると思いますが(確かではありません)変更を書きますが、マークはクリアされません。 mysqldがきれいにシャットダウンすると、すべてがディスクにフラッシュされ、これらのフラグはクリアされます。 mysqldが復帰すると、クリアされなかったフラグが返されます。したがって...

インデックスが破損しているかどうかは、そのインデックスを変更してクラッシュしたかどうかによってのみ異なります。 (すべてのテーブルにはいくつかのインデックスがありますか?)

通常、MySQLはクラッシュする前にディスクへの変更をフラッシュします。索引が実際に破損する時期にクラッシュが起こるのはたまにしかありません。修復にはフラグをクリアする「クイック」モードがあります。これを試すことができます。しかし、レコードが存在することを知ったときに不思議な "レコードを見つけることができません"というメッセージが表示された場合は、REPAIRが良いでしょう。

+0

@youngB - 潜在的な問題があるかどうか熟考できるようにPHPBBフォーラムに自分のリンクを投稿することをお勧めします。 –

+0

再生いただきありがとうございます。 私は、この手順で3番目の点について別の質問があります。 "key_buffer_size"と "innodb_buffer_pool_size"の値がすでにアドバイスしている値より大きい場合は、変更する必要がありますか? –

+0

これらは主メモリ割り当てパラメータです。それらがあまりにも多くなると、 "スワップ"することができます。これはパフォーマンスのためには不都合です。 MyISAMにはKey_bufferが必要です。もう一つはInnoDB向けです。しかし、InnoDB全体であっても、key_bufferはゼロであってはなりません。 4GB以上のRAMがあれば、InnoDBのbuffer_poolには70%のRAMが推奨されます。 –

関連する問題