5.

MySQL の現在設定を確認するコマンド一覧(SHOW VARIABLES / STATUS / INNODB STATUS)

編集
この記事の要点
  • 現在値の確認: SHOW VARIABLES LIKE "max_connections" / SHOW GLOBAL VARIABLES
  • 稼働状態: SHOW STATUS LIKE "Threads_connected"(接続数)、SHOW GLOBAL STATUS
  • information_schema.GLOBAL_VARIABLES で SQL として絞り込み・JOIN 可能
  • my.cnf 場所mysql --help | grep my.cnf で表示。優先順位もそこで分かる
  • InnoDB 内部状態: SHOW ENGINE INNODB STATUS\G(デッドロック・ロック待ち調査)

変数(設定値)の確認: SHOW VARIABLES

MySQL の現在動作中の設定値は SHOW VARIABLES で確認できます。セッション値グローバル値の 2 系統がある点に注意:

-- 全変数(セッション値)
SHOW VARIABLES;

-- 全変数(グローバル値 = サーバ全体の現在値)
SHOW GLOBAL VARIABLES;

-- LIKE で特定の変数だけ
SHOW VARIABLES LIKE 'max_connections';
SHOW VARIABLES LIKE 'innodb_%';
SHOW VARIABLES LIKE '%timeout%';

-- 個別取得(@@global. / @@session.)
SELECT @@global.max_connections;
SELECT @@session.autocommit;
SELECT @@version, @@hostname, @@datadir;

セッション vs グローバル:

種別説明変更
GLOBALサーバ全体・新規接続に適用SET GLOBAL var=値 要 SUPER 権限。再起動で消える
SESSION現在の接続だけSET SESSION var=値 接続終了で消える
my.cnfサーバ起動時に読み込み恒久化したいならここに書く

稼働状態(カウンタ)の確認: SHOW STATUS

「現在の接続数」「クエリ実行回数」など実行中の統計カウンタSHOW STATUS:

-- 接続関連
SHOW STATUS LIKE 'Threads_connected';   -- 現在の接続数
SHOW STATUS LIKE 'Threads_running';     -- 実行中スレッド
SHOW STATUS LIKE 'Max_used_connections';-- 起動以来の最大接続数
SHOW STATUS LIKE 'Connections';         -- 累積接続試行回数
SHOW STATUS LIKE 'Aborted_connects';    -- 失敗した接続数

-- クエリ統計
SHOW GLOBAL STATUS LIKE 'Questions';    -- 累積クエリ数
SHOW GLOBAL STATUS LIKE 'Slow_queries'; -- スロークエリ数

-- InnoDB バッファプール
SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_pages_%';
SHOW GLOBAL STATUS LIKE 'Innodb_rows_%';

-- 全カウンタ(数百件)
SHOW GLOBAL STATUS;

information_schema で SQL として扱う

information_schema.GLOBAL_VARIABLES / GLOBAL_STATUS ならばテーブルとして JOIN・条件抽出可能(MySQL 5.7 以前。8.0 では performance_schema に移行):

-- MySQL 5.7 以前
SELECT VARIABLE_NAME, VARIABLE_VALUE
FROM information_schema.GLOBAL_VARIABLES
WHERE VARIABLE_NAME LIKE 'innodb_%'
ORDER BY VARIABLE_NAME;

-- MySQL 8.0+
SELECT VARIABLE_NAME, VARIABLE_VALUE
FROM performance_schema.global_variables
WHERE VARIABLE_NAME LIKE 'innodb_%';

SELECT VARIABLE_NAME, VARIABLE_VALUE
FROM performance_schema.global_status
WHERE VARIABLE_NAME IN ('Threads_connected', 'Max_used_connections');

-- 接続上限と現在接続数を一発で比較
SELECT
  (SELECT VARIABLE_VALUE FROM performance_schema.global_variables
     WHERE VARIABLE_NAME = 'max_connections') AS max_connections,
  (SELECT VARIABLE_VALUE FROM performance_schema.global_status
     WHERE VARIABLE_NAME = 'Threads_connected') AS current_connections;

my.cnf の場所と読み込み順

サーバ起動時に読まれる設定ファイルの探索順mysql --help に書いてあります:

mysql --help | grep -A 1 "Default options"

# 出力例:
# Default options are read from the following files in the given order:
# /etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~/.my.cnf

後に読まれたものが優先されます。OS によって場所が違うので注意:

OS / 配布典型的な場所
Ubuntu / Debian(APT 版)/etc/mysql/mysql.conf.d/mysqld.cnf
RHEL / CentOS / Rocky/etc/my.cnf + /etc/my.cnf.d/*.cnf
macOS Homebrew/opt/homebrew/etc/my.cnf
WindowsC:\ProgramData\MySQL\MySQL Server 8.0\my.ini
Bitnami / XAMPP/opt/bitnami/mysql/conf/my.cnf

InnoDB の内部状態: SHOW ENGINE INNODB STATUS

デッドロック発生時の調査やバッファプール状況は SHOW ENGINE INNODB STATUS で:

SHOW ENGINE INNODB STATUS\G

-- 出力(抜粋):
-- ------------------------
-- LATEST DETECTED DEADLOCK
-- ------------------------
-- 2026-05-17 10:23:14
-- *** (1) TRANSACTION:
-- TRANSACTION 12345, ACTIVE 3 sec inserting
-- ...
--
-- ------------
-- TRANSACTIONS
-- ------------
-- ...
--
-- ----------------------
-- BUFFER POOL AND MEMORY
-- ----------------------
-- Total large memory allocated 137363456
-- ...

主要セクション:

  • LATEST DETECTED DEADLOCK: 直近のデッドロック詳細(両 SQL とロック)
  • TRANSACTIONS: 実行中トランザクション一覧
  • BUFFER POOL AND MEMORY: バッファプールヒット率
  • ROW OPERATIONS: 直近の行操作レート

テーブル / インデックスの確認

-- DB 一覧
SHOW DATABASES;

-- 現在の DB
SELECT DATABASE();

-- テーブル一覧
SHOW TABLES;
SHOW TABLES FROM myapp;

-- テーブル定義
SHOW CREATE TABLE users\G
DESCRIBE users;
SHOW COLUMNS FROM users;

-- インデックス
SHOW INDEX FROM users;

-- テーブルサイズ
SELECT
  TABLE_NAME,
  ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024, 2) AS size_mb,
  TABLE_ROWS
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'myapp'
ORDER BY (DATA_LENGTH + INDEX_LENGTH) DESC;

ユーザー / 権限の確認

-- 現在の接続情報
SELECT USER(), CURRENT_USER(), @@hostname;

-- ユーザー一覧
SELECT User, Host FROM mysql.user;

-- 自分の権限
SHOW GRANTS;

-- 他人の権限
SHOW GRANTS FOR 'app_user'@'%';

FAQ

Q: SHOW VARIABLES と my.cnf の値が違う
A: my.cnf を編集しただけでは反映されず、サーバ再起動が必要。または SET GLOBAL で動的変更。動的変更不可な変数もあるので注意。

Q: どの my.cnf が実際に効いているか分からない
A: mysql --help | grep -A 1 "Default options" で読み込み順を確認し、最後に書いてあるファイルが優先。

Q: SHOW STATUS の値はいつリセットされる?
A: サーバ起動時、または FLUSH STATUS 実行時。チューニング前後で FLUSH STATUS を挟むと差分が見やすい。

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. DB接続コマンド
  2. データベース一覧の確認
  3. テーブル一覧の確認
  4. テーブル定義の確認
  5. DBの設定確認
  6. テーブルスペースの容量の確認および拡張
  7. データ型
  8. 複数カラムのUPDATE
  9. カラムの追加/削除/変更
  10. 自動番号付け (autoincrement) する方法
  11. インデックスの作成
  12. シーケンスおよびインクリメント(ID列)の違いと確認方法
  13. create table文の生成
  14. 特定スキーマの全テーブルの全カラム情報を取得する方法
  15. 【DB2】エラー一覧
  16. 【DB2】テーブル定義からCREATE TABLE文を生成する方法