DB Readonly

对 MySQL 或 PostgreSQL 执行安全的只读查询,用于数据检查、报表生成和故障排查。当用户要求读取表、检查结构、统计行数、抽样数据或导出查询结果且不修改数据时使用。

安装

概览

DB Readonly 是一个专为数据库只读操作设计的命令行工具,支持 PostgreSQL 和 MySQL 两种主流关系型数据库。它通过环境变量自动建立安全连接,仅允许执行 SELECT、WITH 子句以及 EXPLAIN 等纯查询语句,从根本上杜绝了数据修改或结构变更的风险。该工具适用于开发调试、数据分析、报表生成等多种需要访问数据库内容的场景,尤其适合运维人员排查问题或数据分析师提取样本时使用。其核心设计理念是‘零风险读取’,内置多重安全检查机制,确保用户无法意外执行删除、更新或表结构变更等危险操作。 与通用数据库客户端不同,DB Readonly 不提供交互式界面,而是以脚本形式运行,便于集成到自动化流程中。用户只需传入 SQL 查询语句,即可在控制台输出结果,并支持将查询结果导出为 CSV、TSV 或 JSON 格式,方便后续处理或归档。例如,可以快速统计某张表的行数、抽样查看部分记录、检查索引使用情况,或将复杂查询结果保存为文件供其他系统调用。这种轻量级、高安全性的设计使其成为开发环境和生产环境中进行数据探查的理想选择。 此外,DB Readonly 强调透明性与可控性:所有连接参数均通过标准环境变量配置,避免硬编码敏感信息;对于可能返回大量数据的查询,默认建议添加 LIMIT 子句以防止内存溢出;当用户尝试执行非只读命令时,工具会明确拒绝并提示风险。这些特性共同构成了一个既高效又可靠的只读数据库访问方案,特别适合对安全性要求较高的团队协作环境。

核心功能特点

  1. 仅支持 SELECT/WITH/EXPLAIN 等只读 SQL 语句,禁止执行 INSERT、UPDATE、DELETE 等危险操作
  2. 自动识别 PostgreSQL 和 MySQL 数据库类型,通过标准环境变量(如 PGHOST、MYSQL_HOST)建立连接
  3. 支持将查询结果导出为 CSV、TSV 或 JSON 格式,便于后续数据处理与分析
  4. 内置安全规则,强制要求对探索性查询使用 LIMIT,防止大规模数据加载导致性能问题
  5. 以脚本方式运行(db_readonly.sh),易于集成到 CI/CD 或自动化运维流程中
  6. 不存储任何凭证或日志,所有操作基于临时会话完成,保障连接信息安全

适用场景

在日常开发工作中,工程师经常需要快速验证数据状态或调试 SQL 逻辑。例如,在排查某个 API 返回异常时,开发者可以通过 DB Readonly 执行 `SELECT * FROM orders WHERE status = ‘pending’ LIMIT 10` 来检查待处理订单的数据结构是否完整。由于工具仅允许只读操作,即使误输入也不会造成数据丢失,极大降低了误操作风险。同样,在编写新报表功能前,可以先抽样查看目标表的数据分布情况,判断字段类型和空值比例,从而优化查询语句设计。 运维团队在处理线上故障时,往往需要在不影响业务的前提下获取数据库快照。比如发现慢查询日志激增,可通过 EXPLAIN 分析执行计划,定位瓶颈所在。此时使用 DB Readonly 执行 `EXPLAIN ANALYZE SELECT * FROM logs WHERE created_at > NOW() – INTERVAL ‘1 hour’` 既能获得详细的执行信息,又不会触发实际的数据扫描,有效保护生产环境稳定性。此外,定期导出关键指标数据(如每日活跃用户数)并存入临时目录,也为后续趋势分析提供了可靠依据。 对于数据分析师而言,DB Readonly 提供了一种安全合规的数据提取方式。在遵守公司数据权限政策的前提下,他们可以批量抽取脱敏后的用户行为日志,用于构建机器学习特征工程。通过 `–format csv –out /tmp/user_events.csv` 参数,将复杂 JOIN 查询的结果直接保存为标准格式文件,再导入 Python 或 R 进行分析,避免了手动复制粘贴带来的错误和效率低下问题。这种标准化、可重复的数据获取流程显著提升了分析工作的准确性和可维护性。