MySQLのDB一覧は、接続中アカウントから見える範囲
まずサーバーへ接続し、SHOW DATABASES;で一覧を確認します。DB名が見えること、既定DBに選べること、表をSELECT/更新できることは別です。見えないDBを作り直したり、一覧を見るためだけにrootへ変更したりしません。
一覧と既定文字コードを読み取る例
以下のcwiki_w29_*は隔離検体のDB名です。自分の接続先/対象へ置換してください。SHOW DATABASESは可視な全体、後続SELECTは指定した3DBの可視な行だけを返します。DB既定のcharset/collationは既存の全表・全列の設定や変換完了を表しません。
SHOW DATABASES;
SELECT SCHEMA_NAME, DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME
FROM information_schema.SCHEMATA
WHERE SCHEMA_NAME IN ('cwiki_w29_a', 'cwiki_w29_b', 'cwiki_w29_hidden')
ORDER BY CAST(SCHEMA_NAME AS BINARY);
MySQL8.4では、対象DB/配下objectの権限だけでなく、グローバルSHOW DATABASESや他のstatic global privilege、partial revoke、サーバーのskip-show-database設定によっても結果が変わります。「個別DBへの表権限がないDBは必ず見えない」とは限りません。MariaDBの各版の権限仕様を同一と決めつけません。
隔離検体で比べた「見える」と「使える」
MySQL8.4.13/MariaDB11.8.9で3つのDBを用意し、2DBのitemsだけをSELECT可能にしたreaderにはその2DBが見え、hiddenは見えませんでした。別のshow_readerへSHOW DATABASESだけを付けるとhiddenの名前も見えますが、hiddenのUSE/SELECTは拒否されました。これは本番への権限付与手順ではなく、可視性をアクセス許可と混同しないための検体です。
一覧にない・想定と違う場合
SELECT DATABASE()がNULLでもサーバーへの接続自体は成立している場合があります。- 同名DBでも別サーバーに接続している可能性があります。接続先の管理情報/接続ID/アカウントを合わせて確認します。
- 一覧0件/一部だけを不存在や障害と断定しません。フィルタ・大小文字・権限と対象版を確認します。
- 必要な操作が拒否されたらエラーコードと対象を管理者へ伝えます。通常の確認にCREATE USER/GRANT/FLUSHを追加しません。
対象DBを選ぶ次の手順はUSEによる既定DB選択、表/ビューはテーブル一覧、列/索引等はテーブル定義です。元の確認順とコマンド一覧への導線も保持します。
他製品の一覧・容量の比較は別に読む
PostgreSQLのDBとschema、Oracleのdatabase/PDB/ユーザーschema、SQLiteの接続中/ATTACHされたファイルは同じ概念ではありません。OracleのV$DATABASEをMySQLと同じサーバー上の全DB一覧にしません。既存の比較表は対象を分けて参照します。容量のSUMや表統計はengine/権限/NULL/観測時点に依存し、全ファイル容量・空き容量・その瞬間の正確な行数を保証しません。
既存の接続・一覧資料(製品別の補足)
| この記事の要点 |
|
SHOW DATABASES — 最も基本
旧例の注意:出力は一例で、システムschemaや表示順/可視DBは接続先/権限/設定で異なります。
SHOW DATABASES;
-- +--------------------+
-- | Database |
-- +--------------------+
-- | information_schema |
-- | mysql |
-- | performance_schema |
-- | sys |
-- | myapp |
-- +--------------------+
information_schema / mysql / performance_schema / sys は MySQL システムスキーマです。ユーザー作成 DB と区別して見てください。
パターンマッチで絞り込み
旧例の注意:LIKEの%/_とWHEREを区別します。既定DBの選択や個々の表権限を変更する文ではありません。
-- LIKE で絞る
SHOW DATABASES LIKE 'myapp%';
-- システム DB を除外
SHOW DATABASES WHERE `Database` NOT IN ('information_schema','mysql','performance_schema','sys');
information_schema を直接参照
メタ情報(文字コード等)も同時に取りたい場合:
旧例の注意:SCHEMATAは可視なDBの既定属性です。全表/列のcharsetや使用許可を証明せず、後半のフィルタは指定名を除くだけです。
SELECT schema_name AS db,
default_character_set_name AS charset,
default_collation_name AS collation
FROM information_schema.SCHEMATA
ORDER BY schema_name;
-- ユーザー DB のみ
SELECT schema_name
FROM information_schema.SCHEMATA
WHERE schema_name NOT IN ('information_schema','mysql','performance_schema','sys');
シェル / スクリプトから
旧例の注意:rootは一覧確認の必須条件ではありません。defaults-fileの位置/読込みと秘密値/権限を確認し、既存設定を上書きしません。
# CLI から 1 行で取得
mysql -uroot -p -e "SHOW DATABASES;"
# パスワードを .my.cnf 等に書いておくと対話なしで
mysql --defaults-file=~/.my.cnf -e "SHOW DATABASES;"
# ヘッダなし・タブ区切り(パイプ処理向き)
mysql -uroot -p -N -B -e "SHOW DATABASES;"
# mysqlshow ユーティリティ
mysqlshow -uroot -p
mysqlshow -uroot -p myapp # myapp のテーブル一覧
# ホスト指定
mysql -h dbhost -P 3306 -uuser -p -e "SHOW DATABASES;"
テーブル一覧も合わせて
旧例の注意:SHOW TABLESはビューも含みます。容量の全schema集計は可視範囲/engine/NULLに依存し、全物理ファイル容量や即時回収量ではありません。
-- 接続中の DB のテーブル一覧
SHOW TABLES;
-- 別 DB のテーブル一覧
SHOW TABLES FROM myapp;
-- ビューも含む詳細
SHOW FULL TABLES FROM myapp;
-- +-------------+------------+
-- | Tables_in_… | Table_type |
-- +-------------+------------+
-- | users | BASE TABLE |
-- | user_stats | VIEW |
-- information_schema 経由
SELECT table_schema, table_name, table_type, engine
FROM information_schema.TABLES
WHERE table_schema = 'myapp'
ORDER BY table_name;
-- DB のサイズも一緒に
SELECT table_schema AS db,
ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS size_mb
FROM information_schema.TABLES
GROUP BY table_schema
ORDER BY size_mb DESC;
他 DBMS での「DB 一覧」
| DBMS | DB 一覧 | テーブル一覧 |
|---|---|---|
| MySQL / MariaDB | SHOW DATABASES | SHOW TABLES |
| PostgreSQL (psql) | \l または \list | \dt |
| PostgreSQL (SQL) | SELECT datname FROM pg_database | SELECT * FROM pg_tables WHERE schemaname='public' |
| SQL Server | SELECT name FROM sys.databases | SELECT name FROM sys.tables |
| Oracle | SELECT name FROM v$database (接続中databaseの情報。全PDB/全schemaの一覧と同一ではない) | SELECT table_name FROM all_tables |
| SQLite | .databases (CLI) | .tables / SELECT name FROM sqlite_master WHERE type='table' |
※ Oracle の場合 1 つの「データベース」内に複数のスキーマ(ユーザー)が存在する設計のため、概念が MySQL とずれます。MySQL の DB ≒ Oracle のスキーマ。
JDBC / プログラムから
旧例の注意:JDBCのcatalog/schema対応はdriver/製品/版に依存します。全DBMSで同じ意味の一覧と扱いません。
// Java の例
try (Connection conn = DriverManager.getConnection(url, user, pass)) {
DatabaseMetaData meta = conn.getMetaData();
try (ResultSet rs = meta.getCatalogs()) { // MySQL は CATALOG = DB
while (rs.next()) {
System.out.println(rs.getString("TABLE_CAT"));
}
}
}旧例の注意:PyMySQLの固定root/password例は転用しません。接続先/TLSと接続解放を管理し、全出力を公開しません。
# Python (PyMySQL)
import pymysql
conn = pymysql.connect(host='localhost', user='root', password='xxx')
with conn.cursor() as cur:
cur.execute("SHOW DATABASES")
for (db,) in cur.fetchall():
print(db)
権限が見えない DB を確認
旧例の注意:GRANT/FLUSHは一覧の読取ではありません。root/新規権限を定型追加せず、通常のGRANT後にFLUSHを要するという案内にも使いません。
-- 現在のユーザー
SELECT CURRENT_USER();
-- 自分が持つ権限を確認
SHOW GRANTS;
-- root で他ユーザーに権限付与
GRANT SELECT ON myapp.* TO 'reader'@'%';
FLUSH PRIVILEGES;
FAQ
Q: ある DB だけ SHOW DATABASES に出てこない
A: 接続先/フィルタ/可視権限と設定を確認します。名前が見えることと表を使えることは別で、一覧取得だけのためにroot/権限追加へ切り替えません。
Q: 接続している DB を確認したい
A: SELECT DATABASE(); で現在の DB 名が返ります。NULL なら未選択。
Q: 大文字小文字
A: Linux の MySQL はデフォルトで DB 名・テーブル名が大小区別。lower_case_table_names 設定で挙動が変わります(変更は再初期化必要)。
元の書式付きコマンド
元例の注意:元のコマンド表示です。DB名は置換箇所で、既定DB/接続先/権限を確認します。表一覧は未選択ならFROM指定を使い、USEはサーバーへの再接続とは区別します。
| show databases; |
元の確認順と次のページ
元の確認表を保持します。DB一覧を見ただけでは既定DBは選択されないので、SHOW TABLESの前にUSEで選ぶかFROMで指定します。
| 順番 | やること |
|---|---|
| 1 | MYSQLへの接続で接続する |
| 2 | show databases; を実行する |
| 3 | 対象DBを決めて use やテーブル確認へ進む |
検証範囲と一次資料
新規の小規模MySQL8.4.13/MariaDB11.8.9検体の同一接続/別接続、限定権限と各製品の同梱CLIで検証した範囲です。全言語driver/GUI/接続pool/実SSH経路/各OSの導入や証明書運用・PG/Oracle/SQL Serverの旧例の実行成功を保証しません。本番のschema/認証/設定を変更していません。
- MySQL8.4 USE / SHOW DATABASES / SHOW TABLES
- MySQL接続/TLSオプション / LIKE/ESCAPE
- MariaDB Zero-Configuration SSL / MariaDB SHOW TABLES / PostgreSQL18 psql / Azure Data Studio廃止
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスのソフト一覧|Blender・Metasequoiaと用途別の選び方
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Visual Studio「デザイナーを表示できません」エラーの原因と対処 2026-10-28 12:06:00
- SSH 認証に失敗しました。再試行してください の対処 2026-10-28 12:06:00
- SSH2 秘密鍵の読み込みに失敗しました の原因と対処 2026-10-28 12:06:00
- TeraTerm のよくあるエラーと対処法完全ガイド — Connection refused / 2026-10-28 12:06:00
- Visual Studio エラー一覧|コンパイルエラー・警告の確認方法と対処 2026-10-28 11:39:57
- Whitelabel Error Page の原因と消し方|Spring Boot のエラーページ 2026-10-28 11:39:57
- Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法 2026-10-28 11:39:57
- SQL WHERE 句完全ガイド 2026-10-28 11:39:57
- SQL JOIN 完全ガイド (INNER/LEFT/RIGHT/FULL OUTER) 2026-10-28 11:39:57
- tomcat の起動 / 停止ログと catalina.log・catalina.out の違い 2026-10-28 10:24:23
- Tomcat の起動確認方法 5 つ|localhost:8080・ポート・プロセス・ログ 2026-10-28 10:24:23
- Oracle 19c COMMITの使い方: 暗黙コミット・自動確定・応答不明時の確認 2026-10-28 09:59:09
- Oracle 19c DELETE文|削除対象の確認・COMMIT前の判断・ROLLBACKの条件 2026-10-28 09:59:09
- Oracle 19c INSERT文|INSERT ALL・SELECT・RETURNINGとMERGEの使い分け 2026-10-28 09:59:09
- Oracle 19cのトランザクション制御|COMMIT・ROLLBACK・分離レベルと接続設定 2026-10-28 09:59:09