新增: MySQL/SSH 代理工具
- mysql-proxy: MySQL HTTP 代理,连接池复用 - ssh-proxy: SSH HTTP 代理,会话复用 - mysql-cli: 轻量级 MySQL CLI 工具 功能特性: - 延迟初始化,启动快 - CLI 和 HTTP API 双模式 - 请求日志支持 - 错误友好提示 - JSON 极简输出格式
This commit is contained in:
148
mysql-cli/README.md
Normal file
148
mysql-cli/README.md
Normal 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
|
||||
Reference in New Issue
Block a user