新增: MySQL/SSH 代理工具

- mysql-proxy: MySQL HTTP 代理,连接池复用
- ssh-proxy: SSH HTTP 代理,会话复用
- mysql-cli: 轻量级 MySQL CLI 工具

功能特性:
- 延迟初始化,启动快
- CLI 和 HTTP API 双模式
- 请求日志支持
- 错误友好提示
- JSON 极简输出格式
This commit is contained in:
2026-03-19 14:03:12 +08:00
commit 11203f036f
24 changed files with 3794 additions and 0 deletions

148
mysql-cli/README.md Normal file
View File

@@ -0,0 +1,148 @@
# MySQL CLI (Rust)
> 💡 **快速开始**:运行 `mysql --help` 查看完整使用文档
一个轻量级的 Rust 语言 MySQL 命令行工具,兼容 MySQL 官方客户端用法,可以在未安装 MySQL 客户端的系统中执行 SQL 语句。
## 功能特性
-**交互式模式**:支持完整的 REPL 交互式 Shell
-**批量执行**:支持从 SQL 文件执行多条语句
-**多种输出格式**支持表格、CSV、JSON、垂直格式
-**完整 SQL 支持**:支持 SELECT、INSERT、UPDATE、DELETE 等所有 SQL 语句
-**特殊命令**:支持 USE、SHOW、DESCRIBE、EXPLAIN 等 MySQL 命令
-**紧凑体积**:编译后仅 2.5MB,无需安装 MySQL 客户端
## 编译
```bash
cargo build --release
```
## 使用方法
### 基本语法
```bash
./mysql.exe -h <host> -P <port> -u <username> -p <password> -D <database> -e "<SQL>"
```
### 参数说明
| 参数 | 说明 | 默认值 |
|------|------|--------|
| -h | MySQL 主机地址 | 127.0.0.1 |
| -P | MySQL 端口 | 3306 |
| -u | 用户名 | root |
| -p | 密码 | (空) |
| -D | 数据库名 | (空) |
| -e | 要执行的 SQL 语句 | (可选) |
| -f | 从 SQL 文件执行 | (可选) |
| -F | 输出格式table, csv, json, vertical | table |
| -o | 输出到文件 | stdout |
| -i | 强制进入交互模式 | (可选) |
**注意**:不指定 `-e``-f` 时,需要使用 `-i` 参数进入交互模式
### 使用示例
#### 1. 交互式模式
进入交互式 Shell
```bash
# 基本连接并进入交互模式
mysql -p123456 -i
# 指定主机和用户
mysql -h127.0.0.1 -uroot -p123456 -i
```
交互式命令:
- `use <database>` - 切换数据库
- `status` - 显示连接状态
- `source <file>` - 执行 SQL 文件
- `format <type>` - 设置输出格式table, csv, json, vertical
- `output <file>` - 设置输出文件
- `exit / quit` - 退出程序
#### 2. 直接执行 SQL
```bash
# 查询数据
mysql -h127.0.0.1 -uroot -p123456 -Dmydb -e "SELECT * FROM users LIMIT 10"
# 显示表结构
mysql -p123456 -Dmydb -e "DESCRIBE users"
# 显示所有数据库
mysql -p123456 -e "SHOW DATABASES"
# 插入数据
mysql -p123456 -Dmydb -e "INSERT INTO users (name, email) VALUES ('Alice', 'alice@example.com')"
# 更新数据
mysql -p123456 -Dmydb -e "UPDATE users SET email='new@email.com' WHERE id=1"
# 删除数据
mysql -p123456 -Dmydb -e "DELETE FROM users WHERE id=1"
```
#### 3. 从 SQL 文件执行
```bash
# 执行 SQL 文件
mysql -p123456 -f script.sql
# 执行并输出到 CSV
mysql -p123456 -f script.sql -F csv -o result.csv
```
#### 4. 不同输出格式
```bash
# CSV 格式
mysql -p123456 -e "SELECT * FROM users" -F csv
# JSON 格式
mysql -p123456 -e "SELECT * FROM users" -F json
# 垂直格式(适合字段较多的记录)
mysql -p123456 -e "SELECT * FROM users" -F vertical
```
## 项目结构
```
mysql-cli/
├── Cargo.toml # Rust 项目配置
├── README.md # 项目文档
└── src/
├── main.rs # 主程序入口
├── config.rs # 配置管理
├── db.rs # 数据库连接
├── executor.rs # SQL 执行引擎
└── repl.rs # 交互式 REPL
```
## 依赖
- Rust 1.70+
- mysql (25.x)
- clap (4.x) - 命令行参数解析
- rustyline (14.x) - 交互式 REPL
- serde / serde_json - JSON 序列化
- csv - CSV 输出
## 与 Go 版本对比
| 功能 | Rust 版本 | Go 版本 |
|------|-----------|---------|
| 交互式模式 | ✅ | ✅ |
| SQL 文件执行 | ✅ | ✅ |
| 输出格式 | 表格/CSV/JSON/垂直 | 表格/CSV/JSON/垂直 |
| 二进制大小 | ~2.5MB | ~7.3MB |
| 内存占用 | 更低 | 较高 |
## License
MIT