#
ドキュメント

Document

自分のための備忘録です。

ログ

参考

ログの種類

  • エラーログ(デフォルトで有効)
  • 一般ログ
  • スロークエリログ
  • バイナリログ(バックアップログ)
    • レプリケーション
    • ポイントインタイムリカバリ(フルバックアップ + バイナリログで任意の時点にロールバック)
  • 監査ログ Enterprise エディションのみ使用可能

エラーログ( error log )

「エラー」ログという名前でありながら実質は「MySQLのアプリケーションログ」

MySQL運用・管理[実践]入門 p61

設定

出力形式

サーバーシステム変数: log_error

デフォルトは stderr でコンソールに出力します。
ファイルパスを指定するとファイルに出力します。

[mysqld]
...
log_error=/var/log/mysql/error.log

ログレベル

サーバーシステム変数: log_error_verbosity (デフォルト 2)

ref. log_error_verbosity

log_error_verbosity は 1 から 3 の値をとります。
最小値は ERROR のみを出力します。ERROR を出力しない設定はありません( ERROR は必ず出力されます)。

ref. 7.4.2.5 Priority-Based Error Log Filtering (log_filter_internal)

log_warnings は MySQL 8.0 で削除されました。

log_warnings システム変数および --log-warnings サーバーオプションが削除されました。 かわりに log_error_verbosity システム変数を使用してください。

ref. 1.3 MySQL 8.0 の新機能

# my.cnf
[mysqld]
...
# ファイルに出力
log_output=FILE

# エラーログ
log_error_verbosity=3
log_error_verbosity と log_warnings の関係( 5.7 系のみ)

Assigning a value to log_warnings assigns a value to log_error_verbosity and vice versa

ref. log_error_verbosity

「log_warnings に値を代入すると log_error_verbosity にも値が代入される、逆も同様」(deepl.com)

Setting log_warnings=0 is equivalent to log_error_verbosity=1 (errors only).

Setting log_warnings=1 is equivalent to log_error_verbosity=2 (errors, warnings).

Setting log_warnings=2 (or higher) is equivalent to log_error_verbosity=3 (errors, warnings, notes), and the server sets log_warnings to 2 if a larger value is specified.

ref. log_warnings

一般(クエリ)ログ( general query log )

MySQLが「受け付けたクエリをすべて書き出す機能」

MySQL運用・管理[実践]入門 p61。

デフォルトは無効です。general_log で有効・無効を設定します。

設定

有効化

サーバーシステム変数: general_log (デフォルト 無効)

出力形式

サーバーシステム変数: log_output (デフォルト FILE )

一般ログと後述するスローログの出力形式は log_output で指定します。
FILE (デフォルト) または TABLE が指定可能です。

エラーログの出力形式は log_output ではなく log_error で指定します。

設定例

[mysqld]
...
log_output=FILE // 明示的に FILE を指定する場合(デフォルトが FILE なので省略可能)
general_log=1
general_log_file=/var/log/mysql/general.log

出力内容

クエリエラーを含めたすべてのクエリのログを出力します(接続情報も出力します)。

ただしシンタックスエラーは出力しません。

-- fooテーブルは存在しない
mysql> select * from foo;  -- クエリエラー
ERROR 1146 (42S02): Table 'sample.foo' doesn't exist 
mysql> sect * from sample; -- シンタックスエラー
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'sect * from sample' at line 1

上記は以下のように出力されます。

`2023-02-04T07:51:05.233973Z  5 Query  select * from foo`

接続失敗エラーは以下のように出力されます。

2023-02-07T06:06:42.239948Z         3 Connect   root@localhost on  using Socket
2023-02-07T06:06:42.240033Z         3 Connect   Access denied for user 'root'@'localhost' (using password: YES)

スロー(クエリ)ログ( slow query log )

設定例

[mysqld]
...
# slow query log
slow_query_log=1
slow_query_log_file=/var/log/mysql/slow.log
long_query_time=0.25

監査ログ( Amazon Aurora の場合)

ref. https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Auditing.html#AuroraMySQL.Auditing.Enable

  1. ログのエクスポートを有効化
  2. DB クラスターのパラメータグループを作成して監査ログ出力を有効化
  3. 対象のクラスターに設定

監査ログはMySQLの https://dev.mysql.com/doc/refman/5.6/ja/audit-log.html?utm_source=pocket_reader に記載されている機能を使用しているよう

AuditはEnterpriseのみ使用できる。

MySQL Enterprise Audit is a new feature for security and compliance. It's not included in the Open Source / Community edition.

https://dba.stackexchange.com/questions/178213/mysql-audit-and-general-log

ログ設定例

[mysqld]
...
# error log
log-error=/var/log/mysql/error.log

# output
log_output=FILE

# general query log 
general_log=1
general_log_file=/var/log/mysql/general.log

# slow query log
slow_query_log=1
slow_query_log_file=/var/log/mysql/slow.log
long_query_time=0.25