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 命令,具有相同的语法和行为。