あまりにも多くのMySQLサーバーログを維持する方法は?あなたはそれを読んだ後に理解するでしょう

序文

MySQL Serverは、MySQLで発生するさまざまな操作を表示するのに役立つ、さまざまな異なるログファイルを作成できます。ただし、ログがディスク領域を占有しすぎないように、これらのファイルを定期的にクリーンアップする必要があります。


サーバーログのメンテナンス

バイナリログの場合、expire_logs_daysシステム変数を設定できます。設定後、バイナリログファイルは指定された日数後に自動的に無効化(削除)されます。レプリケーションを使用する場合は、レプリカがソースに遅れをとることができる最大日数以上に変数を設定する必要があります。

例:構成ファイルでバイナリログファイルの有効期間を5日として構成します

[mysqld]
#设置二进制日志文件的有效期
expire_logs_days=5

バイナリログの一部をオンデマンドで削除するには、PURGE BINARYLOGSステートメントを使用します。

PURGE(バイナリログステートメントのクリア)

文法:

PURGE { BINARY | MASTER } LOGS {
    TO 'log_name'
  | BEFORE datetime_expr
}

バイナリログは、バイナリログファイルのセットと、MySQLサーバーによって行われたデータ変更に関する情報を含むインデックスファイルで構成されるファイルのセットです。

PURGEステートメントは、指定されたログファイル名または日付より前にログインデックスファイルにリストされているすべてのバイナリログファイルを削除できます。BINARYとMASTERは同義語です。削除されたログファイルもインデックスファイルのレコードリストから削除され、指定されたログファイルがレコードリストの最初になります。

例:

#使用指定的日志文件名称删除二进制日志文件,不会删除我们指定的那个日志文件,只会删除指定文件前的日志文件
PURGE BINARY LOGS TO 'mysql-bin.010';
#使用日期删除二进制日志文件
PURGE BINARY LOGS BEFORE '2019-04-02 22:46:26';

BEFOREのdatetime_exprパラメーター値はDATETIME値である必要があります(形式: 'YYYY-MM-DD hh:mm:ss')

コピーを作成するとき、このステートメントは安全に実行できます。それらを停止する必要はありません。アクティブなコピーがあり、現在削除するログファイルのいずれかを読み取っている場合、このステートメントは使用中のログファイルまたはそのログファイルより後のログファイルを削除しませんが、古いログファイルを削除します。この場合、警告メッセージが発行されます。ただし、レプリカが接続されておらず、読み取られていないログファイルの1つをクリアしている場合、レプリカは再接続後に複製できません。

バイナリログファイルを安全にクリアするには、次の手順に従います。

1、在每个副本上,用于SHOW SLAVE STATUS检查它正在读取哪个日志文件。

2、使用SHOW BINARY LOGS来获取复制源服务器上二进制日志文件的列表

3、在所有副本中确定最早的日志文件。如果所有的复制都是最新的,那么就是列表中的最后一个日志文件。

4、对要删除的所有日志文件进行备份。(此步骤是可选的,但建议这样做。)

5、清除所有日志文件,但不包括目标文件。

PURGE BINARY LOGS TOPURGE BINARY LOGS BEFOREファイルにリストされているバイナリログファイル.indexが他の方法(たとえば、Linuxでrmを使用)によってシステムから削除された場合、操作はエラーで失敗します。このようなエラーを処理するには、.indexファイル(これは単純なテキストファイルです)を手動で編集して、実際に存在するバイナリログファイルのみが一覧表示されるようにしてから、PURGE BINARYLOGSステートメントを再度実行します。

例:

#原来的目录
-rw-r-----. 1 mysql mysql     8393 12月 22 17:15 mysql-bin.000001
-rw-r-----. 1 mysql mysql      289 12月 22 17:26 mysql-bin.000002
-rw-r-----. 1 mysql mysql      265 12月 23 10:51 mysql-bin.000003
-rw-r-----. 1 mysql mysql      246 12月 23 10:51 mysql-bin.000004
-rw-r-----. 1 mysql mysql       76 12月 23 10:51 mysql-bin.index


mysql> purge binary logs to 'mysql-bin.000003';
Query OK, 0 rows affected (0.00 sec)

#删除之后的目录
-rw-r-----. 1 mysql mysql      265 12月 23 10:51 mysql-bin.000003
-rw-r-----. 1 mysql mysql      246 12月 23 10:51 mysql-bin.000004
-rw-r-----. 1 mysql mysql       38 12月 23 12:04 mysql-bin.index

**ログの更新**

MySQLに新しいログファイルの使用を強制的に開始するには、ログを更新する必要があります。FLUSHLOGSステートメントまたはmysqladminflush-logs、mysqladmin refresh、mysqldump --flush-logsコマンドを実行すると、ログの更新が行われます。さらに、現在のバイナリログファイルのサイズがシステム変数max_binlog_sizeの値に達すると、サーバーはバイナリログを自動的に更新します。

FLUSH LOGSは、個々のログ(FLUSH BINARY LOGSなど)の選択的なフラッシュを可能にするオプションの修飾子をサポートしています。

ログの更新操作には、次の効果があります。

 1. 如果启用了二进制日志记录,则服务器将关闭当前的二进制日志文件,并使用下一个序列号打开一个新的日志文件。
 2. 如果启用了常规查询日志记录或慢速查询日志记录到日志文件,则服务器将关闭并重新打开日志文件。
 3. 如果服务器启动时带有将 --log-error错误日志写入文件的选项,则服务器将关闭并重新打开日志文件。

前述のように、バイナリログを更新すると、新しいバイナリログファイルが作成されますが、通常のクエリログ、低速クエリログ、またはエラーログを更新すると、ログファイルが閉じられて再度開かれるだけです。古いログファイルに変更はありません。これは通常、新しいログファイルを作成し、更新してから、新しいログファイルを使用するために使用されます。たとえば、一般的なクエリログ、低速クエリログ、およびエラーログファイルの名前がmysql.log、mysql-slow.log、およびerr.logの場合、次の一連のコマンドを使用して更新できます。

cd mysql-data-directory
mv mysql.log mysql.log.old
mv mysql-slow.log mysql-slow.log.old
mv err.log err.log.old
mysqladmin flush-logs

更新後、mysql.log.old、mysql-slow.log.old、およびerr.log.oldをバックアップしてから、ハードディスクから削除するか、これらの古いログファイルを直接削除できます。

おすすめ

転載: blog.csdn.net/qq_36551991/article/details/111998380