# 使用示例 ## 自然语言触发 ### 示例 1:同步 dmp_serp **用户:** ``` 同步准生产 dmp_serp 的表结构到 VPS ``` **技能响应:** ``` 开始执行表结构对齐... 源数据库:准生产 (100.115.195.188:50036) dmp_serp 目标数据库:VPS (101.34.227.188:3306) dmp_serp [1/5] 验证数据库连接... ✓ 源数据库连接成功 ✓ 目标数据库连接成功 [2/5] 获取源数据库表列表... 找到 45 张表 [3/5] 对比并生成脚本... 处理表:dmp_om_productinfo → 目标表已存在,对比结构差异... → 发现结构差异,生成 ALTER 语句 ✓ ALTER TABLE 成功 处理表:dmp_om_productinfo_cost → 目标表不存在,执行 CREATE TABLE ✓ CREATE TABLE 成功 ... [4/5] 生成 README.md... [5/5] 记录到记忆文件... ============================================================ 执行完成! ============================================================ 总表数:45 成功:45 失败:0 脚本目录:/home/yangxuan/codes/xuan-sql/scripts/20260814 记忆文件:/home/yangxuan/.openclaw/workspace-sql/memory/2026-08-14.md ============================================================ ``` --- ### 示例 2:同步 dmp_smdm **用户:** ``` 同步准生产 dmp_smdm 的表结构到 VPS ``` **执行:** 同上,目标库为 `dmp_smdm` --- ## 命令行直接执行 ### 基本用法 ```bash cd /home/yangxuan/.openclaw/workspace-sql/skills/table-alias # 同步 dmp_serp ./sync_tables.sh dmp_serp # 同步 dmp_smdm ./sync_tables.sh dmp_smdm # 指定不同的目标库名(少见场景) ./sync_tables.sh dmp_serp dmp_serp_dev ``` --- ## 配置文件修改 ### 添加新的源数据库 编辑 `~/.openclaw/workspace-sql/.db-sync-config.yaml`: ```yaml sources: - name: 准生产 host: 100.115.195.188 port: 50036 user: witsoftd password_env: MYSQL_PWD_WIT readonly: true # 添加新的源 - name: 生产备份 host: 47.99.209.185 port: 3306 user: backup_user password_env: MYSQL_PWD_BACKUP readonly: true ``` ### 添加新的目标数据库 ```yaml targets: - name: VPS host: 101.34.227.188 port: 3306 user: root password_env: MYSQL_PWD_SQL readonly: false blacklist: - ruoyi-vue-pro # 添加新的目标 - name: 本地测试 host: 127.0.0.1 port: 3306 user: root password_env: MYSQL_PWD_LOCAL readonly: false blacklist: - mysql - sys ``` --- ## 输出文件示例 ### SQL 脚本文件 `20260814/dmp_serp__dmp_om_productinfo__struct.sql`: ```sql -- ============================================================ -- 表结构同步脚本:dmp_om_productinfo -- 源:准生产 (100.115.195.188:50036) -- 目标:VPS (101.34.227.188:3306) dmp_serp -- 生成时间:2026-08-14 14:00:00 -- 操作:ALTER TABLE(结构差异) -- ============================================================ USE dmp_serp; -- 结构差异: -- - 添加字段:cust_product_spec -- - 添加字段:invoice_status -- - 删除字段:creator_user_id ALTER TABLE dmp_om_productinfo ADD COLUMN cust_product_spec varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '客户产品规格' AFTER invoice_status; ALTER TABLE dmp_om_productinfo ADD COLUMN invoice_status varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT 'Y' COMMENT 'Y/N 是否开票' AFTER order_change_flag; ALTER TABLE dmp_om_productinfo DROP COLUMN creator_user_id; -- ============================================================ -- 验证 -- ============================================================ -- SHOW CREATE TABLE dmp_om_productinfo\G ``` ### README.md ```markdown # 表结构同步脚本 - 20260814 **源:** 准生产 `100.115.195.188:50036` `dmp_serp` **目标:** VPS `101.34.227.188:3306` `dmp_serp` **生成时间:** 2026-08-14 14:00:00 **执行状态:** ✅ 已完成 ## 脚本清单 | 序号 | 脚本文件 | 操作类型 | 状态 | 说明 | |------|---------|---------|------|------| | 1 | `dmp_serp__dmp_om_productinfo__struct.sql` | ALTER | ✅ | 3 处变更 | | 2 | `dmp_serp__dmp_om_productinfo_cost__struct.sql` | CREATE | ✅ | 新建表 | | ... | ... | ... | ... | ... | ## 执行结果 - 总表数:45 - 成功:45 - 失败:0 ## 验证命令 ```sql -- 检查表列表 SHOW TABLES LIKE 'dmp_serp%'; -- 检查表结构 SHOW CREATE TABLE dmp_om_productinfo\G ``` ``` --- ## 常见问题 ### Q1: 密码环境变量未设置 **错误:** ``` 错误:密码环境变量未设置 请确保已设置:MYSQL_PWD_WIT 和 MYSQL_PWD_SQL ``` **解决:** ```bash # 在 ~/.bashrc 或 ~/.zshrc 中添加 export MYSQL_PWD_WIT=o2byaCkBvF1Y8S2L export MYSQL_PWD_SQL=5gynj20J # 重新加载 source ~/.bashrc # 或 source ~/.zshrc ``` --- ### Q2: 表数量超过阈值 **提示:** ``` 表数量超过 50 张(当前:80),是否继续?[y/N] ``` **解决:** 输入 `y` 继续,或按 `Ctrl+C` 取消 --- ### Q3: ALTER TABLE 失败 **错误:** ``` 处理表:dmp_om_productinfo → 发现结构差异,生成 ALTER 语句 ✗ ALTER TABLE 失败(继续执行下一个表) ``` **原因:** 可能是字段类型冲突、有 NULL 值等 **解决:** 1. 查看生成的 SQL 脚本 2. 手动修复数据(如更新 NULL 值) 3. 重新执行脚本 --- ### Q4: 连接超时 **错误:** ``` 错误:无法连接到源数据库(准生产) ``` **解决:** 1. 检查 Windows 端口转发是否运行 2. 检查防火墙设置 3. 验证密码是否正确 --- ## 相关文档 - [SKILL.md](SKILL.md) - 技能详细说明 - [../.db-sync-config.yaml](../.db-sync-config.yaml) - 配置文件 - [sync_tables.sh](sync_tables.sh) - 执行脚本