MySQL サーバーが起動すると、コマンド ラインの操作をチェックしてログインを実行する必要があるかどうかを確認し、ログインを実行する必要がある場合は適切なログ ファイルを開きます。サーバーに 2 つの主なタイプのログ ファイルを生成させることができます。 通常のログ ファイル。クライアントの接続、クエリ、その他のさまざまなイベントをレポートします。 MySQL サーバーが起動すると、コマンド ラインの操作をチェックしてログインを実行する必要があるかどうかを確認し、ログインを実行する必要がある場合は適切なログ ファイルを開きます。サーバーに 2 つの主なタイプのログ ファイルを生成させることができます。 通常のログ ファイル。クライアントの接続、クエリ、その他のさまざまなイベントをレポートします。これは、誰が、どこから、何をしているのかなど、サーバーのアクティビティを追跡するのに役立ちます。
変更ログ
データベースを変更するクエリを報告します。この文脈における「更新」という用語は、UPDATE ステートメントだけを指すのではなく、データベースを変更するすべてのステートメントを指します。このため、DELETE、INSERT、REPLACE、CREATE TABLE、DROP TABLE、GRANT、および REVOKE のクエリ レコードが含まれています。更新ログの内容は SQL ステートメントの形式で書き込まれ、mysql への入力として使用されます。更新ログとバックアップは、クラッシュ後にテーブルを復元する必要がある場合に役立ちます。バックアップ ファイルからデータベースを復元し、更新ログを mysql への入力として使用して、そのバックアップ ファイルの後にデータベースを変更したクエリを再実行できます。これにより、テーブルがクラッシュ時の状態に復元されます。
ログを有効にするには、--log オプションを使用して定期的なログを有効にし、--log-update オプションを使用して更新ログを有効にします。これらのオプションは、mysqld.safe_mysqld または mysql.server のコマンドライン、またはオプションの [mysqld] グループで指定できます。ログ記録が有効になっている場合、デフォルトでログ ファイルはサーバーのデータ ディレクトリに書き込まれます。
著者は、MySQL を初めて使用する場合は、両方のログ タイプを有効にすることをお勧めします。 MySQL についてある程度の経験を積むと、必要なディスク容量を減らすために更新ログだけを使用したくなるかもしれません。
ログを有効にした後は、特にサーバーが多数のクエリを処理している場合は、大量のログ情報でディスクがいっぱいにならないように注意してください。ログ ファイルのローテーションと有効期限を使用すると、最新のログをオンラインで利用可能な状態に保ちながら、ログ ファイルが無制限に増大するのを防ぐことができます。
ログ ファイルのローテーションは次のように機能します。ログ ファイルの名前が log であると仮定します。最初のループでは、 log の名前が log 0 に変更され、サーバーは新しいログ ファイルの書き込みを開始します。 2 番目のループでは、log.0 の名前が log.1 に変更され、log の名前が log.0 に変更され、サーバーは別の新しいログ ファイルの書き込みを開始します。このようにして、各ファイルの名前は log 0、log 1 のように切り替わります。ファイルがループ内の特定の点に到達すると、ファイルを終了できます。
更新ログと LOAD DATA ステートメント
通常、サーバーが LOAD DATE ステートメントを実行すると、ロードされた行の内容ではなく、ステートメント自体のみが更新ログに書き込まれます。これは、データ ファイルにアクセス可能な状態が維持されない限り、更新ログを使用した回復操作が不完全になることを意味します。これを安全に行うために、データベースがバックアップされていない限り、データ ファイルを削除しないでください。
システムバックアップ
更新ログはデータベースの回復に常に適しているとは限りません。ディスクのクラッシュにより更新ログが失われた場合は、ファイル システムのバックアップを定期的に実行するようにしてください。データベースが保存されているディスクとは別のディスクに更新ログを書き込むこともお勧めします。
たとえば、毎日ログを循環し、ログを 1 週間保持したい場合は、log.0 から log.6 まで保持します。次のループでは、log.5 が log.6 を上書きして新しい log.6 になるようにして、log.6 を終了します。こうすることで、ディスク制限を超えることなく多くのログを保存できます。
ログ ローテーションの頻度と保持される古いログの数は、サーバーのビジー状態 (アクティブなサーバーにより多くのログ メッセージが生成される) と古いログに割り当てたいディスク領域の量によって異なります。通常のログをローテーションする場合、mysqla d - min flash-logs コマンドを使用して、現在のログ ファイルを閉じて新しいログ ファイルを開くようにサーバーに指示できます。
定期的なログ ローテーションを実行するスクリプトは次のようになります (これは、ログ ベース名とデータ ディレクトリの場所、および保持したい古いログの数を反映するように変更できます)。
ログ ファイルがそのユーザーに属していることを確認するには、mysqladm アカウントからこのスクリプトを実行するのが最善です。接続パラメータを .my.cnf オプション ファイルに残す場合は、スクリプトの mysqladmin コマンドでパラメータを指定する必要はありません。これを行わないと、更新コマンドの発行のみを行う制限付きユーザーが作成される可能性があります。このユーザーのパスワードを最小限のリスクでスクリプトに含めることができます。これを行う場合、ユーザーには RELOAD 権限のみが必要です。たとえば、ユーザー フラッシュを呼び出してパスワード (fl us h pass) を割り当てるには、次の GRANT ステートメントを使用します。
GRANT RELOAD ON *.* TO flash@localhost IDENTIFIEDBY "flushpass"
スクリプトで更新操作を実行する必要がある場合は、次のように実行できます。
mysqladmin -ufush -pflushpass flash -logs
Linux では、自分でスクリプトを作成するよりも、logrotate を使用して MySQL 配布パッケージに mysql-log-rotate スクリプトをインストールすることをお勧めします。 mysql-log-rotate が RPM ファイルを通じて自動的にインストールされない場合は、MySQL 配布パッケージの support-file ディレクトリを確認する必要があります。
サーバーによる更新ログ ファイルの処理方法の違いにより、更新ログと通常のログではログ ファイルのローテーションが若干異なります。拡張子なしの更新ログ ファイル名 (up date など) を使用するようにサーバーに指示すると、サーバーは、up date 0 0 1、update.002 などのシーケンスを使用して更新ログ ファイル名を自動的に作成します。新しい更新ログは、サーバーの起動時とログの更新時に生成されます。ファイル名を指定せずに更新ログを有効にすると、サーバーはホスト名をベース名として使用して一連の更新ログ ファイルを生成します。
この方法で生成された一連のファイルを終了するときは、名前ではなくファイルの経過時間 (最後に変更された時間) に基づいてファイルを終了したい場合があります。その理由は、flush-log コマンドがいつ発行されるかわからないため、一定期間内に一定数の更新ログが作成されることは期待できないためです。たとえば、mysqldump でテーブルをバックアップし、--flush-logs オプションを使用すると、バックアップごとにその更新ログ名のシーケンスで新しいファイルが作成されます。
サーバーによって自動的に生成された連続したファイル名を持つ更新ログの場合、ログの経過時間に基づく終了スクリプトは次のようになります。
find コマンドは、1 週間以上前に変更された更新ログ ファイルを見つけて削除します。間違った更新によって指定されたテーブルが削除されないように、-name パラメーターを使用して数値のファイル拡張子をテストすることが重要です。
(必要に応じて) 固定の更新ログ ファイル名を使用するようにサーバーに指示することもできます。これは、通常のログと同じ方法で更新ログを循環させたい場合に便利です。固定の更新ログ名を使用する場合は、拡張子を含む名前を指定してください。たとえば、 --log-update=update.log オプションを使用してサーバーを起動し、up date .log という名前を使用できます。サーバーは、flush-logs コマンドを受信すると常にシャットダウンしてログを開きますが、毎回新しいファイルを生成するわけではありません。この場合、更新ログ用のログローテーションスクリプトと通常ログ用のスクリプトは、ローテーションのファイルベース名のみが異なります。
ログのローテーションと終了を自動化したい場合は、cron を使用します。通常のログと更新ログをローテーションするためのスクリプトは、rotate-logs およびrotate - up date - logs であり、/usr/user/mysql/bin ディレクトリにインストールされているものとします。 mysqlladm ユーザーとして登録し、次のコマンドを使用して mysqladm ユーザーの crontab ファイルを編集します: % crontab -e
このコマンドを使用すると、現在の crontab ファイルのバックアップを編集できます (これが以前に実行されていない場合、バックアップは空である可能性があります)。次のようにファイルに行を追加します。
このエントリは、cron にこのスクリプトを毎朝午前 4 時に実行するように指示します。必要に応じて時間を変更したり、スケジュールを設定したりできます。手順については、crontab のマニュアル ページを参照してください。
-