cursor cli 执行 ETL 数据同步任务探索 接到不少有关数据同步的需求其中一个需求需要将10多张 mysql 表每天定时导入到 starrocks于是顺带写了一个小工具实现了快速批量同步表的功能手敲指令的工作变少了。不过前期测试这个工具的时候还是没少在命令行和 vscode 之间反复折腾刚好公司最近采购了一些 cursor 账号再加上了解到 cursor 有 cli 命令行模式之后就想到这个需求假如我不依赖其他代码和工具能让 cursor 直接完成整个数据同步需求吗那么本文就是从这样从一个简化版的需求入手但尝试把过程做得完善的 cursor cli 使用方式探索在正式开始任务之前我们需要先简单了解一下什么是 ETL以及 cursor cli 怎么安装ETLETL 可能是很多人接触大数据第一个了解到的概念。它的确是在大数据种类繁杂的任务中执行时间放在第一位的。ETL 负责把业务的原始数据按照一定的过滤规则和约定格式进行清洗和转换再通过工具和数据库接口导入到大数据体系的数据仓库中E: Extract, 从源表提取数据在这里你可以做数据筛选T: Translate, 数据在导入数仓之前进行的数据内容和格式的转换比如一个 json 格式的字符串字段业务只需要其中的一个键值就会在这个阶段进行提取L: Load, 数据最终写入到数仓的过程下图是 ETL 过程对应到现实中需要怎么做的4步曲cursor cliAI 时代最流行的就是 AI 辅助编程如下图在 cursor IDE 中直接提出需求让 AI 帮我们把基本的代码写好当然 IDE 并不是这期的主角而是 cursor cli 它是 cursor 的命令行运行模式可以直接在终端中给 cursor 发送指令去生成代码、修改代码、与操作系统进行交互、使用 mcp 等无需功能比较复杂的 IDE保持最纯净的和 AI 之间对话的方式这种模式非常适合执行有明确预期的任务。比如在 DevOps 流水线单测过程中修改 bug在镜像制作过程中安装特定组件以及接下来的数据完整同步的任务等cursor cli 的安装非常简单执行官方安装脚本即可# 安装 curl https://cursor.com/install -fsS | bash # 首次登录 # 注: 这个指令打印的链接不需要当前系统支持弹出浏览器把链接复制到外部浏览器打开也可以 ~/.local/bin/cursor-agent login # 开启上一个会话 ~/.local/bin/cursor-agent --resume会话id在退出时会显示恢复上一次会话:其他常用指令# 查看登录状态 ~/.local/bin/cursor-agent status # 退出登录 ~/.local/bin/cursor-agent logout # 查看本地支持的 mcp 列表 ~/.local/bin/cursor-agent mcp list # 使用特定模型 # 目前支持模型: composer-1, auto, sonnet-4.5, sonnet-4.5-thinking, opus-4.5, opus-4.5-thinking, gemini-3-pro, gemini-3-flash, gpt-5.2, gpt-5.1, gpt-5.2-high, gpt-5.1-high, gpt-5.1-codex, gpt-5.1-codex-high, gpt-5.1-codex-max, gpt-5.1-codex-max-high, opus-4.1, grok # --model: 设置模型名 # -p: print 输出结果之后结束会话 # --output-format: 设置输出格式: text / json ~/.local/bin/cursor-agent --model gpt-5.2 -p 查找当前项目的问题并修复 --workspace /opt/coding/go_common --output-format text这里我没有切换模型使用的是 cursor 默认的模型 composer-1后续我测试了 gpt-5 效果和默认模型差不多cursor 价格: 有14天的免费适用, 对普通用户来说 Pro 套餐足够了一个月100多元整体任务设计思路遵循着尽量让过程更完善的思路我们希望让 cursor做更多的事情因此整体任务的设计包括 DataX 安装、数据库安装和 ETL 数据同步三个部分一点点的准备工作也还是需要的在自己电脑我们可以通过 docker 启动一个 centos8 或者 ubuntu24 的容器或者公司有给你提供一个纯净的测试虚拟机也可以注: 不能用 centos7 因为内核版本较低不支持运行 cursor cli 中的一些 nodejs 库至少需要 centos8通过 cursor 辅助我们任务流程变成了下图:过程step 1: 安装 DataXDataX 是阿里开源的跨数据库批量数据同步工具它不涉及服务端所以它的安装过程是比较简单的我们先把它安装好help me install datax at /opt/modules, including basic environment一些关键日志:# 分析安装 datax 详细步骤 ⬢ To-do Working on 5 to-dos ☐ 创建 /opt/modules 目录 ☐ 安装 Java 环境JDK 1.8 ☐ 下载 DataX 安装包 ☐ 解压并配置 DataX ☐ 配置环境变量 # 安装目录、下载命令行工具检查 $ ls -la /opt/modules 2/dev/null || echo Directory does not exist 77s total 0 drwxr-xr-x 13 root root 173 Nov 21 23:50 . … truncated (13 more lines) · ctrlo to expand $ which wget curl 2/dev/null || echo Need to check download tools 77s /usr/bin/wget /usr/bin/curl … truncated (1 more line) · ctrlo to expand # 检查 java 是否安装 Checking Java installation (required for datax), then downloading and installing datax. $ java -version 21 | head -1 12s openjdk version 1.8.0_432 # 下载 datax $ cd /tmp wget --no-check-certificate -O datax.tar.gz https://datax-opensource.oss-cn-hangzhou.aliyuncs.com/202309/datax.tar.gz 21 | tail -5 183s 1639950K .......... .......... .......... .......... .......... 99% 8.75M 0s 1640000K .......... .......... ... 100% 11.0M2m38s … truncated (4 more lines) · ctrlo to expand # 校验安装是否成功 $ ls -lh /opt/modules/datax/job/ 21 | head -10 6.2s total 4.0K -rw-r--r-- 1 1001 1001 1.6K Aug 23 13:03 job.json … truncated (1 more line) · ctrlo to expand从日志可以看出 cursor 在安装组件任务上步骤比较“严谨”的特点:执行任务之前它会详细列出具体每一步会做什么包括完整的准备、安装和检查很清晰和标准在加上了需要安装基础环境的 prompt 说明之后运行 DataX 需要的python和JDK它都会装好也有一些小瑕疵:在 DataX 已经安装的情况下再次发送相同的 prompt还是要30s左右跑完因为它需要在系统执行ls、python bin/datax.py等指令先将指令的返回传给 cursor 的后台服务器再等待服务端的判断结果大部分耗时可能都在接口调用上了DataX 的官方下载地址 datax-opensource.oss-cn-hangzhou.aliyuncs.com 提供的其实不是最新的版本它的更新日期只到 202308但官方仓库在那之后还是有少量更新想用最新版本应该直接编译源码安装 mysql第二步是安装 mysql这里我顺便尝试让 cursor 把 root 密码和数据存储路径也修改一下help me install mysql at /opt/modules/mysql, start at 3306 port and set default root user password to Root888 and set data dir to /opt/data/mysql一些关键日志:# 分析详细步骤 ⬢ To-do Working on 7 to-dos ☐ 检查系统环境和现有 MySQL ☐ 创建安装目录和数据目录 ☐ 下载并安装 MySQL ☐ 配置 MySQL端口、数据目录 ☐ 初始化 MySQL 数据库 ☐ 设置 root 密码为 Root888 ☐ 启动 MySQL 服务并配置开机自启 # 下载 mysql 官方 linux 安装包 $ cd /opt/modules wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.37-linux-glibc2.12-x86_64.tar.xz -O mysql.tar.xz 21 | tail -15 35s # 基本配置 etc/my.cnf 27 [mysqld] # 基本配置 port 3306 datadir /opt/data/mysql socket /tmp/mysql.sock pid-file /opt/data/mysql/mysql.pid # 字符集 character-set-server utf8mb4 collation-server utf8mb4_unicode_ci # 解决依赖库缺少的问题 $ yum install -y libaio numactl-libs 21 | tail -20 66s (2/2): numactl-libs-2.0.12-13.el8.x86_64.rpm 161 kB/s | 36 kB 00:00 -------------------------------------------------------------------------------- … truncated (19 more lines) · ctrlo to expand # 初始化 mysql 并设置密码 $ /opt/modules/mysql/bin/mysqld --initialize-insecure --usermysql --datadir/opt/data/mysql --basedir/opt/modules/mysql 21 | tail -5 14s $ su - mysql -s /bin/bash -c /opt/modules/mysql/bin/mysqld_safe --defaults-file/etc/my.cnf --usermysql --datadir/opt/data/mysql --basedir/opt/modules/mysql /dev/null 21 sleep 5 16s # 完成安装 mysql -u root -pRoot888安装完成后查看进程:安装 mysql 是所有阶段中做得最好的一步:首先是版本选择的 8.0.37 是去年5月的版本对 mysql 而言还是比较新的系统中诸如 libaio 、libnuma、ncurses 等依赖库缺少的问题它都能解决设置 root 密码需要先启动 mysql 初始化之后再设置这个步骤也是完全正确/etc/my.cnf 中还设置了和慢查询、字符集、最大连接数等在生产环境常用的优化配置安装 starrocks接着我们安装大数据体系中的实时数仓服务 starrocks。starrocks 的安装就明显比前面两个安装要复杂一些了所以在 prompt 中我们也需要写得更详细help me to install starrocks at /opt/modules/starrocks, following the steps 1. download starrocks version 3.3.20 from https://releases.starrocks.io/starrocks/StarRocks-3.3.20-centos-amd64.tar.gz 2. install to /opt/modules 3. set fe mysql port set to 19030 4. default root user password to RootStar666 5. register be to fe, be ip use local ipv4 ip and port use 9050 6. start fe and be # 注: 如果你是用 ubuntu 系统需要把下载地址改成 https://releases.starrocks.io/starrocks/StarRocks-3.3.20-ubuntu-amd64.tar.gz一些关键日志:# 分析安装步骤 ⬢ To-do Working on 7 to-dos ☐ 下载 StarRocks 3.3.20 版本 ☐ 解压并安装到 /opt/modules/starrocks ☐ 配置 FE (MySQL 端口 19030, root 密码 RootStar666) ☐ 配置 BE (端口 9050) ☐ 启动 FE 并初始化 ☐ 注册 BE 到 FE ☐ 启动 BE 并验证 # 设置 fe 的配置 │ opt/modules/starrocks/fe/conf/fe.conf 1 -1 │ │ http_port 8030 │ rpc_port 9020 │ - query_port 9030 │ query_port 19030 │ edit_log_port 9010 # 设置 root 密码并注册 be $ mysql -h 127.0.0.1 -P 19030 -uroot -e ALTER USER root% IDENTIFIED BY RootStar666; 21 | grep -v Warning exit 1 • 7.4s $ BE_IP$(hostname -I | awk {print $1}) BE_PORT9050 echo 注册 BE: ${BE_IP}:${BE_PORT} mysql -h127.0.0.1 -P19030 -uroot -pRootStar666 -e ALTER SYSTEM ADD BACKEND ${BE_IP}:${BE_PORT}; 21 | grep -v Warning exit 1 • 5.6s $ sleep 15 mysql -h 127.0.0.1 -P 19030 -uroot -pRootStar666 -e SHOW BACKENDS\G 21 | grep -E (Host|Port|Alive|SystemDecommissioned) | head -8 21s HeartbeatPort: 9060 BePort: -1 # 完成安装 mysql -h127.0.0.1 -P19030 -uroot -pRootStar666安装完成后的进程以及查看 be 注册情况:体会:第一次安装时我故意没有告诉它安装包下载地址它先尝试从官方下载 3.1.8 的版本但可能是这个版本比较早了从官方下载返回文件不存在。然后它就继续尝试从 apache repo 去下载但是这一步就明显错误了starrocks 项目并不在 apache 组织下所以这才有了上面的 prompt我需要把确定能下载到安装包的版本号告诉它才行starrocks 的主要服务包括负责处理查询请求的fe和 负责数据存储的be完整安装也包括这两个组件的启动、注册和状态检查因此 cursor 在安装时的过程比较复杂时间也更长be 注册时fe 会检查注册指令传入的 be ip 和 be 上报的节点的 ipv4 ip 是否一致若不一致会报FE saved address not match backend address所以在 be 的注册指令add backend必须用本机的 ipv4 ip 去注册。但关于这点 cursor 是不知道的它会用127.0.0.1去注册导致 be 无法激活和写入数据。因此这个细节也需要在 prompt 中说明在 mysql 的配置文件my.cnf可以看到一些生产级别的优化但是 starrocks 的 fe 和 be 配置中就没有了mysql 中插入模拟电商场景的数据如果你想测试一个数据库支持的函数、查询性能等先把数据制造出来写到数据库中往往是重要的第一步。常见的造数据方法有两个: 通过脚本或工具生成纯随机的文本、数字等比如 flink 的 datagen 或者 seatunnel 的 FakeSource第二种是直接使用一些网站提供的数据集比如 kaggle 这里提供了比较真实的 csv 格式数据你可以用脚本导入到数据库中再进行测试