# Byted Vedb Mysql

> 火山引擎 VEDBM（云数据库 VeDB MySQL 版）管理技能。当用户需要创建 VEDBM 实例、查询 VEDBM 实例列表、查看实例详情、管理数据库账号、获取实例连接地址（Endpoints）、或对实例规格进行升级/降级时使用此技能。包含特定关键词：火山引擎云数据库、VEDBM、VeDB MySQL。

- Skill: `bytedance/byted-vedb-mysql` (Agent Skill, multi-file: 13 files)
- Install (CLI): `npx skillmds@latest add bytedance/byted-vedb-mysql`
- Raw SKILL.md: https://api.skillmd.com/api/skills/bytedance/byted-vedb-mysql/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- License: Apache-2.0
- Author: bytedance (https://skillmd.com/u/bytedance)
- Updated: 2026-09-09
- Page: https://skillmd.com/skills/bytedance/byted-vedb-mysql

---


# 火山引擎 VEDBM 管理技能

本技能用于管理火山引擎 VEDBM（云数据库）实例，包含以下功能：

1. **创建实例**：支持用户自定义实例规格，默认使用 2C8G 规格，用户名 root，密码随机生成
2. **查看实例列表**：查询指定地域下的所有 VEDBM 实例
3. **查看数据库账号列表**：查询指定实例中的所有数据库账号及其状态
4. **查看实例连接地址**：查询指定实例的连接地址信息（域名、端口、IP等）

## ✨ 新特性

- **智能规格匹配**：支持用户输入简单格式（如 "2c8g"、"4c16g"）
- **灵活默认值**：默认使用 2C8G 规格
- **自动降级/升级**：如果用户提供的规格不存在，自动选择最接近的可用规格

## 使用流程

### 第一步：收集必要信息

当用户触发此技能时，先检查是否有必要信息。如果没有，引导用户提供：

| 信息 | 必填 | 说明 |
|------|------|------|
| VPC ID | ✅ | 虚拟私有云 ID |
| 子网 ID | ✅ | 子网 ID |
| 可用区 ID | ✅ | 可用区（如 cn-guangzhou-a） |
| AccessKey ID | ✅ | 火山引擎访问密钥 ID |
| Secret Access Key | ✅ | 火山引擎秘密访问密钥 |

### 第二步：信息收集方式

#### 方式 A：对话引导（推荐首次使用）

询问用户：
> "好的，我来帮你创建 VEDBM 实例！需要你提供一些信息：
>
> 1. VPC ID 是什么？
> 2. 子网 ID 是什么？
> 3. 想用哪个可用区？（如 cn-guangzhou-a）
> 4. AccessKey ID 是什么？
> 5. Secret Access Key 是什么？"

#### 方式 B：环境变量配置（推荐频繁使用）

提示用户配置环境变量：

```bash
# 配置环境变量
export VOLCENGINE_ACCESS_KEY="你的AccessKeyId"
export VOLCENGINE_SECRET_KEY="你的SecretAccessKey"
export VEDBM_VPC_ID="你的VPC ID"
export VEDBM_SUBNET_ID="你的子网 ID"
export VEDBM_ZONE_ID="cn-guangzhou-a"
```

或者使用 `.env` 文件：

```bash
cd scripts
cp .env.example .env
# 编辑 .env 文件填入真实信息
```

### 第三步：执行创建

收集完信息后，执行创建命令。

## 访问密钥配置

### 方式 1：命令行参数

```bash
python scripts/create_vedbm_instance.py \
  --vpc-id <你的VPC ID> \
  --subnet-id <你的子网 ID> \
  --zone-id cn-guangzhou-a \
  --access-key-id <你的AccessKeyId> \
  --secret-access-key <你的SecretAccessKey>
```

### 方式 2：环境变量

```bash
export VOLCENGINE_ACCESS_KEY="your-access-key-id"
export VOLCENGINE_SECRET_KEY="your-secret-access-key"
export VEDBM_VPC_ID="your-vpc-id"
export VEDBM_SUBNET_ID="your-subnet-id"
export VEDBM_ZONE_ID="cn-guangzhou-a"

python scripts/create_vedbm_instance.py
```

### 方式 3：混合使用

可以部分用环境变量，部分用命令行参数：

```bash
export VOLCENGINE_ACCESS_KEY="your-access-key-id"
export VOLCENGINE_SECRET_KEY="your-secret-access-key"

python scripts/create_vedbm_instance.py \
  --vpc-id <你的VPC ID> \
  --subnet-id <你的子网 ID> \
  --zone-id cn-guangzhou-a
```

## 可用区说明

广州区域可用区：

- `cn-guangzhou-a` - 可用区 A
- `cn-guangzhou-c` - 可用区 C

**注意**：没有 `cn-guangzhou-b`

## 节点规格

| 规格 | CPU | 内存 | 说明 |
|------|-----|------|------|
| `vedb.mysql.x2.large` | 2核 | 8GB | **默认**，入门级 |
| `vedb.mysql.x4.large` | 4核 | 16GB | 性价比高 |
| `vedb.mysql.g4.large` | 4核 | 16GB | 通用型 |
| `vedb.mysql.p4.large` | 4核 | 16GB | 性能型 |
| `vedb.mysql.x4.xlarge` | 8核 | 32GB | 高性能 |
| `vedb.mysql.x8.large` | 16核 | 64GB | 旗舰级 |

## 🎯 规格输入格式

支持多种输入格式：

### 1. 简写格式（推荐）

- `2c8g` - 2核8GB
- `4c16g` - 4核16GB
- `8c32g` - 8核32GB

### 2. 只指定 CPU

- `2c` - 自动匹配 2核 的规格
- `4c` - 自动匹配 4核 的规格

### 3. 只指定内存

- `8g` - 自动匹配 8GB 的规格
- `16g` - 自动匹配 16GB 的规格

### 4. 完整规格名

- `vedb.mysql.x2.large`
- `vedb.mysql.x4.large`

## 🤖 智能匹配规则

如果用户提供的规格不存在，系统会自动选择最接近的规格：

1. 优先选择大于等于目标配置的规格
2. CPU 权重 > 内存权重
3. 如果没有足够大的规格，选择最大的可用规格

**示例**：

- 用户输入 `3c10g` → 自动匹配 `4c16g`
- 用户输入 `5c20g` → 自动匹配 `8c32g`
- 用户输入 `1c4g` → 自动匹配 `2c8g`（最小规格）

## 前置条件

1. 已安装火山引擎 Python SDK：

   ```bash
   pip install volcengine-python-sdk
   ```

2. 已配置火山引擎访问凭证（Access Key ID 和 Secret Access Key）

## 使用方法

运行脚本创建实例：

```bash
python scripts/create_vedbm_instance.py
```

## 脚本参数

脚本支持以下可选参数：

- `--region`: 区域，默认 `cn-guangzhou`
- `--instance-name`: 实例名称，默认随机生成
- `--node-spec`: 节点规格（可选，默认 `2c8g`）
  - 支持格式：`2c8g`、`4c16g`、`vedb.mysql.x2.large`
- `--vpc-id`: VPC ID（必须提供）
- `--subnet-id`: 子网 ID（必须提供）
- `--zone-id`: 可用区 ID（必须提供）

## 输出信息

创建成功后会返回：

- 实例 ID
- 连接地址
- 端口
- 用户名（root）
- 密码（随机生成）
- 使用的规格（含描述和代码）

## 示例

### 示例 1：使用默认规格（2c8g）

```bash
python scripts/create_vedbm_instance.py \
  --vpc-id vpc-123456 \
  --subnet-id subnet-123456 \
  --zone-id cn-guangzhou-a
```

### 示例 2：使用简写规格

```bash
python scripts/create_vedbm_instance.py \
  --vpc-id vpc-123456 \
  --subnet-id subnet-123456 \
  --zone-id cn-guangzhou-a \
  --node-spec 4c16g
```

### 示例 3：使用完整规格名

```bash
python scripts/create_vedbm_instance.py \
  --vpc-id vpc-123456 \
  --subnet-id subnet-123456 \
  --zone-id cn-guangzhou-a \
  --node-spec vedb.mysql.x4.large
```

### 示例 4：只指定 CPU

```bash
python scripts/create_vedbm_instance.py \
  --vpc-id vpc-123456 \
  --subnet-id subnet-123456 \
  --zone-id cn-guangzhou-a \
  --node-spec 8c
```

---

# 功能二：查看实例列表

## 使用流程

### 第一步：收集必要信息

当用户需要查看实例列表时，先检查是否有必要信息。如果没有，引导用户提供：

| 信息 | 必填 | 说明 |
|------|------|------|
| AccessKey ID | ✅ | 火山引擎访问密钥 ID |
| Secret Access Key | ✅ | 火山引擎秘密访问密钥 |
| 区域（可选） | ❌ | 查询的区域，默认 cn-guangzhou |

### 第二步：信息收集方式

#### 方式 A：对话引导（推荐首次使用）

询问用户：
> "好的，我来帮你查看 VEDBM 实例列表！需要你提供一些信息：
>
> 1. AccessKey ID 是什么？
> 2. Secret Access Key 是什么？
> 3. 要查询哪个区域？（默认 cn-guangzhou）"

#### 方式 B：环境变量配置（推荐频繁使用）

提示用户配置环境变量（可以复用以创建实例的配置）：

```bash
# 配置环境变量
export VOLCENGINE_ACCESS_KEY="你的AccessKeyId"
export VOLCENGINE_SECRET_KEY="你的SecretAccessKey"
export VEDBM_REGION="cn-guangzhou"  # 可选
```

## 使用方法

运行脚本查询实例列表：

```bash
python scripts/list_instances.py
```

## 脚本参数

脚本支持以下参数：

- `--region`: 区域，默认 `cn-guangzhou`
- `--access-key-id`: 访问密钥 ID（或环境变量 VOLCENGINE_ACCESS_KEY）
- `--secret-access-key`: 秘密访问密钥（或环境变量 VOLCENGINE_SECRET_KEY）

## 输出信息

查询成功后会返回：

- 区域
- 实例总数
- 每个实例的详细信息：
  - 实例 ID
  - 实例名称
  - 实例状态
  - 节点规格
  - 可用区
  - 创建时间

## 示例

### 示例 1：使用默认区域（cn-guangzhou）

```bash
python scripts/list_instances.py
```

### 示例 2：指定区域

```bash
python scripts/list_instances.py --region cn-beijing
```

## 输出示例

```
====================================================================================================
✅ VEDBM 实例列表查询成功！
====================================================================================================
区域: cn-guangzhou
实例总数: 2

📋 实例列表：
----------------------------------------------------------------------------------------------------
实例 ID                  实例名称                  状态         规格                可用区          
----------------------------------------------------------------------------------------------------
vedbm-xxx123456         vedbm-instance-123456    Running     vedb.mysql.x2.large cn-guangzhou-a
vedbm-yyy789012         vedbm-instance-789012    Running     vedb.mysql.x4.large cn-guangzhou-c
----------------------------------------------------------------------------------------------------
====================================================================================================
```

---

# 功能三：查看数据库账号列表

## 使用流程

### 第一步：收集必要信息

当用户需要查看数据库账号列表时，先检查是否有必要信息。如果没有，引导用户提供：

| 信息 | 必填 | 说明 |
|------|------|------|
| 实例 ID | ✅ | VEDBM 实例 ID |
| AccessKey ID | ✅ | 火山引擎访问密钥 ID |
| Secret Access Key | ✅ | 火山引擎秘密访问密钥 |

### 第二步：信息收集方式

#### 方式 A：对话引导（推荐首次使用）

询问用户：
> "好的，我来帮你查看 VEDBM 实例的数据库账号列表！需要你提供一些信息：
>
> 1. 实例 ID 是什么？
> 2. AccessKey ID 是什么？
> 3. Secret Access Key 是什么？"

#### 方式 B：环境变量配置（推荐频繁使用）

提示用户配置环境变量（可以复用以创建实例的配置）：

```bash
# 配置环境变量
export VOLCENGINE_ACCESS_KEY="你的AccessKeyId"
export VOLCENGINE_SECRET_KEY="你的SecretAccessKey"
```

## 使用方法

运行脚本查询账号列表：

```bash
python scripts/list_db_accounts.py --instance-id <实例ID>
```

## 脚本参数

脚本支持以下参数：

- `--region`: 区域，默认 `cn-guangzhou`
- `--instance-id`: 实例 ID（必须提供）
- `--access-key-id`: 访问密钥 ID（或环境变量 VOLCENGINE_ACCESS_KEY）
- `--secret-access-key`: 秘密访问密钥（或环境变量 VOLCENGINE_SECRET_KEY）

## 输出信息

查询成功后会返回：

- 实例 ID
- 区域
- 账号总数
- 每个账号的详细信息：
  - 账号名称
  - 账号类型
  - 账号状态

## 示例

```bash
python scripts/list_db_accounts.py \
  --instance-id vedbm-xxx123456
```

## 输出示例

```
======================================================================
✅ 数据库账号列表查询成功！
======================================================================
实例 ID: vedbm-xxx123456
区域: cn-guangzhou
账号总数: 2

📋 账号列表：
----------------------------------------------------------------------
账号名称             账号类型          账号状态        
----------------------------------------------------------------------
root                Super           Available     
testuser            Normal          Available     
----------------------------------------------------------------------
======================================================================
```

---

# 功能四：查看实例连接地址

## 使用流程

### 第一步：收集必要信息

当用户需要查看实例连接地址时，先检查是否有必要信息。如果没有，引导用户提供：

| 信息 | 必填 | 说明 |
|------|------|------|
| 实例 ID | ✅ | VEDBM 实例 ID |
| AccessKey ID | ✅ | 火山引擎访问密钥 ID |
| Secret Access Key | ✅ | 火山引擎秘密访问密钥 |

### 第二步：信息收集方式

#### 方式 A：对话引导（推荐首次使用）

询问用户：
> "好的，我来帮你查看 VEDBM 实例的连接地址！需要你提供一些信息：
>
> 1. 实例 ID 是什么？
> 2. AccessKey ID 是什么？
> 3. Secret Access Key 是什么？"

#### 方式 B：环境变量配置（推荐频繁使用）

提示用户配置环境变量（可以复用其他功能的配置）：

```bash
# 配置环境变量
export VOLCENGINE_ACCESS_KEY="你的AccessKeyId"
export VOLCENGINE_SECRET_KEY="你的SecretAccessKey"
```

## 使用方法

运行脚本查询连接地址：

```bash
python scripts/get_instance_endpoint.py --instance-id <实例ID>
```

## 脚本参数

脚本支持以下参数：

- `--region`: 区域，默认 `cn-guangzhou`
- `--instance-id`: 实例 ID（必须提供）
- `--access-key-id`: 访问密钥 ID（或环境变量 VOLCENGINE_ACCESS_KEY）
- `--secret-access-key`: 秘密访问密钥（或环境变量 VOLCENGINE_SECRET_KEY）

## 输出信息

查询成功后会返回：

- 实例 ID
- 区域
- 终端总数
- 每个终端的详细信息：
  - 终端 ID
  - 终端类型（Primary、Cluster 等）
  - 每个终端的连接地址：
    - 域名
    - 端口
    - IP 地址
    - 网络类型

## 示例

```bash
python scripts/get_instance_endpoint.py \
  --instance-id vedbm-xxx123456
```

## 输出示例

```
================================================================================
✅ 实例连接地址查询成功！
================================================================================
实例 ID: vedbm-xxx123456
区域: cn-guangzhou
终端总数: 2

📍 终端 1:
--------------------------------------------------------------------------------
  终端 ID: endpoint-abc123
  终端类型: Primary

  📡 连接地址:
    地址 1:
      域名: vedbm-xxx123456.rds.volcengine.com
      端口: 3306
      IP地址: 10.0.0.100
      网络类型: Private

📍 终端 2:
--------------------------------------------------------------------------------
  终端 ID: endpoint-def456
  终端类型: Cluster

  📡 连接地址:
    地址 1:
      域名: vedbm-xxx123456-cluster.rds.volcengine.com
      端口: 3306
      IP地址: 10.0.0.101
      网络类型: Private
--------------------------------------------------------------------------------
================================================================================
```

---

# 功能五：查看实例详情

## 使用流程

### 第一步：收集必要信息

当用户需要查看实例详情时，先检查是否有必要信息。如果没有，引导用户提供：

| 信息 | 必填 | 说明 |
|------|------|------|
| 实例 ID | ✅ | VEDBM 实例 ID |
| AccessKey ID | ✅ | 火山引擎访问密钥 ID |
| Secret Access Key | ✅ | 火山引擎秘密访问密钥 |

### 第二步：信息收集方式

#### 方式 A：对话引导（推荐首次使用）

询问用户：
> "好的，我来帮你查看 VEDBM 实例详情！需要你提供一些信息：
>
> 1. 实例 ID 是什么？
> 2. AccessKey ID 是什么？
> 3. Secret Access Key 是什么？"

#### 方式 B：环境变量配置（推荐频繁使用）

提示用户配置环境变量（可以复用其他功能的配置）：

```bash
# 配置环境变量
export VOLCENGINE_ACCESS_KEY="你的AccessKeyId"
export VOLCENGINE_SECRET_KEY="你的SecretAccessKey"
```

## 使用方法

运行脚本查询实例详情：

```bash
python scripts/describe_instance.py --instance-id <实例ID>
```

## 脚本参数

脚本支持以下参数：

- `--region`: 区域，默认 `cn-guangzhou`
- `--instance-id`: 实例 ID（必须提供）
- `--access-key-id`: 访问密钥 ID（或环境变量 VOLCENGINE_ACCESS_KEY）
- `--secret-access-key`: 秘密访问密钥（或环境变量 VOLCENGINE_SECRET_KEY）
- `--full`: 显示完整属性列表（调试用）

## 输出信息

查询成功后会返回：

**基本信息**

- 实例 ID
- 实例名称
- 实例状态
- 创建时间
- 项目名称

**规格信息**

- 节点规格
- 配置（CPU核数 + 内存）
- 节点数量
- 规格系列

**存储信息**

- 已用存储
- 存储计费类型

**网络信息**

- 区域
- 可用区
- VPC ID
- 子网 ID

**数据库信息**

- 数据库版本
- 内核版本
- 时区

**计费信息**

- 计费类型
- 计费状态
- 删除保护

**节点详情**

- 每个节点的 ID、类型、规格、可用区

## 示例

### 示例 1：查询实例详情

```bash
python scripts/describe_instance.py \
  --instance-id vedbm-xxx123456
```

### 示例 2：显示完整属性列表（调试用）

```bash
python scripts/describe_instance.py \
  --instance-id vedbm-xxx123456 \
  --full
```

## 输出示例

```
====================================================================================================
✅ VEDBM 实例详情查询成功！
====================================================================================================

📋 基本信息：
----------------------------------------------------------------------------------------------------
  实例 ID:        vedbm-4wuvdt3jhlce
  实例名称:      free
  实例状态:      Running
  创建时间:      2026-04-03T05:35:38Z
  项目名称:      default

💻 规格信息：
----------------------------------------------------------------------------------------------------
  节点规格:      vedb.mysql.g4.large
  配置:          4核 16GB
  节点数量:      2
  规格系列:      General

💾 存储信息：
----------------------------------------------------------------------------------------------------
  已用存储:      2.093 GiB
  存储计费类型:  PostPaid

🌐 网络信息：
----------------------------------------------------------------------------------------------------
  区域:          cn-guangzhou
  可用区:        cn-guangzhou-a
  VPC ID:        vpc-3f03n0s2v50qo72200s6jj8ni
  子网 ID:       subnet-11wfhusxgt05c40yrhczqa9cl

🗄️  数据库信息：
----------------------------------------------------------------------------------------------------
  数据库版本:    MySQL_8_0
  内核版本:      3.3.2.7
  时区:          UTC -01:00

💰 计费信息：
----------------------------------------------------------------------------------------------------
  计费类型:      PostPaid
  计费状态:      Normal
  删除保护:      disabled

🔧 节点详情：
----------------------------------------------------------------------------------------------------
  节点 ID                               类型           规格                        可用区
----------------------------------------------------------------------------------------------------
  vedbm-4wuvdt3jhlce-0                ReadOnly     vedb.mysql.g4.large       cn-guangzhou-a
  vedbm-4wuvdt3jhlce-1                Primary      vedb.mysql.g4.large       cn-guangzhou-a
====================================================================================================
```

---

# 功能六：升级实例规格

## 使用场景

1. **用户指定规格**：如果用户指定了规格，就按照用户指定的规格做变更
2. **自动升级**：如果用户没有指定规格，先查看当前的实例规格，然后默认按照CPU的规格升级一个等级
3. **不跨规格类型**：通用规格只能在通用规格内升级，独享规格只能在独享规格内升级
4. **最大规格提示**：如果没有办法升级，告知用户当前规格已经是最大的了无法升级
5. **超时处理**：如果升级任务10分钟还未执行完成，则告知用户通过控制台关注任务状态

## 使用流程

### 第一步：收集必要信息

当用户需要升级实例规格时，先检查是否有必要信息。如果没有，引导用户提供：

| 信息 | 必填 | 说明 |
|------|------|------|
| 实例 ID | ✅ | VEDBM 实例 ID |
| AccessKey ID | ✅ | 火山引擎访问密钥 ID |
| Secret Access Key | ✅ | 火山引擎秘密访问密钥 |
| 目标规格（可选） | ❌ | 不提供则自动升级一个等级 |

### 第二步：信息收集方式

#### 方式 A：对话引导（推荐首次使用）

询问用户：
> "好的，我来帮你升级 VEDBM 实例规格！需要你提供一些信息：
>
> 1. 实例 ID 是什么？
> 2. AccessKey ID 是什么？
> 3. Secret Access Key 是什么？
> 4. 目标规格是什么？（可选，不提供则自动升级一个等级）"

#### 方式 B：环境变量配置（推荐频繁使用）

提示用户配置环境变量（可以复用其他功能的配置）：

```bash
# 配置环境变量
export VOLCENGINE_ACCESS_KEY="你的AccessKeyId"
export VOLCENGINE_SECRET_KEY="你的SecretAccessKey"
```

## 规格类型说明

| 系列 | 说明 | 可用规格 |
|------|------|----------|
| **G4 系列**（通用型，默认） | 通用型 | 4c16g → 8c32g → 16c64g → 32c128g |
| **X4 系列**（标准型） | 标准型 | 4c16g → 8c32g → 16c64g → 32c128g → 64c256g |
| **X8 系列**（标准型X8） | 标准型X8 | 8c32g → 16c64g → 32c128g → 64c256g → 96c384g → 128c512g |
| **G8 系列**（通用型G8） | 通用型G8 | 16c64g |

**⚠️ 注意：不支持跨系列升级！**

## 使用方法

运行脚本升级实例规格：

```bash
python scripts/upgrade_instance_spec.py --instance-id <实例ID>
```

## 脚本参数

脚本支持以下参数：

- `--region`: 区域，默认 `cn-guangzhou`
- `--instance-id`: 实例 ID（必须提供）
- `--target-spec`: 目标规格（可选，不提供则自动升级一个等级）
  - 支持格式：`2c8g`、`4c16g`、`vedb.mysql.x4.large`
- `--access-key-id`: 访问密钥 ID（或环境变量 VOLCENGINE_ACCESS_KEY）
- `--secret-access-key`: 秘密访问密钥（或环境变量 VOLCENGINE_SECRET_KEY）

## 输出信息

升级成功后会返回：

- 实例 ID
- 原规格
- 新规格
- 规格代码
- 是否完成（如果10分钟内完成）

## 示例

### 示例 1：自动升级一个等级（推荐）

```bash
python scripts/upgrade_instance_spec.py \
  --instance-id vedbm-xxx123456
```

### 示例 2：指定目标规格（使用简写格式）

```bash
python scripts/upgrade_instance_spec.py \
  --instance-id vedbm-xxx123456 \
  --target-spec 4c16g
```

### 示例 3：指定目标规格（使用完整规格名）

```bash
python scripts/upgrade_instance_spec.py \
  --instance-id vedbm-xxx123456 \
  --target-spec vedb.mysql.x4.large
```

## 输出示例

### 自动升级成功

```
================================================================================
✅ VEDBM 实例规格升级成功！
================================================================================
实例 ID: vedbm-xxx123456
原规格: vedb.mysql.x2.large
新规格: 4核16GB
规格代码: vedb.mysql.x4.large
================================================================================
```

### 已经是最大规格

```
================================================================================
❌ VEDBM 实例规格升级失败！
================================================================================
错误信息: 当前规格 'vedb.mysql.x8.large' 已经是 X 系列的最大规格，无法继续升级
实例 ID: vedbm-xxx123456
================================================================================
```

### 等待超时（10分钟）

```
================================================================================
⏳ VEDBM 实例规格变更请求已提交
================================================================================
实例 ID: vedbm-xxx123456
原规格: vedb.mysql.x2.large
目标规格: 4核16GB
规格代码: vedb.mysql.x4.large

⚠️  注意: 规格变更请求已提交，但等待超时（10分钟）。请通过火山引擎控制台关注任务状态。
================================================================================
```

### 跨系列升级被拒绝

```
================================================================================
❌ VEDBM 实例规格升级失败！
================================================================================
错误信息: 不支持跨规格类型升级（当前: X 系列, 目标: G 系列）
实例 ID: vedbm-xxx123456
================================================================================
```

---

# 功能七：降级实例规格

## 使用场景

1. **用户指定规格**：如果用户指定了规格，就按照用户指定的规格做变更
2. **自动降级**：如果用户没有指定规格，先查看当前的实例规格，然后默认按照CPU的规格降级一个等级
3. **不跨规格类型**：通用规格只能在通用规格内降级，独享规格只能在独享规格内降级
4. **最小规格提示**：如果没有办法降级，告知用户当前规格已经是最小的了无法降级
5. **超时处理**：如果降级任务10分钟还未执行完成，则告知用户通过控制台关注任务状态

## 使用流程

### 第一步：收集必要信息

当用户需要降级实例规格时，先检查是否有必要信息。如果没有，引导用户提供：

| 信息 | 必填 | 说明 |
|------|------|------|
| 实例 ID | ✅ | VEDBM 实例 ID |
| AccessKey ID | ✅ | 火山引擎访问密钥 ID |
| Secret Access Key | ✅ | 火山引擎秘密访问密钥 |
| 目标规格（可选） | ❌ | 不提供则自动降级一个等级 |

### 第二步：信息收集方式

#### 方式 A：对话引导（推荐首次使用）

询问用户：
> "好的，我来帮你降级 VEDBM 实例规格！需要你提供一些信息：
>
> 1. 实例 ID 是什么？
> 2. AccessKey ID 是什么？
> 3. Secret Access Key 是什么？
> 4. 目标规格是什么？（可选，不提供则自动降级一个等级）"

#### 方式 B：环境变量配置（推荐频繁使用）

提示用户配置环境变量（可以复用其他功能的配置）：

```bash
# 配置环境变量
export VOLCENGINE_ACCESS_KEY="你的AccessKeyId"
export VOLCENGINE_SECRET_KEY="你的SecretAccessKey"
```

## 规格类型说明

| 系列 | 说明 | 可用规格 |
|------|------|----------|
| **G4 系列**（通用型，默认） | 通用型 | 4c16g ← 8c32g ← 16c64g ← 32c128g |
| **X4 系列**（标准型） | 标准型 | 4c16g ← 8c32g ← 16c64g ← 32c128g ← 64c256g |
| **X8 系列**（标准型X8） | 标准型X8 | 8c32g ← 16c64g ← 32c128g ← 64c256g ← 96c384g ← 128c512g |
| **G8 系列**（通用型G8） | 通用型G8 | 16c64g |

**⚠️ 注意：不支持跨系列降级！**

## 使用方法

运行脚本降级实例规格：

```bash
python scripts/downgrade_instance_spec.py --instance-id <实例ID>
```

## 脚本参数

脚本支持以下参数：

- `--region`: 区域，默认 `cn-guangzhou`
- `--instance-id`: 实例 ID（必须提供）
- `--target-spec`: 目标规格（可选，不提供则自动降级一个等级）
  - 支持格式：`2c8g`、`4c16g`、`vedb.mysql.x4.large`
- `--access-key-id`: 访问密钥 ID（或环境变量 VOLCENGINE_ACCESS_KEY）
- `--secret-access-key`: 秘密访问密钥（或环境变量 VOLCENGINE_SECRET_KEY）

## 输出信息

降级成功后会返回：

- 实例 ID
- 原规格
- 新规格
- 规格代码
- 是否完成（如果10分钟内完成）

## 示例

### 示例 1：自动降级一个等级（推荐）

```bash
python scripts/downgrade_instance_spec.py \
  --instance-id vedbm-xxx123456
```

### 示例 2：指定目标规格（使用简写格式）

```bash
python scripts/downgrade_instance_spec.py \
  --instance-id vedbm-xxx123456 \
  --target-spec 4c16g
```

### 示例 3：指定目标规格（使用完整规格名）

```bash
python scripts/downgrade_instance_spec.py \
  --instance-id vedbm-xxx123456 \
  --target-spec vedb.mysql.x4.large
```

## 输出示例

### 自动降级成功

```
================================================================================
✅ VEDBM 实例规格降级成功！
================================================================================
实例 ID: vedbm-xxx123456
原规格: vedb.mysql.x4.large
新规格: 4核16GB
规格代码: vedb.mysql.x4.large
================================================================================
```

### 已经是最小规格

```
================================================================================
❌ VEDBM 实例规格降级失败！
================================================================================
错误信息: 当前规格 'vedb.mysql.x4.large' 已经是 X4 系列的最小规格，无法继续降级
实例 ID: vedbm-xxx123456
================================================================================
```

### 等待超时（10分钟）

```
================================================================================
⏳ VEDBM 实例规格变更请求已提交
================================================================================
实例 ID: vedbm-xxx123456
原规格: vedb.mysql.x4.large
目标规格: 4核16GB
规格代码: vedb.mysql.x4.large

⚠️  注意: 规格变更请求已提交，但等待超时（10分钟）。请通过火山引擎控制台关注任务状态。
================================================================================
```

### 跨系列降级被拒绝

```
================================================================================
❌ VEDBM 实例规格降级失败！
================================================================================
错误信息: 不支持跨规格类型降级（当前: X 系列, 目标: G 系列）
实例 ID: vedbm-xxx123456
================================================================================
```

