MySQL FLUSH コマンド

ホスティングの世界では、MySQLは動的ウェブサイト、eコマースストア、コンテンツ管理システム(CMS)、およびSaaSプラットフォームを支える最も重要なコンポーネントの1つです。共有ホスティングクラスターVPSインフラストラクチャ、または<а href="/ja/dedicated-servers/">企業クライアント向けの専用サーバーを管理している場合でも、MySQLの内部操作を制御することは不可欠です。

見落とされがちですが強力なツールの1つがFLUSHコマンドです。これは、特権を再読み込みし、ログをクリアし、状態をリセットし、サーバーを再起動せずに一貫性を確保するための管理SQLステートメントのコレクションです。

MySQLにおけるFLUSHとは?

このFLUSHステートメントは、以下の目的で使用されます:

  • 内部キャッシュをクリアする

  • 設定ファイル(特権テーブルなど)を再読み込みする

  • ステータス情報をリセットする

  • MySQLにバッファリングされたデータをディスクに書き込ませる

ほとんどのFLUSH操作を実行できるのは、RELOAD特権(またはそれ以上、例えばSUPER)を持つユーザーのみです。

一般的なFLUSHコマンド

1. 🔐 FLUSH PRIVILEGES

mysqlデータベースの権限テーブルからユーザー特権を再読み込みします:

FLUSH PRIVILEGES;

使用するタイミング:

  • mysql.userや他の権限テーブルを手動で編集した後。

  • 直接UPDATEステートメントを使用してユーザーアクセスを変更した場合。

2.  FLUSH TABLES

すべてのオープンテーブルを閉じ、再オープンさせます。ファイルシステムのメンテナンスやバックアップに便利です。

FLUSH TABLES;

特定のテーブルをフラッシュすることもできます:

FLUSH TABLES table_name [, table_name] ...;

使用するタイミング:

  • 外部ツール(例:mysqldump –single-transaction)を使用してバックアップを行う前。

  • テーブルキャッシュをオーバーロードする可能性のある大規模な書き込みの後。

3.  FLUSH QUERY CACHE

クエリキャッシュからすべてのクエリ結果を削除します(有効な場合):

FLUSH QUERY CACHE;

注意:クエリキャッシュは非推奨であり、MySQL 8.0で削除されました。

4.  FLUSH LOGS

すべてのログファイル(一般ログ、エラーログ、バイナリログ、リレーログ)を閉じて再オープンします。

FLUSH LOGS;

特定のタイプをフラッシュすることもできます:

FLUSH BINARY LOGS;
FLUSH ERROR LOGS;
FLUSH ENGINE LOGS;
FLUSH SLOW LOGS;

使用するタイミング:

  • ログローテーションの後

  • ログが移動またはアーカイブされたとき

  • デバッグやコンプライアンスのためにログをリセットするため

5. FLUSH HOSTS

失敗したクライアント接続のホストキャッシュをリセットします。

FLUSH HOSTS;

使用するタイミング:

  • エラーを受け取ったとき:
    Host 'xxx' is blocked because of many connection errors

6. FLUSH STATUS

ほとんどのステータス変数をゼロにリセットします(Uptimeのようなグローバルカウンターには影響しません)。

FLUSH STATUS;

使用するタイミング:

  • ベンチマーキングやパフォーマンステストの前。

  • クリーンなメトリクスを得るためにSHOW STATUSを使用する。

7. FLUSH TABLES WITH READ LOCK

すべてのテーブルをフラッシュしてロックし、他のセッションからの書き込みを防ぎます。

FLUSH TABLES WITH READ LOCK;

使用するタイミング:

  • 一貫したスナップショットバックアップのため(例:LVMやファイルコピーツールを使用)。

  • 重要:必ず手動でUNLOCK TABLES;でロックを解除してください。

8. FLUSH DES_KEY_FILE

古いDES_ENCRYPT()/DES_DECRYPT()で使用されるDESキーファイルを再読み込みします(レガシー)。

FLUSH DES_KEY_FILE;

9.  FLUSH USER_RESOURCES

ユーザーごとのリソース制限(例:MAX_QUERIES_PER_HOUR)カウンターをリセットします。

FLUSH USER_RESOURCES;

使用するタイミング:

  • リソース制限のあるユーザーの中間リセット。

非推奨/削除されたコマンド

  • FLUSH QUERY CACHEはMySQL 8.0で削除されました。

  • FLUSH DES_KEY_FILEはレガシーです。

  • MySQL 8.0でのRESET PERSISTなどの新しい代替手段を検討してください。

必要な権限

ほとんどのFLUSH操作には以下が必要です:

  • RELOAD特権

  • SUPERまたはSYSTEM_VARIABLES_ADMIN(MySQL 8+の敏感な操作用)

例:

GRANT RELOAD ON *.* TO 'admin'@'localhost';

結論

このFLUSHコマンドファミリーは、MySQLにおける管理制御に不可欠です。特権、ログ、またはキャッシュ状態を管理する場合でも、FLUSHをどのように、いつ使用するかを理解することで、再起動を必要とせずに最適なサーバーパフォーマンスと信頼性を維持するのに役立ちます。特に本番環境では、適切な特権を持って賢く使用してください。