安価な仮想マシンで非常にハードなphpスクリプトを実行しています。これは、週に約50万ページビューがあるため、少し問題があります。 mysqlを1日2回再起動します。それは問題ではありませんが、mysqlを再起動するとき
_/etc/init.d/mysql restart
_
再起動してから時々Table './forum/phpbb_posts' is marked as crashed and last (automatic?) repair failed
と表示されます
このテーブルはそのハードスクリプトとは何の関係もありませんが、クラッシュしているように見える250 000(1.8ギガ)のテーブルです。修理には約14分かかります。
Mysqlを停止するためのより安全な方法はありますか?私はバックアップを行う必要があることを知っています、そして私はそうします、しかし1日1回だけであり、データはまだ増え続けています(最近は速くはありません)
現在DebianGNU/Linux6.0で実行されています
503 Webサイトでアクティビティを停止し(.htaccessメンテナンスモード)、開始しますtop mysqldcpuの使用状況を監視します
mysqladmin -p flush-tables
mysqlアクティビティ(インストールによっては数分かかる場合があります)と、それが徐々に減少する時期を監視します
mysqladmin -p flush-tables
念のために
mysqladmin -p shutdown
このシーケンスにより、Webサイトはデータベース要求の作成を停止し、メモリ内のデータとトランザクションログファイルをデータベーステーブルにフラッシュするようにmysqlに指示し、適切なデータベースデーモンのシャットダウンを開始します。
Mysqldのシャットダウンは時間のかかる作業になる可能性があります。最大の懸念の1つは、すべてのデータが適切にフラッシュされ、すべてのテーブルが閉じられることです。
データを適切に閉じるには、2つの方法があります。これは、2つの基本的なカテゴリに分類されます。
絶対にすべてのデータがMyISAMである場合は、これでInnoDBが完全に無効になっていることを確認する必要があります
[mysqld]
skip-innodb
起動時にこのオプションを使用すると、通常は起動時に実行されるクラッシュリカバリサイクルのInnoDBプロトコルをバイパスします。これを、MyISAMデータがキャッシュされないという事実と組み合わせてください。 MyISAMキーキャッシュ(key_buffer_sizeでサイズ設定)に保存されるのはインデックスページのみです。したがって、高速起動と高速シャットダウンがあります。
ほとんどまたはすべてのデータがInnoDBである場合は、innodb_buffer_pool_size用に構成したスペースの量を監視する必要があります。 innodb_buffer_pool_sizeが大きいほど、ダーティページのフラッシュに時間がかかります。
補足:InnoDBテーブルのmysqldumpを実行すると、ダンプされているテーブルに属するバッファープール内の残りのダーティページのフラッシュが自動的にトリガーされます。
すべてのInnoDBテーブルをmysqldumpする場合でも、mysqlをシャットダウンする場合でも、ダーティページをフラッシュするプロセスを早めるのは1つだけです。
innodb_max_dirty_pages_pct を設定する必要があります。デフォルトでは、MySQL 5.0 /5.1の場合は90です。 MySQL 5.5の場合、デフォルトは75です。驚くべきことに、innodb_max_dirty_pages_pctを0に設定するだけです。これにより、バッファプール内のダーティページの数が最小限に抑えられます。これにより、ディスクI/Oがわずかに増加する可能性がありますが、それでも許容レベル内です。
あなたは2つのことをしなければなりません:
/etc/my.cnfに配置してください
[mysqld]
innodb_max_dirty_pages_pct=0
次に、mysqlを再起動する必要はありません。これをrootユーザーとして実行するだけです。
SET GLOBAL innodb_max_dirty_pages_pct = 0;
サーバーの負荷が少し急上昇し、バッファプールがダーティページの1%未満になるまでその状態が続く場合があります。
試してみる !!!
このMySQLコマンドも最初に実行する必要があります
SET GLOBAL innodb_fast_shutdown = 0;
これにより、InnoDBトランザクションログ(ib_logfile0、ib_logfile1)のすべてが完全にフラッシュされ、その後に
service mysql stop
ストップアンドスタート連隊を解散するのはどうですか?たぶん、再起動は、データベースが開始を開始する前に静止停止に到達するのに十分な時間をデータベースに与えていませんか?
つまり.
/etc/init.d/mysql stop;
sync;
sleep 30;
/etc/init.d/mysql start