RDS for MySQL の general_log を非有効化・有効化状態でクエリログを取得してみた
はじめに
かつまたです。
RDS で「過去にどんなクエリが流れていたか」「どこから接続されているか」を把握したくなる場面、ありませんか?
- 利用状況がわからない RDS の削除可否を判断したい
- 接続元 IP や発行クエリを採取して、構成見直しの判断材料にしたい
- 想定外のクエリが流れていないか確認したい
このような場面で役立つのが MySQL の general_log です。
今回は RDS for MySQL のカスタムパラメータグループから general_log を有効化し、無効状態 / 有効状態でクエリログがどう変わるかを検証してみました。
やりたいこと
general_logが 無効 な状態で接続・クエリしてもログが残らないことを確認- マネジメントコンソールから
general_logを 有効化 - 接続・クエリして
mysql.general_logテーブルにログが記録されることを確認・ログ粒度を確認
前提条件
構成
以下構成図の通りに VPC / サブネット / RDS を事前作成しています。

- RDS for MySQL 8.0(検証用にパブリックアクセス有効)
- カスタムパラメータグループ (パラメータグループファミリ:
mysql8.0)を適用- RDS の デフォルトパラメータグループは値を変更できない ため、
general_logを有効化するにはカスタムパラメータグループを別途作成し、DB インスタンスへ割り当てる必要があります - 本検証で操作する主要パラメータは以下 2 つで、いずれも
dynamicパラメータのため変更時に DB の再起動は不要です
- RDS の デフォルトパラメータグループは値を変更できない ため、
| パラメータ名 | 役割 | 初期値 | 変更後 | 種別 |
|---|---|---|---|---|
general_log |
クエリログ採取の有効 / 無効 | 0(無効) |
1(有効) |
dynamic |
log_output |
ログ出力先(FILE か TABLE) |
FILE |
TABLE |
dynamic |
- CloudShell から mysql クライアントで接続
- DB のセキュリティグループは検証用に
0.0.0.0/0で 3306 開放
やってみた
1. パラメータグループの初期値を確認
マネジメントコンソール → RDS → パラメータグループ → general-log-verify-pg を開きます。
検索ボックスで general_log を検索すると、値が -(0・無効)になっていることが確認できます。

2. RDS への接続(無効状態のまま)
CloudShell に mysql クライアントをインストールします(Amazon Linux 2023 ベースの CloudShell の場合)。
sudo dnf install -y mariadb105
エンドポイントを指定して接続します。
mysql -h general-log-verify-db.xxxxxxxx.ap-northeast-1.rds.amazonaws.com \
-u admin -p testdb
接続できたら、適当なクエリを発行します。
SHOW DATABASES;
SHOW TABLES;
SELECT NOW();
SELECT 'before enabling general_log' AS message;
3. ログが記録されていないことを確認
mysql.general_log テーブルを確認します。
SELECT COUNT(*) FROM mysql.general_log;
+----------+
| COUNT(*) |
+----------+
| 0 |
+----------+
1 row in set (0.002 sec)
何も記録されていないことが確認できました。
general_log = 0 の状態では MySQL サーバ側でログ書き込み自体が行われないため、どれだけクエリを発行してもテーブルには蓄積されません。
4. パラメータグループから general_log を有効化
RDS → 設定 → パラメータグループを選択 → 「編集」を選択。
以下 2 つを変更していきます。
| パラメータ名 | 変更前 | 変更後 |
|---|---|---|
general_log |
0 |
1 |
log_output |
FILE |
TABLE |


「変更を保存」をクリックします。両パラメータとも dynamic のため、再起動不要・接続切断なしで即時反映されます。
log_output=TABLEを指定することで、ログがファイルではなくmysql.general_logテーブルに書き込まれ、SQL で集計しやすくなります。
5. 再度クエリを発行
CloudShell からもう一度 RDS に接続し、クエリを発行します。
USE testdb;
SHOW TABLES;
SELECT NOW();
SELECT 'after enabling general_log' AS message;
SELECT VERSION();
6. ログが記録されていることを確認
mysql.general_log テーブルを再度確認します。
SELECT
event_time,
user_host,
command_type,
LEFT(argument, 100) AS query
FROM mysql.general_log
ORDER BY event_time DESC
LIMIT 20;
+----------------------------+-----------------------------------------------------------------------------------------+--------------+------------------------------------------------------------------------------------------------------+
| event_time | user_host | command_type | query |
+----------------------------+-----------------------------------------------------------------------------------------+--------------+------------------------------------------------------------------------------------------------------+
| 2026-04-29 09:24:47.843823 | admin[admin] @ ec2-18-181-230-166.ap-northeast-1.compute.amazonaws.com [18.181.230.166] | Query | SELECT
event_time,
user_host,
command_type,
LEFT(argument, 100) AS query
FROM mysq |
| 2026-04-29 09:24:41.651916 | rdsadmin[rdsadmin] @ localhost [] | Query | SELECT @@GLOBAL.read_only |
| 2026-04-29 09:24:41.651341 | rdsadmin[rdsadmin] @ localhost [] | Query | SELECT 1 |
| 2026-04-29 09:24:41.650535 | rdsadmin[rdsadmin] @ localhost [] | Query | SELECT @@session.transaction_read_only |
| 2026-04-29 09:24:41.574646 | rdsadmin[rdsadmin] @ localhost [] | Query | SELECT value FROM mysql.rds_heartbeat2 |
| 2026-04-29 09:24:41.574261 | rdsadmin[rdsadmin] @ localhost [] | Query | SELECT 1 |
| 2026-04-29 09:24:41.573992 | rdsadmin[rdsadmin] @ localhost [] | Query | SELECT @@session.transaction_read_only |
| 2026-04-29 09:24:41.572754 | rdsadmin[rdsadmin] @ localhost [] | Query | SELECT count(*) from information_schema.TABLES WHERE TABLE_SCHEMA = 'mysql' AND TABLE_NAME = 'rds_he |
| 2026-04-29 09:24:41.572288 | rdsadmin[rdsadmin] @ localhost [] | Query | SELECT 1 |
| 2026-04-29 09:24:41.572018 | rdsadmin[rdsadmin] @ localhost [] | Query | SELECT @@session.transaction_read_only |
| 2026-04-29 09:24:41.571296 | rdsadmin[rdsadmin] @ localhost [] | Query | SELECT 1 |
| 2026-04-29 09:24:41.570822 | rdsadmin[rdsadmin] @ localhost [] | Query | SELECT 1 |
| 2026-04-29 09:24:41.570404 | rdsadmin[rdsadmin] @ localhost [] | Query | SELECT @@session.transaction_read_only |
| 2026-04-29 09:24:36.865255 | admin[admin] @ ec2-18-181-230-166.ap-northeast-1.compute.amazonaws.com [18.181.230.166] | Query | SELECT VERSION() |
| 2026-04-29 09:24:34.808598 | admin[admin] @ ec2-18-181-230-166.ap-northeast-1.compute.amazonaws.com [18.181.230.166] | Query | SELECT 'after enabling general_log' AS message |
| 2026-04-29 09:24:34.806622 | admin[admin] @ ec2-18-181-230-166.ap-northeast-1.compute.amazonaws.com [18.181.230.166] | Query | SELECT NOW() |
| 2026-04-29 09:24:34.804294 | admin[admin] @ ec2-18-181-230-166.ap-northeast-1.compute.amazonaws.com [18.181.230.166] | Query | SHOW TABLES |
| 2026-04-29 09:24:34.801455 | admin[admin] @ ec2-18-181-230-166.ap-northeast-1.compute.amazonaws.com [18.181.230.166] | Query | show tables |
| 2026-04-29 09:24:34.798243 | admin[admin] @ ec2-18-181-230-166.ap-northeast-1.compute.amazonaws.com [18.181.230.166] | Query | show databases |
| 2026-04-29 09:24:34.796026 | admin[admin] @ ec2-18-181-230-166.ap-northeast-1.compute.amazonaws.com [18.181.230.166] | Init DB | testdb |
+----------------------------+-----------------------------------------------------------------------------------------+--------------+------------------------------------------------------------------------------------------------------+
20 rows in set (0.004 sec)
7. RDS 内部のハートビートクエリ(rdsadmin)について
上記のログを見ると、rdsadmin[rdsadmin] @ localhost [] から SELECT value FROM mysql.rds_heartbeat2 などのクエリが定期的に流れていることが確認できます。これは RDS の管理プロセスによるヘルスチェックによるもので、ユーザー操作とは無関係です。
利用実態を調査したい場合は、以下のように rdsadmin を除外して取得すると見通しが良くなります。
SELECT
event_time,
user_host,
command_type,
LEFT(argument, 100) AS query
FROM mysql.general_log
WHERE user_host NOT LIKE '%rdsadmin%'
ORDER BY event_time DESC
LIMIT 20;
admin ユーザー(= 自分)が発行したクエリログだけが残りました。
+----------------------------+-----------------------------------------------------------------------------------------+--------------+------------------------------------------------------------------------------------------------------+
| event_time | user_host | command_type | query |
+----------------------------+-----------------------------------------------------------------------------------------+--------------+------------------------------------------------------------------------------------------------------+
| 2026-04-29 09:42:32.096446 | admin[admin] @ ec2-18-181-230-166.ap-northeast-1.compute.amazonaws.com [18.181.230.166] | Query | SELECT
event_time,
user_host,
command_type,
LEFT(argument, 100) AS query
FROM mysq |
| 2026-04-29 09:38:25.894882 | admin[admin] @ ec2-18-181-230-166.ap-northeast-1.compute.amazonaws.com [18.181.230.166] | Query | SELECT
event_time,
user_host,
command_type,
LEFT(argument, 100) AS query
FROM mysql.general_ |
| 2026-04-29 09:24:47.843823 | admin[admin] @ ec2-18-181-230-166.ap-northeast-1.compute.amazonaws.com [18.181.230.166] | Query | SELECT
event_time,
user_host,
command_type,
LEFT(argument, 100) AS query
FROM mysq |
| 2026-04-29 09:24:36.865255 | admin[admin] @ ec2-18-181-230-166.ap-northeast-1.compute.amazonaws.com [18.181.230.166] | Query | SELECT VERSION() |
| 2026-04-29 09:24:34.808598 | admin[admin] @ ec2-18-181-230-166.ap-northeast-1.compute.amazonaws.com [18.181.230.166] | Query | SELECT 'after enabling general_log' AS message |
| 2026-04-29 09:24:34.806622 | admin[admin] @ ec2-18-181-230-166.ap-northeast-1.compute.amazonaws.com [18.181.230.166] | Query | SELECT NOW() |
| 2026-04-29 09:24:34.804294 | admin[admin] @ ec2-18-181-230-166.ap-northeast-1.compute.amazonaws.com [18.181.230.166] | Query | SHOW TABLES |
| 2026-04-29 09:24:34.801455 | admin[admin] @ ec2-18-181-230-166.ap-northeast-1.compute.amazonaws.com [18.181.230.166] | Query | show tables |
| 2026-04-29 09:24:34.798243 | admin[admin] @ ec2-18-181-230-166.ap-northeast-1.compute.amazonaws.com [18.181.230.166] | Query | show databases |
| 2026-04-29 09:24:34.796026 | admin[admin] @ ec2-18-181-230-166.ap-northeast-1.compute.amazonaws.com [18.181.230.166] | Init DB | testdb |
| 2026-04-29 09:24:34.793565 | admin[admin] @ ec2-18-181-230-166.ap-northeast-1.compute.amazonaws.com [18.181.230.166] | Query | SELECT DATABASE() |
+----------------------------+-----------------------------------------------------------------------------------------+--------------+------------------------------------------------------------------------------------------------------+
11 rows in set (0.006 sec)
おわりに
まとめると以下のような違いがあることを体感できました。
| 項目 | general_log = 0 |
general_log = 1 |
|---|---|---|
mysql.general_log 件数 |
0 件 | 接続・クエリごとに記録 |
| 再起動 | - | 不要(dynamic パラメータ) |
| 反映時間 | - | 数秒で即時反映 |
| 接続切断 | - | なし |
dynamic パラメータのため再起動なしで変更可能であり、接続元 IP・実行クエリ・コマンド種別ごとでの利用状況の調査ができるようになる点は便利だなと感じました。
ご覧いただきありがとうございました。
general_log は全クエリを記録するためパフォーマンスへの影響可能性があります。また mysql.general_log テーブルは肥大化しやすいため、本番環境で恒常的に有効化することは推奨されません。調査時のみ一時的に有効化し、不要になったら無効化することを推奨します。
ご覧いただきありがとうございました。
参考
クラスメソッドオペレーションズ株式会社について
クラスメソッドグループのオペレーション企業です。
運用・保守開発・サポート・情シス・バックオフィスの専門チームが、IT・AIをフル活用した「しくみ」を通じて、お客様の業務代行から課題解決や高付加価値サービスまでを提供するエキスパート集団です。
当社は様々な職種でメンバーを募集しています。
「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、クラスメソッドオペレーションズ株式会社 コーポレートサイト をぜひご覧ください。
※2026年1月 アノテーション㈱から社名変更しました






