Amazon RDS for MySQL だと「log_output」で出力先を複数指定できない
2023.6.30
概要
RDS for MySQL にあるパラメータでログの出力先を決める「log_output」では 3 つ値のどれか1つしか設定できません。
しかし、OSS の MySQL では「FILE」と「TABLE」の 2 つ同時に設定することができます。
本記事では、RDS for MySQL と OSS の MySQL の「log_output」にまつわる違いについて見ていきます。
今回は以下の環境で比較をしていきます。
- RDS for MySQL
- EC2 on MySQL(OSS)
ちなみに、タイトルで RDS for MySQL と定義してますが、Aurora MySQL でも同じ動作でした。
log_output とは?
log_output は、一般クエリーログおよびスロークエリーログ出力の宛先を設定するパラメータになってます。
以下、表は MySQL ドキュメントに定義されているパラメータの説明です。
コマンド行形式 | –log-output=name |
---|---|
システム変数 | log_output |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 | いいえ |
型 | Set |
デフォルト値 | FILE |
有効な値 | TABLE,FILE,NONE |
SQL でログに対してアクセスしたい場合は TABLE に、バックアップとかファイルとしてアクセスしたい場合は FILE を指定します。
MySQL :: MySQL 8.0 リファレンスマニュアル :: 5.4.1 一般クエリーログおよびスロークエリーログの出力先の選択
AWS だと以下のうように定義されています。
log_output option: log_output パラメータに指定できるオプションは、次のとおりです。
TABLE (デフォルト) – 一般クエリを mysql.general_log テーブルに、スロークエリを mysql.slow_log テーブルに書き込みます。
FILE – 一般クエリログとスロークエリログの両方をファイルシステムに書き込みます。
NONE – ログ記録を無効にします。
RDS for MySQL データベースログの概要 – Amazon Relational Database Service
EC2 on MySQL の場合
EC2 on MySQL の場合は、「TABLE,FILE」を設定することができます。
一般クエリーログエントリをログテーブルおよびログファイルに書き込むには、–log_output=TABLE,FILE を使用してログの宛先と –general_log の両方を選択し、一般クエリーログを有効にします。
MySQL :: MySQL 8.0 リファレンスマニュアル :: 5.4.1 一般クエリーログおよびスロークエリーログの出力先の選択
デフォルト値に変わりはないです。
mysql> select @@log_output; +--------------+ | @@log_output | +--------------+ | FILE | +--------------+ 1 row in set (0.00 sec)
set コマンドを使用して変更します。
mysql> set global log_output='FILE,TABLE'; Query OK, 0 rows affected (0.00 sec) mysql> select @@log_output; +--------------+ | @@log_output | +--------------+ | FILE,TABLE | +--------------+ 1 row in set (0.00 sec)
両方設定できることを確認しました。
RDS for MySQL の場合
RDS for MySQL の場合は、set コマンドではなくパラメータグループを変更します。
しかし、見ていただくとプルダウンで一つしか選択できません。
また、EC2 と同じように設定しようとしても RDS では global を権限不足のため指定できずエラーになります。
mysql> select @@log_output; +--------------+ | @@log_output | +--------------+ | TABLE | +--------------+ 1 row in set (0.00 sec) mysql> set global log_output='FILE,TABLE'; ERROR 1227 (42000): Access denied; you need (at least one of) the SUPER or SYSTEM_VARIABLES_ADMIN privilege(s) for this operation
何が違うのか
よくよく見ると同じパラメータでも型が異なります。
RDS の方は String 型のため複数指定はできません。
しかし、EC2 の方は Set 型になっています。
環境 | 型 |
---|---|
RDS for MySQL | String |
EC2 on MySQL | Set |
MySQL :: MySQL 8.0 リファレンスマニュアル :: 5.1.8 サーバーシステム変数
まとめ
MySQL と互換がある RDS ですが、OSS の MySQL とは違う点がいくつかあるので注意して下さい。
FILE と TABLE の両方に出力できないことで、データベース上でログの参照をしつつ、AWS でログ監視をする場合は、別途データベース内部のログを出力する仕組みを実装する必要があります。
テックブログ新着情報のほか、AWSやGoogle Cloudに関するお役立ち情報を配信中!
Follow @twitter2021年新卒入社。インフラエンジニアです。RDBが三度の飯より好きです。 主にデータベースやAWSのサーバレスについて書く予定です。あと寒いのは苦手です。
Recommends
こちらもおすすめ
-
AWS初心者におすすめの勉強法と運用のポイント
2019.5.30
-
「AWS請求代行・活用支援サービス」で技術とおサイフの安心を同時に実現
2016.6.1
-
Oracle を BYOL で使う時の AWS 仮想コアの話
2015.7.15
-
AWS認定クラウドプラクティショナー合格者が教えるおすすめの勉強法・勉強時間
2019.4.11
Special Topics
注目記事はこちら
データ分析入門
これから始めるBigQuery基礎知識
2024.02.28
AWSの料金が 10 %割引になる!
『AWSの請求代行リセールサービス』
2024.07.16