MySQL の様子を調べるためのクエリ集

案件に途中から参画した時なんかに、既存の MySQL データベースの状態を調べるためのクエリをまとめておく。

目次

データベース一覧・切替・操作

以下でデータベース一覧を確認できる。

> SHOW databases;

mysqlinformation_schemaperformance_schemasys はデフォルトで存在するスキーマ (= データベース)。

指定のスキーマに切り替えるには USE を使う。

> USE my_schema;

今どこのスキーマに繋いでいるか忘れたら、次のクエリで確認できる。

> SELECT database();

テーブル一覧・確認

テーブル一覧を確認するには次のクエリ。

# 全 DB の全テーブルと件数確認
> SELECT table_schema, table_name, table_rows FROM information_schema.tables;

# 一つの DB スキーマ内の全テーブルと件数を一覧表示する
> SELECT table_name, table_rows FROM information_schema.tables WHERE table_schema = '【スキーマ名】';

# 現在のスキーマのテーブル一覧
> SHOW tables;

各テーブルがどのような CREATE TABLE 文で作成されたかは、次のように確認できる。

> SHOW create table 【テーブル名】;

MySQL のバージョン確認

GRANT 構文の動作が違ったりする時は、MySQL のバージョンを確認しよう。version() というシステム関数で確認できる。

> SELECT version();

接続ユーザ確認

現在接続しているユーザ名とホストを確認するには次のクエリ。

> SELECT user(), current_user(), session_user(), system_user();

基本的には user() だけ見れば良い。current_user() の表記は若干異なる。

現在の同時接続数を調べるには次のクエリ。

> SHOW status LIKE 'Threads_connected';

日本語が文字化けしていたら・文字コード確認

SELECT 結果に含まれる日本語が文字化けしていたら、サーバ・クライアントの文字コードを確認しよう。

> STATUS
> SHOW variables LIKE 'chara%';

DB 内の全テーブルの文字コードを確認するには以下。

> SHOW TABLE STATUS FROM 【DB 名】;

latin1 なんかだと日本語をうまく表示できないので、utf8mb4 になっているかどうかで見よう。

コンソールの文字コードを変更するには次のクエリを打つ。

> CHARSET utf8mb4;

ユーザ一覧・権限確認

作成されているユーザの一覧を見るには以下。

> SELECT host, user FROM mysql.user;

現在のユーザの権限を確認するには以下。

> SHOW grants;

他のユーザの権限を確認するには以下。シングルクォートの位置に注意 (@ をクォートで囲まない)。

> SHOW grants FOR 'my_user'@'localhost';

GRANT USAGE ON *.* TO は、何の権限も設定されていないことを示している。

ユーザごとの権限を確認するための SQL 文を生成するには以下のようなクエリを打てば良い。

> SELECT CONCAT("SHOW grants FOR '", user, "'@'", host, "';") FROM mysql.user ORDER BY host, user;

# 以下のように SQL 文が列挙できるのでコレをそのまま使う
> SHOW grants FOR 'admin'@'%';
> SHOW grants FOR 'my_user'@'%';

時刻・タイムゾーン確認

現在時刻を確認する。

> SELECT now();

この結果を見ることで、MySQL のシステムがタイムゾーンをどのように認識しているか確認できる。

タイムゾーン設定自体を確認するには以下。

> SHOW variables LIKE '%time_zone%';

UTCJST などと確認できる。

参考文献