ログ | MySQL
参考
ログの種類
- エラーログ(デフォルトで有効)
- 一般ログ
- スロークエリログ
- バイナリログ(バックアップログ)
- レプリケーション
- ポイントインタイムリカバリ(フルバックアップ + バイナリログで任意の時点にロールバック)
- 監査ログ 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 のみ
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
- ログのエクスポートを有効化
- DB クラスターのパラメータグループを作成して監査ログ出力を有効化

- 設定するパラメータは https://qiita.com/moaikids/items/08152d887014623a1a44?utm_source=pocket_reader を参照
- 対象のクラスターに設定
監査ログは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