案例:管理多个数据库(开发/测试/生产环境)¶
场景背景¶
- 角色:后端开发工程师,负责一个项目涉及 3 个数据库环境
- 环境:
dev:本地开发库(MySQL,localhost)test:测试环境(MySQL,内网 10.0.0.50)prod:生产环境(MySQL,内网 192.168.1.100,只读账号)- 目标:用 dbskiter 统一管理多个数据库配置,一条命令切换环境
生活化比喻:多数据库配置就像你有 3 把钥匙:家门钥匙(dev)、公司钥匙(test)、保险柜钥匙(prod)。dbskiter 的配置文件就像一个钥匙串,按名字取钥匙,不会拿错。
步骤 1:配置多数据库(3 分钟)¶
编辑配置文件¶
找到配置文件路径:
dbskiter --config-path
# 输出: ~/.dbskiter/config.yaml(Linux/macOS)
# 或: C:\Users\用户名\.dbskiter\config.yaml(Windows)
用编辑器打开,添加多个数据库配置:
# ~/.dbskiter/config.yaml
databases:
# 开发环境(本地)
dev:
type: mysql
host: localhost
port: 3306
user: root
password: dev_password
database: myapp_dev
# 测试环境(内网)
test:
type: mysql
host: 10.0.0.50
port: 3306
user: test_reader
password: test_password
database: myapp_test
# 生产环境(只读账号)
prod:
type: mysql
host: 192.168.1.100
port: 3306
user: dbskiter_readonly
password: prod_password
database: myapp_prod
# 另一个项目的数据库(Oracle)
erp:
type: oracle
host: 192.168.1.200
port: 1521
user: erp_reader
password: erp_password
database: ORCL
# 默认使用的数据库(省略 --database 时默认用 dev)
default: dev
安全提示: - 配置文件包含密码,不要提交到 Git - 生产环境使用只读账号,避免误操作 - 可以把配置文件权限设为仅当前用户可读:
chmod 600 ~/.dbskiter/config.yaml
步骤 2:验证配置(1 分钟)¶
查看所有已配置的数据库¶
dbskiter init --list
# 或
dbskiter --list-databases
预期输出:
已配置的数据库:
- dev (MySQL) localhost:3306/myapp_dev
- test (MySQL) 10.0.0.50:3306/myapp_test
- prod (MySQL) 192.168.1.100:3306/myapp_prod [只读账号]
- erp (Oracle) 192.168.1.200:1521/ORCL
默认数据库: dev
测试每个环境的连接¶
# 测试开发环境(默认,可省略 --database)
dbskiter monitor health
# 测试测试环境
dbskiter --database=test monitor health
# 测试生产环境
dbskiter --database=prod monitor health
# 测试 Oracle 数据库
dbskiter --database=erp monitor health
步骤 3:日常切换使用(2 分钟)¶
场景 1:开发环境调试 SQL¶
# 检查开发库表结构
dbskiter --database=dev sql execute "SHOW TABLES"
# 查询开发库数据
dbskiter --database=dev sql execute "SELECT COUNT(*) FROM users"
场景 2:测试环境性能测试¶
# 测试环境巡检
dbskiter --database=test inspector run
# 测试环境慢查询分析
dbskiter --database=test diagnose slow-queries
场景 3:生产环境只读监控(安全)¶
# 生产环境健康检查(只读账号,安全)
dbskiter --database=prod monitor health
# 生产环境巡检报告(只读查询,不修改数据)
dbskiter --database=prod inspector report --output prod_report.html
# 生产环境锁分析(紧急排查)
dbskiter --database=prod lock analyze
生产环境账号
dbskiter_readonly只有 SELECT 权限,即使命令误输入也不会改数据。这就是权限最小化原则。
步骤 4:批量操作多个数据库(3 分钟)¶
场景:给所有环境做巡检¶
#!/bin/bash
# 文件名:inspect_all.sh
# 功能:批量巡检所有环境
DATABASES=("dev" "test" "prod")
DATE_STR=$(date +%Y-%m-%d)
for db in "${DATABASES[@]}"; do
echo "========== 巡检环境: $db =========="
# 健康检查
dbskiter --database=$db monitor health > "${db}_health_${DATE_STR}.log"
# 生成 HTML 报告
dbskiter --database=$db inspector report --output "${db}_report_${DATE_STR}.html"
echo "完成: ${db}_report_${DATE_STR}.html"
echo ""
done
echo "全部巡检完成!"
执行:
chmod +x inspect_all.sh
./inspect_all.sh
输出文件:
dev_health_2026-06-18.log
dev_report_2026-06-18.html
test_health_2026-06-18.log
test_report_2026-06-18.html
prod_health_2026-06-18.log
prod_report_2026-06-18.html
对比不同环境¶
# 对比开发和测试环境的表数量
echo "开发环境:"
dbskiter --database=dev sql execute "SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = 'myapp_dev'"
echo "测试环境:"
dbskiter --database=test sql execute "SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = 'myapp_test'"
echo "生产环境:"
dbskiter --database=prod sql execute "SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = 'myapp_prod'"
步骤 5:环境切换快捷命令(可选)¶
使用 Shell 别名(Linux/macOS)¶
在 ~/.bashrc 或 ~/.zshrc 中添加:
# dbskiter 环境快捷别名
alias dbsk='dbskiter'
alias dbsk-dev='dbskiter --database=dev'
alias dbsk-test='dbskiter --database=test'
alias dbsk-prod='dbskiter --database=prod'
alias dbsk-erp='dbskiter --database=erp'
# 常用命令快捷方式
alias dbsk-health='dbskiter monitor health'
alias dbsk-slow='dbskiter diagnose slow-queries'
alias dbsk-audit='dbskiter security audit'
加载配置:
source ~/.bashrc # 或 source ~/.zshrc
使用示例:
# 检查生产环境健康
alias dbsk-prod='dbskiter --database=prod'
# 生产环境巡检(只需 4 个单词)
dbsk-prod inspector run
# 检查所有环境慢查询
dbsk-dev diagnose slow-queries
dbsk-test diagnose slow-queries
dbsk-prod diagnose slow-queries
使用 PowerShell 函数(Windows)¶
在 PowerShell 配置文件中添加:
# $PROFILE 文件路径
function dbsk-dev { dbskiter --database=dev @args }
function dbsk-test { dbskiter --database=test @args }
function dbsk-prod { dbskiter --database=prod @args }
function dbsk-erp { dbskiter --database=erp @args }
# 常用命令
function dbsk-health { dbskiter monitor health }
function dbsk-slow { dbskiter diagnose slow-queries }
function dbsk-audit { dbskiter security audit }
加载配置:
. $PROFILE
最佳实践¶
1. 命名规范¶
databases:
# 项目名_环境名_用途
myapp_dev: # 开发
myapp_test: # 测试
myapp_prod: # 生产
myapp_prod_read: # 生产只读(报表查询)
myapp_prod_write:# 生产写入(批量任务)
# 其他项目
erp_prod: # ERP 生产
crm_test: # CRM 测试
2. 权限隔离¶
| 环境 | 账号权限 | 说明 |
|---|---|---|
| dev | ALL | 开发调试,可以删表重建 |
| test | SELECT, INSERT, UPDATE, DELETE | 测试数据,不能删库 |
| prod | SELECT | 只读监控,严禁修改 |
| prod_admin | ALL(仅限特定 IP) | DBA 紧急操作,用完即删 |
3. 配置版本管理(不含密码)¶
创建 config.yaml.template(无密码)用于版本管理:
# config.yaml.template - 提交到 Git,不含密码
databases:
dev:
type: mysql
host: localhost
port: 3306
user: root
password: "${DEV_PASSWORD}" # 环境变量或手动填充
database: myapp_dev
prod:
type: mysql
host: 192.168.1.100
port: 3306
user: dbskiter_readonly
password: "${PROD_PASSWORD}"
database: myapp_prod
default: dev
真实密码通过环境变量或 CI/CD 密钥管理注入。
4. 环境变量覆盖配置¶
优先级:命令行参数 > 环境变量 > 配置文件
# 用环境变量临时覆盖配置(CI/CD 场景)
export DB_HOST=192.168.1.100
export DB_USER=ci_readonly
export DB_PASSWORD=$CI_DB_PASSWORD
export DB_NAME=myapp_prod
# 不指定 --database,使用环境变量连接
dbskiter monitor health
常见问题(FAQ)¶
Q1:配置了很多数据库,怎么快速知道有哪些?¶
dbskiter --list-databases
# 或
dbskiter init --list
Q2:执行命令时忘记指定 --database,连到了默认库,怎么改默认?¶
编辑配置文件,修改 default 字段:
default: test # 把默认从 dev 改成 test
Q3:生产环境连不上,提示权限不足?¶
原因:生产账号 dbskiter_readonly 只有 SELECT 权限,不能执行诊断需要的某些命令。
解决:
- 给生产账号增加 PROCESS、SHOW DATABASES 权限:
GRANT SELECT, PROCESS, SHOW DATABASES ON *.* TO 'dbskiter_readonly'@'%';
Q4:不同数据库类型(MySQL + Oracle)混用,命令一样吗?¶
答:大部分命令一样!dbskiter 会自动适配:
# MySQL
dbskiter --database=dev monitor health
# Oracle(命令完全一样)
dbskiter --database=erp monitor health
# 底层会自动用 Oracle 的 v$session、v$sysstat 等视图
# 输出格式一致,不用学两套命令
Q5:团队共享配置,每个人都要手写吗?¶
答:可以共享 config.yaml.template,密码各自填。或者使用团队共享的密码管理工具(如 Vault、1Password CLI)注入。
# 用 1Password CLI 注入密码
export DB_PASSWORD=$(op read "op://vault/prod_db/password")
dbskiter --database=prod monitor health
命令速查¶
# 列出所有数据库
dbskiter --list-databases
# 指定数据库执行命令
dbskiter --database=prod monitor health
dbskiter --database=test diagnose slow-queries
dbskiter --database=dev inspector run
# 使用默认数据库(省略 --database)
dbskiter monitor health
# 临时覆盖参数(不修改配置)
dbskiter --host=192.168.1.100 --user=root --password=xxx monitor health
# 查看配置文件路径
dbskiter --config-path
下一步学习¶
| 你想学习... | 推荐案例 |
|---|---|
| 读懂健康检查输出 | 02-第一条命令 |
| 业务卡顿排查 | 业务卡顿查慢查询 |
| 安全审计 | 安全审计排查 |
| 批量运维脚本 | 月度巡检实战 |
配置一次,处处使用。多数据库管理的核心是:命名规范 + 权限隔离 + 配置模板化。