MySQL 管理中的常见第一步是检查服务器上存在哪些数据库。SHOW DATABASES 命令会列出您的用户账户有权查看的 MySQL 或 MariaDB 服务器上的所有数据库。

本指南将解释如何从 MySQL shell 和命令行中列出数据库,使用 LIKE 和 information_schema 过滤结果,并排查常见的访问问题。

开始之前

我们假设您已经在系统上安装了 MySQL 或 MariaDB。本指南适用于 MySQL 8.0 及更高版本以及 MariaDB 10.5 及更高版本。

本指南中的所有示例均在 MySQL shell 中运行。要访问它,请运行以下命令并在提示时输入您的密码:

终端

mysql -u root -p

信息如果您尚未为 MySQL root 用户设置密码,则可以省略 -p 选项。

您看到的数据库取决于授予登录用户的权限。默认情况下,root 用户可以查看所有数据库。其他用户只能看到被授予访问权限的数据库。

语法

SHOW DATABASES 命令的一般语法如下:

终端

SHOW DATABASES [LIKE 'pattern'];
  • 不带 LIKE,命令返回当前用户可见的所有数据库。
  • 带 LIKE,命令将列表过滤为匹配给定模式的数据库。

列出所有数据库

要列出服务器上的所有数据库,请在 MySQL shell 中运行 SHOW DATABASES 命令:

终端

SHOW DATABASES;

输出包括用户创建和系统数据库:

输出

+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| opencart           |
| performance_schema |
| sys                |
| wordpress          |
+--------------------+
6 rows in set (0.00 sec)

SHOW SCHEMAS 命令是 SHOW DATABASES 的同义词,并返回相同的结果:

终端

SHOW SCHEMAS;

使用 LIKE 过滤结果

LIKE 子句通过模式过滤数据库列表。百分号 (%) 匹配零个或多个字符,下划线 (_) 精确匹配一个字符。

例如,要仅显示名称以“word”开头的数据库:

终端

SHOW DATABASES LIKE 'word%';

输出

+--------------------+
| Database (word%)   |
+--------------------+
| wordpress          |
+--------------------+
1 row in set (0.00 sec)

查询 information_schema

对于更复杂的过滤,请查询 information_schema 数据库中的 schemata 表。这允许您使用完整的 WHERE 子句以及 AND、OR 和其他 SQL 表达式。

以下查询返回所有名称以“open”或“word”开头的数据库:

终端

SELECT schema_name FROM information_schema.schemata
WHERE schema_name LIKE 'open%'
   OR schema_name LIKE 'word%';

输出

+-------------+
| SCHEMA_NAME |
+-------------+
| opencart    |
| wordpress   |
+-------------+
2 rows in set (0.00 sec)

从命令行列出数据库

您无需打开 MySQL shell 即可列出数据库。使用 -e 标志直接从终端执行 SQL 语句:

终端

mysql -u root -p -e 'SHOW DATABASES;'

输出

+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| opencart           |
| performance_schema |
| sys                |
| wordpress          |
+--------------------+

mysqlshow 命令是另一种从命令行列出数据库的方法:

终端

mysqlshow -u root -p

输出与上一条命令类似。

这种方法在需要在 shell 脚本中列出数据库或将输出与 grep 等工具结合使用时非常有用。

快速参考

命令描述
SHOW DATABASES;列出当前用户可见的所有数据库
SHOW SCHEMAS;SHOW DATABASES 的同义词
SHOW DATABASES LIKE 'pattern';按模式过滤数据库 (% = 任意字符)
SELECT schema_name FROM information_schema.schemata;使用完整的 SQL 过滤查询数据库
mysql -u user -p -e 'SHOW DATABASES;'从命令行列出数据库
mysqlshow -u user -p使用 mysqlshow 实用程序列出数据库

故障排除

运行 SHOW DATABASES 时出现访问被拒绝
您的用户账户没有 SHOW DATABASES 权限。请以 root 身份登录,或要求管理员使用 GRANT SHOW DATABASES ON *.* TO 'user'@'host'; 授予该权限。

列表中缺少某些数据库
SHOW DATABASES 命令仅显示您具有某种级别访问权限的数据库。请以 root 身份登录以查看所有数据库,或使用 SHOW GRANTS; 检查您的权限。

错误 2002:无法连接到本地 MySQL 服务器
数据库服务未运行。对于 MySQL 安装,请使用 sudo systemctl start mysql 启动它;对于 MariaDB 安装,请使用 sudo systemctl start mariadb 启动它,然后重试。

常见问题解答

SHOW DATABASES 和 SHOW SCHEMAS 有什么区别?
没有区别。SHOW SCHEMAS 是 SHOW DATABASES 的同义词,并产生相同的输出。

我能看到其他用户拥有的数据库吗?
仅当您的账户具有全局 SHOW DATABASES 权限或这些数据库上的特定权限时才可以。默认情况下,root 用户可以查看所有数据库。

如何检查当前使用的数据库?
在 MySQL shell 中运行 SELECT DATABASE();。它返回当前选定数据库的名称,或者如果未选择任何数据库则返回 NULL。

这对 MariaDB 有效吗?
是的。MariaDB 支持相同的 SHOW DATABASES 和 SHOW SCHEMAS 命令,具有相同的语法和行为。