sql >> データベース >  >> RDS >> Mysql

`mysqlcheck`は、データベースに損傷を与えることなくデータベースの問題を解決するのに役立ちますか?

    答えの最初の部分は良いニュースです...そのmysqlcheck -o OPTIMIZE TABLEを実行している場合よりも、データベースに害を及ぼす可能性は高くありません。 すべてのテーブルで、それだけです。 これは、サーバーにログインし、テーブルのリストを取得し、それらを反復処理してOPTIMIZE TABLEを送信する便利なユーティリティです。 完了するまで、一度に1つのテーブルについてサーバーにクエリを実行します。

    さて、いくつかの悪いニュース。表領域に潜在的な破損がある場合は、OPTIMIZE TABLE それに遭遇する可能性があるので、バックアップとリカバリ計画を使用して、その可能性に備えていることを確認する必要があります。この可能性はかなり低いですが、 考えられる結果の1つ。

    さらに悪いニュース:ほぼ間違いなく間違った木を吠えています。

    大きなトラフィック(または大きなトラフィック変動)がある同じマシンでApacheとMySQLを一緒に実行することは、ベストプラクティスに反し、問題のレシピです。どちらのサービスも、負荷がかかった状態でメモリ消費量が増える傾向があり、データベースがバッキングである場合Webサイトのデータを保存すると、両方のサービスで同時に負荷が増加する傾向があります。

    InnoDB Crash Post Mortem on Database AdministratorsStackExchangeに対する私の回答を参照してください および Apacheがワイルドに実行され、MySQLを強制終了する理由サーバー障害時 何よりも、MySQLが被害者であるこのかなり一般的な問題を徹底的にカバーするためです。

    InnoDBを使用しているかどうかは関係ありません。 MySQLエラーログのデータベースリカバリエントリは少し異なりますが、死んだプレゼントはこれです:疑わしいものは何も前にありません、MySQLエラーログは次のように述べています:

    mysqld_safe Number of processes running now: 0
    

    その後のメッセージは、MySQLが「クラッシュ」していると誤解されることがよくありますが、それは起こっていることではありません...それは殺されました。 MySQLは、Apacheが落ち着くか再起動されるか、サーバーが再起動されるまで、再起動を拒否する場合もあります。繰り返しになりますが、エラーログから、次のようなものが追加で表示される場合と表示されない場合があります。

    InnoDB: Initializing buffer pool, size = 4.0G
    InnoDB: mmap(4395630592 bytes) failed; errno 12
    InnoDB: Completed initialization of buffer pool
    InnoDB: Fatal error: cannot allocate memory for the buffer pool
    [ERROR] Aborting
    [Note] /usr/libexec/mysqld: Shutdown complete
    mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended
    

    /var/log/syslogを確認しています または/var/log/messages (実行するディストリビューションによって異なります)実際の問題が表示されます。

    $ sudo egrep 'kernel|oom' /var/log/syslog
    

    ...またはメッセージ...は、次のようなもので始まるいくつかのエントリを明らかにする必要があります:

    kernel: pcscd invoked oom-killer: gfp_mask=0xd0, order=0, oomkilladj=0
    

    Apacheはメモリを大量に消費するため、システムが全体的に不安定になるリスクがあるため、「何か」が犠牲になります。その「何か」は、MySQLサーバーデーモンmysqldである可能性があります。 。

    kernel: Out of memory: Killed process 3044, UID 27, (mysqld)
    

    MySQLは通常、自動的に再起動を試みますが、ご存知のとおり、これも時々発生する可能性があります...しかし、Apacheのメモリ要求がすぐに減少しない限り、MySQLはシステムに十分なメモリを要求することを許可されません。あきらめます。

    テーブルの最適化には有効な用途があります...しかし、この場合、問題を正しく特定した場合、沈没船のデッキチェアを再配置することに非常に匹敵します。タイタニック ディスクスペースを節約できる場合もありますが、一部のストレージエンジンはテーブルの完全に新しいコピーを作成し、コピーの名前を変更して古いテーブルを削除するため、実行中に予備のディスクスペースが必要になります。いずれにせよ、メモリ消費に意味のある影響を与える可能性はほとんどありません。




    1. Symfony2、Doctrine2、MySql、ビューテーブル

    2. MySQL str_to_dateは、有効なフォーマットにもかかわらずNULLを生成します

    3. SQLite-データを削除

    4. データベーステーブル情報を取得するためのストアドプロシージャ