Skip to content

只是想查个数据,不想装 phpMyAdmin

日常工作中经常碰到一个场景:需要看下数据库里的数据,但手头没有趁手的工具。装 phpMyAdmin 太重,装 pgAdmin 更重。其实大多数时候只是想查几条数据、看看表结构,不需要那么大的东西。


日常查数据的烦恼

你有没有遇到过这些情况:

  • 新到一台服务器,想看下数据库有什么表,发现没有任何管理工具
  • 开发环境 Docker 跑了个 MySQL,想看下数据,又不想为了查数据再装一堆东西
  • 同事问你某个表的数据,你得先打开 Navicat、连上数据库、找到表、截图发过去
  • 树莓派上跑了个小项目,想看下 PostgreSQL 里的数据,pgAdmin 装不动(800MB 镜像 + 300MB 内存)

这些场景有个共同点:需求很简单,就是查个数据,但工具很重


一行命令,打开浏览器就能查

Shield 的 MySQL 和 PostgreSQL 插件做成了 Docker 镜像,专门解决这个问题:

bash
# MySQL
docker run -d -e DB_HOST=host.docker.internal -e DB_USER=root -e DB_PASS=mypass \
  -p 8080:8080 fengyily/shield-mysql

# PostgreSQL
docker run -d -e DB_HOST=host.docker.internal -e DB_USER=postgres -e DB_PASS=mypass \
  -p 8080:8080 fengyily/shield-postgres

打开 http://localhost:8080 ,浏览器里直接查数据。

不需要配置文件,不需要 PHP 环境,不需要注册服务器。环境变量传入数据库地址和凭证,启动即连接。


有多轻?

phpMyAdminpgAdminShield MySQLShield PostgreSQL
镜像大小~400 MB~800 MB~7 MB~9 MB
启动时间5-10 秒10-20 秒< 1 秒< 1 秒
运行内存~200 MB~300 MB~10 MB~10 MB
运行依赖PHP + ApachePython + Flask

7MB 的镜像,几秒钟下载完,启动不到 1 秒。这个体积是因为 Go 编译成静态二进制,基础镜像用的 scratch(空镜像),里面只有一个可执行文件和 CA 证书,没有操作系统、没有运行时、没有包管理器。

在树莓派、NAS、低配 VPS 这种资源有限的环境上,差别尤其明显——pgAdmin 跑不动的地方,这个轻轻松松。


能干什么

定位很明确:日常查数据够用的浏览器工具,不是全功能数据库管理平台。

具体来说:

  • 浏览数据库、表、字段 — 左侧树形结构,点击切换
  • 执行 SQL — 多标签编辑器,Ctrl+Enter 执行
  • 查看表结构 — 字段类型、默认值、索引
  • 结果导出 — CSV 导出,单元格复制,列排序
  • 行级操作 — 插入、编辑、删除
  • 建表/删表 — 可视化操作
  • 只读模式 — 设置 DB_READONLY=true,写操作全部拦截

不能干什么(这些请用专业工具):

  • 存储过程 / 触发器编辑
  • 数据库迁移
  • 慢查询分析
  • 多实例统一管理

几个典型用法

开发环境随手带一个

Docker Compose 里加两行,数据库和管理工具一起起来:

yaml
services:
  mysql:
    image: mysql:8
    environment:
      MYSQL_ROOT_PASSWORD: root
    ports:
      - "3306:3306"

  mysql-web:
    image: fengyily/shield-mysql
    environment:
      DB_HOST: mysql
      DB_USER: root
      DB_PASS: root
    ports:
      - "8080:8080"
    depends_on:
      - mysql

docker compose up -dhttp://localhost:8080 查数据。开发环境重建也是秒级。

临时用完就删

服务器上排查问题,不想留工具:

bash
docker run -d --name tmp-viewer --network host \
  -e DB_HOST=127.0.0.1 -e DB_USER=readonly -e DB_PASS=xxx \
  -e DB_READONLY=true \
  fengyily/shield-mysql

# 查完删掉
docker rm -f tmp-viewer

低配设备

树莓派、NAS、1 核 512MB 的 VPS:

bash
docker run -d -e DB_HOST=192.168.1.100 -e DB_USER=postgres -e DB_PASS=mypass \
  -p 8080:8080 fengyily/shield-postgres

9MB 镜像 + 10MB 运行内存,不抢资源。

同时看多个库

不同端口开不同实例:

bash
# 开发库
docker run -d -e DB_HOST=10.0.0.1 -e DB_USER=root -e DB_PASS=dev \
  -p 8080:8080 fengyily/shield-mysql

# 测试库(只读)
docker run -d -e DB_HOST=10.0.0.2 -e DB_USER=root -e DB_PASS=test \
  -e DB_READONLY=true \
  -p 8081:8080 fengyily/shield-mysql

# PG 生产库(只读)
docker run -d -e DB_HOST=10.0.0.3 -e DB_USER=readonly -e DB_PASS=prod \
  -e DB_READONLY=true \
  -p 8082:8080 fengyily/shield-postgres

网络说明

Docker 容器访问宿主机数据库,根据系统选择方式:

bash
# Linux:用 host 网络,最简单
docker run -d --network host \
  -e DB_HOST=127.0.0.1 -e DB_USER=root -e DB_PASS=mypass \
  fengyily/shield-mysql

# macOS / Windows Docker Desktop:用 host.docker.internal
docker run -d \
  -e DB_HOST=host.docker.internal -e DB_USER=root -e DB_PASS=mypass \
  -p 8080:8080 fengyily/shield-mysql

# 数据库也是容器:放同一网络,用容器名
docker run -d --network my-net \
  -e DB_HOST=my-mysql -e DB_USER=root -e DB_PASS=mypass \
  -p 8080:8080 fengyily/shield-mysql

环境变量

变量MySQL 默认PostgreSQL 默认说明
DB_HOST127.0.0.1127.0.0.1数据库地址
DB_PORT33065432端口
DB_USERrootpostgres用户名
DB_PASS密码
DB_NAMEpostgres默认数据库
DB_READONLYfalsefalse只读模式
WEB_PORT80808080Web 端口

如果需要远程访问

上面说的都是本地或内网场景。如果你需要把数据库管理界面分享给外部同事——比如让外包团队查一下数据,或者在家访问公司内网的数据库——可以配合 Shield CLI 使用:

bash
shield plugin add mysql
shield mysql 10.0.0.5:3306 --db-user root --readonly

Shield CLI 会自动建立加密隧道,生成一个公网 URL,对方浏览器打开就能查。用的是同一套 Web 界面,只是多了远程访问能力。用完断开,链接即失效。

详细用法见:MySQL 插件介绍 · PostgreSQL 插件介绍


试一下

bash
# MySQL
docker run -d -e DB_HOST=host.docker.internal -e DB_USER=root -e DB_PASS=root \
  -p 8080:8080 fengyily/shield-mysql

# PostgreSQL
docker run -d -e DB_HOST=host.docker.internal -e DB_USER=postgres -e DB_PASS=postgres \
  -p 8081:8080 fengyily/shield-postgres

Docker Hub:fengyily/shield-mysql · fengyily/shield-postgres

GitHub:shield-cli · shield-plugins