只是想查个数据,不想装 phpMyAdmin
日常工作中经常碰到一个场景需要看下数据库里的数据但手头没有趁手的工具。装 phpMyAdmin 太重装 pgAdmin 更重。其实大多数时候只是想查几条数据、看看表结构不需要那么大的东西。日常查数据的烦恼你有没有遇到过这些情况新到一台服务器想看下数据库有什么表发现没有任何管理工具开发环境 Docker 跑了个 MySQL想看下数据又不想为了查数据再装一堆东西同事问你某个表的数据你得先打开 Navicat、连上数据库、找到表、截图发过去树莓派上跑了个小项目想看下 PostgreSQL 里的数据pgAdmin 装不动800MB 镜像 300MB 内存这些场景有个共同点需求很简单就是查个数据但工具很重。一行命令打开浏览器就能查Shield 的 MySQL 和 PostgreSQL 插件做成了 Docker 镜像专门解决这个问题# MySQLdockerrun-d-eDB_HOSThost.docker.internal-eDB_USERroot-eDB_PASSmypass\-p8080:8080 fengyily/shield-mysql# PostgreSQLdockerrun-d-eDB_HOSThost.docker.internal-eDB_USERpostgres-eDB_PASSmypass\-p8080:8080 fengyily/shield-postgres打开 http://localhost:8080 浏览器里直接查数据。不需要配置文件不需要 PHP 环境不需要注册服务器。环境变量传入数据库地址和凭证启动即连接。有多轻phpMyAdminpgAdminShield MySQLShield PostgreSQL镜像大小~600 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 — 多标签编辑器CtrlEnter执行查看表结构 — 字段类型、默认值、索引结果导出 — CSV 导出单元格复制列排序行级操作 — 插入、编辑、删除建表/删表 — 可视化操作只读模式 — 设置DB_READONLYtrue写操作全部拦截不能干什么这些请用专业工具存储过程 / 触发器编辑数据库迁移慢查询分析多实例统一管理几个典型用法开发环境随手带一个Docker Compose 里加两行数据库和管理工具一起起来services:mysql:image:mysql:8environment:MYSQL_ROOT_PASSWORD:rootports:-3306:3306mysql-web:image:fengyily/shield-mysqlenvironment:DB_HOST:mysqlDB_USER:rootDB_PASS:rootports:-8080:8080depends_on:-mysqldocker compose up -dhttp://localhost:8080 查数据。开发环境重建也是秒级。临时用完就删服务器上排查问题不想留工具dockerrun-d--nametmp-viewer--networkhost\-eDB_HOST127.0.0.1-eDB_USERreadonly-eDB_PASSxxx\-eDB_READONLYtrue\fengyily/shield-mysql# 查完删掉dockerrm-ftmp-viewer低配设备树莓派、NAS、1 核 512MB 的 VPSdockerrun-d-eDB_HOST192.168.1.100-eDB_USERpostgres-eDB_PASSmypass\-p8080:8080 fengyily/shield-postgres9MB 镜像 10MB 运行内存不抢资源。同时看多个库不同端口开不同实例# 开发库dockerrun-d-eDB_HOST10.0.0.1-eDB_USERroot-eDB_PASSdev\-p8080:8080 fengyily/shield-mysql# 测试库只读dockerrun-d-eDB_HOST10.0.0.2-eDB_USERroot-eDB_PASStest\-eDB_READONLYtrue\-p8081:8080 fengyily/shield-mysql# PG 生产库只读dockerrun-d-eDB_HOST10.0.0.3-eDB_USERreadonly-eDB_PASSprod\-eDB_READONLYtrue\-p8082:8080 fengyily/shield-postgres网络说明Docker 容器访问宿主机数据库根据系统选择方式# Linux用 host 网络最简单dockerrun-d--networkhost\-eDB_HOST127.0.0.1-eDB_USERroot-eDB_PASSmypass\fengyily/shield-mysql# macOS / Windows Docker Desktop用 host.docker.internaldockerrun-d\-eDB_HOSThost.docker.internal-eDB_USERroot-eDB_PASSmypass\-p8080:8080 fengyily/shield-mysql# 数据库也是容器放同一网络用容器名dockerrun-d--networkmy-net\-eDB_HOSTmy-mysql-eDB_USERroot-eDB_PASSmypass\-p8080:8080 fengyily/shield-mysql环境变量变量MySQL 默认PostgreSQL 默认说明DB_HOST127.0.0.1127.0.0.1数据库地址DB_PORT33065432端口DB_USERrootpostgres用户名DB_PASS——密码DB_NAME—postgres默认数据库DB_READONLYfalsefalse只读模式WEB_PORT80808080Web 端口如果需要远程访问上面说的都是本地或内网场景。如果你需要把数据库管理界面分享给外部同事——比如让外包团队查一下数据或者在家访问公司内网的数据库——可以配合 Shield CLI 使用shield pluginaddmysql shield mysql10.0.0.5:3306 --db-user root--readonlyShield CLI 会自动建立加密隧道生成一个公网 URL对方浏览器打开就能查。用的是同一套 Web 界面只是多了远程访问能力。用完断开链接即失效。详细用法见Shield CLI 是什么试一下# MySQLdockerrun-d-eDB_HOSThost.docker.internal-eDB_USERroot-eDB_PASSroot\-p8080:8080 fengyily/shield-mysql# PostgreSQLdockerrun-d-eDB_HOSThost.docker.internal-eDB_USERpostgres-eDB_PASSpostgres\-p8081:8080 fengyily/shield-postgresDocker Hubfengyily/shield-mysql · fengyily/shield-postgresGitHubshield-cli · shield-plugins喜欢的话来给个小星星吧。