MySQLテーブルが繰り返しクラッシュします。

MySQLテーブルが繰り返しクラッシュします。

私はxen VM(DebianはPVモードで安定しています)を持っており、ここにJoomlaがあります。私はウェブサイトのホームページでこのメッセージを一日に何度も見る。

jtablesession::Store Failed
DB function failed with error number 144
Table './database@002enet/hfd_session' is marked as crashed and last (automatic?) repair failed SQL=INSERT INTO `hfd_session` 
( `session_id`,`time`,`username`,`gid`,`guest`,`client_id` ) VALUES ( 'iae9qhmfhst464v4d0a6ho6nt3','1330628728','','0','1','0' )

クラッシュした理由が見つかりません。

mysql.logとmysql.errのログはきれいです。 mysql遅いログにはいくつかの履歴しかありませんが、このテーブルにはリンクされていないようです。このテーブルだけが崩れました。

テーブルを削除して再作成し、システムを再起動し、fsckを使用してディスクを確認しました(エラーなし)。ただし、まだこの競合が発生するため、これを確認するたびに手動で修正する必要があります。

この問題を解決する方法はありますか?

 $ dpkg -l | grep mysql
ii  libdbd-mysql-perl                       4.016-1                         Perl5 database interface to the MySQL database
ii  libmysqlclient16                        5.1.49-3                        MySQL database client library
ii  mysql-client-5.1                        5.1.49-3                        MySQL database client binaries
ii  mysql-common                            5.1.49-3                        MySQL database common files, e.g. /etc/mysql/my.cnf
ii  mysql-server                            5.1.49-3                        MySQL database server (metapackage depending on the latest version)
ii  mysql-server-5.1                        5.1.49-3                        MySQL database server binaries and system database setup
ii  mysql-server-core-5.1                   5.1.49-3                        MySQL database server binaries
ii  php5-mysql                              5.3.3-7+squeeze3                MySQL module for php5

答え1

私たちは衝突が発生したmysqlテーブルを頻繁に扱うので、何を試すべきかについての提案はほとんどありません。

まず、テーブルを削除してmysqlを再起動してから、テーブルを再度追加してみてください。これにより、テーブルを完全に再作成し、潜在的な構造エラーを修正できます。または、テーブルを回復した後にflash_tablesを実行する方法も機能できますが、成功率が高くないことがわかりました。

それでも問題が解決しない場合は、テーブルをメモリ内のテーブルに完全に移動してみてください。 InnoDBまたはMyISMからMEMORYに切り替えて、競合が発生し続けるかどうかを確認してください。このテーブルは再起動時に結果を保持しませんが、セッションテーブルなので影響はありません。その理由は、システム/データベースのチェックポイントが発生したときに遅いディスクでは、テーブルの破損などの多数のクエリが生成される可能性があるためです。私はこれについて完全な相関関係を見ませんでしたが、各ケースでより速いサーバーのエラー数は遅いサーバーのエラー数に近いものではありません。仮想マシンであることを考慮すると、遅いディスクが時々問題になる可能性があります。

最後に、完全なmysqlクエリのロギングを有効にすることです。これ〜するパフォーマンスに影響を与えるため、注意してください。ここでのアイデアは、最終的にどのクエリが成功し、どのクエリが失敗したかを追跡することです。十分な失敗が見つかると、パターンが見つかります。衝突を安定して再現できるなら、MySQLのバグがあるのです。このポイントに到達しないことを願っています:)

答え2

repair table [name of crashed table]

関連情報