MySQL の高度な - ログ

1.ログ

1.1 エラーログ

エラー ログは MySQL の最も重要なログの 1 つで、mysqld の起動時と停止時、およびサーバーの実行中に重大なエラーが発生したときに関連情報が記録されます。データベースに通常の使用を妨げる障害が発生した場合は、まずこのログを確認することをお勧めします。

ログはデフォルトで有効になっており、デフォルトのディレクトリ /var/log/ に保存されます。デフォルトのログ ファイル名は mysqld.log です。ログの表示
場所:

mysql> show variables like '%log_error%';
+---------------------+---------------------+
| Variable_name       | Value               |
+---------------------+---------------------+
| binlog_error_action | ABORT_SERVER        |
| log_error           | /var/log/mysqld.log |
| log_error_verbosity | 3                   |
+---------------------+---------------------+
3 rows in set (0.21 sec)

1.2 バイナリログ

バイナリ ログ (BINLOG) には、すべての DDL (データ定義言語) ステートメントと DML (データ操作言語) ステートメントが記録されますが、
データ クエリ (SELECT、SHOW) ステートメントは含まれません。

機能: ①. 災害時のデータ復旧; ②. MySQL マスター/スレーブ レプリケーション。MySQL8 バージョンでは、バイナリ ログはデフォルトで有効になっており
、関連するパラメータは次のとおりです。

mysql> show variables like '%log_bin%';
+---------------------------------+-------+
| Variable_name                   | Value |
+---------------------------------+-------+
| log_bin                         | OFF   |
| log_bin_basename                |       |
| log_bin_index                   |       |
| log_bin_trust_function_creators | OFF   |
| log_bin_use_v1_row_events       | OFF   |
| sql_log_bin                     | ON    |
+---------------------------------+-------+
6 rows in set (0.25 sec)

パラメータの説明:

  • log_bin_basename: 現在のデータベース サーバーの binlog ログのベース名 (プレフィックス) 特定の binlog ファイル名には、
    ベース名に基づく番号を追加する必要があります (番号は 000001 から始まります)。

  • log_bin_index: 現在のサーバーに関連付けられた binlog ファイルを記録する binlog インデックス ファイル。

MySQL サーバーはバイナリ ログを記録するための複数の形式を提供しており、具体的な形式と特性は次のとおりです。

ログ形式 意味
声明 SQL ステートメントに基づくロギングでは SQL ステートメントが記録され、データを変更する SQL が
ログ ファイルに記録されます。
行ベースのログ記録では、各行のデータ変更が記録されます。(デフォルト)
混合 STATEMENT と ROW の 2 つの形式が混在しています。デフォルトでは STATEMENT が使用されますが、特殊な場合には
自動的に ROW に切り替わって記録されます。
mysql> show variables like '%binlog_format%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| binlog_format | ROW   |
+---------------+-------+
1 row in set (0.00 sec)

バイナリ ログの形式を設定する必要がある場合は、/etc/my.cnf の binlog_format パラメータを設定するだけです。

ログはバイナリ モードで保存され、直接読み取ることができないため、バイナリ ログ クエリ ツール mysqlbinlog を使用して表示する必要があります。具体的な構文は次のとおりです。

mysqlbinlog [ 参数选项 ] logfilename
参数选项:
-d 指定数据库名称,只列出指定的数据库相关操作。
-o 忽略掉日志中的前n行命令。
-v 将行事件(数据变更)重构为SQL语句
-vv 将行事件(数据变更)重构为SQL语句,并输出注释信息

1.3 削除

比較的負荷の高いビジネス システムでは、毎日生成されるバイナリ ログ データは膨大であり、長期間消去されないと、大量のディスク領域を占有します。ログは次の方法でクリアできます。

命令 意味
マスターをリセットする すべての binlog ログを削除します。削除後、ログ番号は binlog.000001 から再開され
ます。
マスターログを
「binlog.*」にパージします
* 番号より前のすべてのログを削除します

「yyyy-mm-dd hh24:mi:ss」より前のマスター ログをパージします
ログが「yyyy-mm-dd hh24:mi:ss」になる前に
生成されたすべてのログを削除します。

mysql 設定ファイルでバイナリ ログの有効期限を設定することもでき、設定後は有効期限が切れるとバイナリ ログが自動的に削除されます。

show variables like '%binlog_expire_1 logs_seconds%';

1.4 クエリログ

クエリ ログにはクライアントのすべての操作ステートメントが記録されますが、バイナリ ログにはデータをクエリするための SQL ステートメントは含まれません。デフォルトでは、クエリログは有効になっていません。

クエリ ログを有効にする必要がある場合は、MySQL 構成ファイル /etc/my.cnf ファイルを変更し、次の内容を追加できます。

#该选项用来开启查询日志 , 可选值 : 0 或者 1 ; 0 代表关闭, 1 代表开启
general_log=1
#设置日志的文件名 , 如果没有指定, 默认的文件名为 host_name.log
general_log_file=mysql_query.log


クエリ ログをオンにすると、 mysql_query.log ファイルがMySQL データ ストレージ ディレクトリ、つまり /var/lib/mysql/ ディレクトリに表示されます。その後のクライアントの追加、削除、変更、クエリ操作はすべてログ ファイルに記録され、
長時間実行すると、ログ ファイルは非常に大きくなります。

1.5 遅いクエリログ

スロークエリログは、
実行時間がパラメータlong_query_timeの設定値を超え、スキャンレコード数がmin_examined_row_limit以上であるすべてのSQL文のログを記録しますが、デフォルトでは有効になっていません。long_query_time のデフォルトは
10 秒、最小値は 0、精度は最大マイクロ秒です。
スロークエリログを有効にする必要がある場合は、MySQL 設定ファイル /etc/my.cnf で次のパラメータを設定する必要があります。

#慢查询日志
slow_query_log=1
#执行时间参数
long_query_time=2

デフォルトでは、管理ステートメントはログに記録されず、検索にインデックスを使用しないクエリもログに記録されません。log_slow_admin_statementsこの動作は、以下で説明するように使用および変更できますlog_queries_not_using_indexes

#记录执行较慢的管理语句
log_slow_admin_statements =1
#记录执行较慢的未使用索引的语句
log_queries_not_using_indexes = 1

上記のパラメータをすべて設定したら、有効にするために MySQL サーバーを再起動する必要があります。

Guess you like

Origin blog.csdn.net/qq_51495235/article/details/132832896