この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:8
ページ更新者:atom
更新日時:2026-06-11 07:12:00

タイトル: DBの設定確認
SEOタイトル: 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 を挟むと差分が見やすい。