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 サーバーを再起動する必要があります。