- mysql-proxy: MySQL HTTP 代理,连接池复用 - ssh-proxy: SSH HTTP 代理,会话复用 - mysql-cli: 轻量级 MySQL CLI 工具 功能特性: - 延迟初始化,启动快 - CLI 和 HTTP API 双模式 - 请求日志支持 - 错误友好提示 - JSON 极简输出格式
149 lines
3.7 KiB
Markdown
149 lines
3.7 KiB
Markdown
# 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
|