Skip to content

MySQL 插件

通过 Shield CLI 在浏览器中打开完整的 MySQL / MariaDB 数据库管理界面。

安装

bash
shield plugin add mysql

验证安装:

bash
shield plugin list
# NAME   VERSION  PROTOCOLS       INSTALLED
# mysql  v0.1.0   mysql, mariadb  2026-03-24T10:00:00+08:00

快速连接

bash
# 连接本机 MySQL(默认端口 3306)
shield mysql

# 指定端口
shield mysql 3307

# 连接远程服务器
shield mysql 10.0.0.5

# 完整地址
shield mysql 10.0.0.5:3307

认证方式

交互式输入(推荐)

不传凭证参数时,会提示输入用户名、密码和数据库名:

bash
shield mysql 127.0.0.1:3306

  🔐 Database credentials (press Enter to skip)

  Username [root]: root
  Password: ****
  Database (optional): mydb

 Connecting as root
    Database: mydb
  • Username 默认 root,直接回车使用默认值
  • Password 隐藏输入,不会回显
  • Database 可选,回车跳过

命令行传参

bash
# 使用数据库专用参数
shield mysql 127.0.0.1:3306 --db-user root --db-pass mypassword --db-name mydb

# 也兼容通用认证参数
shield mysql 127.0.0.1:3306 --username root --auth-pass mypassword
参数别名说明
--db-user--username数据库用户名
--db-pass--auth-pass数据库密码
--db-name数据库名(可选)

Web 管理界面

连接成功后,浏览器自动打开 Web SQL Client:

功能概览

功能说明
数据库浏览左侧栏列出所有数据库,点击切换
表列表选中数据库后显示所有表,支持过滤和翻页
表结构查看单击表名查看字段、类型、索引等信息
SQL 执行支持 SELECT、SHOW、DESCRIBE 等查询语句
结果排序点击列头升序/降序排列
CSV 导出一键导出查询结果为 CSV 文件
复制结果复制为 Tab 分隔文本,可直接粘贴到 Excel
只读模式默认开启,阻止 INSERT/UPDATE/DELETE 等写操作

只读模式

默认情况下,Web 界面以只读模式运行。右上角显示当前模式状态:

  • 🔒 Read-Only(橙色标签)— 写操作被前端拦截
  • 🔓 Read-Write(绿色标签)— 允许所有操作

点击标签可切换模式。只读模式下以下语句会被阻止:

INSERT, UPDATE, DELETE, DROP, ALTER, CREATE,
TRUNCATE, RENAME, REPLACE, GRANT, REVOKE

安全建议

在公网暴露数据库管理界面时,建议保持只读模式,并配合 --invisible 隐身模式使用:

bash
shield mysql 127.0.0.1:3306 --db-user readonly_user --invisible

表过滤与翻页

当数据库包含大量表时:

  • 过滤 — 表列表顶部的搜索框支持实时过滤,输入关键词即可筛选
  • 翻页 — 超过 50 个表时自动分页,底部显示翻页控件

快捷键

快捷键功能
Ctrl+Enter / Cmd+Enter执行当前 SQL
Tab插入两个空格(不会切换焦点)

数据库导航

  1. 左侧栏显示所有数据库
  2. 点击数据库名,切换到该数据库的表列表
  3. 点击 ← Databases 返回数据库列表
  4. 单击表名 → 查看表结构
  5. 双击表名 → 自动填入 SELECT * FROM ... LIMIT 100 并执行

默认端口

输入解析为
shield mysql127.0.0.1:3306
shield mysql 3307127.0.0.1:3307
shield mysql 10.0.0.510.0.0.5:3306
shield mysql 10.0.0.5:330710.0.0.5:3307

mariadbmysql 的别名,行为完全一致:

bash
shield mariadb 127.0.0.1:3306 --db-user root

使用场景

场景一:远程调试生产数据库

在本地连接远程 MySQL,通过 Shield 暴露 Web 管理界面给团队成员:

bash
shield mysql 10.0.0.5:3306 --db-user readonly --db-pass xxx --invisible

分享 Auth URL 给需要查看数据的同事,无需安装任何客户端。

场景二:Docker 中的 MySQL

直接连接 Docker 容器中的 MySQL:

bash
# MySQL 容器监听在 3306
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql:8

# 通过 Shield 暴露
shield mysql 127.0.0.1:3306 --db-user root --db-pass root

场景三:内网数据库审计

以只读模式连接,让审计人员可以通过浏览器查看数据库:

bash
shield mysql 192.168.1.100:3306 --db-user auditor --db-pass xxx --invisible
  • 默认只读模式,无法执行写操作
  • 隐身模式需要授权码才能访问
  • 查询结果可导出 CSV 用于报告

场景四:临时分享数据库给外部合作伙伴

bash
shield mysql 127.0.0.1:3306 --db-user report_user --db-pass xxx

对方只需浏览器即可访问,无需安装 MySQL 客户端、配置 VPN 或防火墙规则。

API 接口

MySQL 插件在本地启动一个 HTTP 服务,提供以下 API:

方法路径说明
GET/api/info服务器信息(版本、主机、用户)
GET/api/databases数据库列表
GET/api/tables?db=mydb表列表
GET/api/schema?db=mydb&table=users表结构(字段、类型、索引)
POST/api/query执行 SQL 查询

查询 API 示例

bash
curl -X POST http://localhost:19876/api/query \
  -H 'Content-Type: application/json' \
  -d '{"sql": "SELECT * FROM users LIMIT 10", "db": "mydb"}'

响应:

json
{
  "code": 200,
  "data": {
    "columns": ["id", "name", "email"],
    "rows": [
      {"id": 1, "name": "Alice", "email": "alice@example.com"}
    ],
    "count": 1,
    "duration": "2.3ms"
  }
}

故障排除

连接被拒绝

plugin error: cannot connect to MySQL at 127.0.0.1:3306: connection refused

检查 MySQL 服务是否正在运行:

bash
# macOS
brew services list | grep mysql

# Linux
systemctl status mysql

# Docker
docker ps | grep mysql

认证失败

plugin error: Access denied for user 'root'@'172.17.0.1'
  • 确认用户名和密码正确
  • Docker 环境下注意 MySQL 的 bind-address 和用户权限配置
  • 尝试创建允许远程访问的用户:
    sql
    CREATE USER 'shield'@'%' IDENTIFIED BY 'password';
    GRANT SELECT ON *.* TO 'shield'@'%';

插件未安装

unsupported protocol "mysql"

先安装插件:

bash
shield plugin add mysql

下一步