Files
rust-work/mysql-cli/README.md
绝尘 11203f036f 新增: MySQL/SSH 代理工具
- mysql-proxy: MySQL HTTP 代理,连接池复用
- ssh-proxy: SSH HTTP 代理,会话复用
- mysql-cli: 轻量级 MySQL CLI 工具

功能特性:
- 延迟初始化,启动快
- CLI 和 HTTP API 双模式
- 请求日志支持
- 错误友好提示
- JSON 极简输出格式
2026-03-19 14:03:12 +08:00

149 lines
3.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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