#
ドキュメント

Document

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

ログ

Ref

代表的なログ

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

ログ出力形式

log_outputで指定する。FILEかTABLEを指定できる。

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

エラーログ

設定

log_warningsまたはlog_error_verbosity(5.7系)で指定する。

ref. ttps://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_log_warnings

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

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

log_warningsは0から2、log_error_verbosityは1から3の値をとる。どちらも最小値はerrorのみを出力する。errorを出力しない設定はない(errorは必ず出力される)。 log_warningsのデフォルトは2、log_error_verbosityのデフォルトは3。

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. https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_log_warnings

出力先

デフォルトでlog_errorに指定されたファイルに出力される。 ファイルのパスはmy.cnfで指定できる。

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

出力内容

  • 接続エラーなどを出力
  • テーブルが存在しないやシンタックスエラーなどのクエリエラーは出力しない

例えば以下の処理はエラーログに出力されない。

$ mysqldump -u root -p foo > foo.sql
Enter password:
mysqldump: Got error: 1049: Unknown database 'foo' when selecting the database

一般ログ

一般ログはすべての処理が出力される。
デフォルトでは無効なので有効にする必要がある

設定

# my.cnf
[mysqld]
...
# general_log https://dev.mysql.com/doc/refman/5.6/ja/query-log.html
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)
2023-02-07T06:06:51.523982Z         4 Connect   admin@localhost on  using Socket
2023-02-07T06:06:51.524021Z         4 Connect   Access denied for user 'admin'@'localhost' (using password: YES)

スロークエリログ

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

監査ログ

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]
...

# output
log_output=FILE

# error log
log-error=/var/log/mysql/error.log

# general_log https://dev.mysql.com/doc/refman/5.6/ja/query-log.html
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