从零打通 MySQL → DataX → Doris:Windows 11 + Docker 本地环境搭建全记录

发布时间:2026/6/29 20:11:07

从零打通 MySQL → DataX → Doris:Windows 11 + Docker 本地环境搭建全记录 一个 Java 后端开发的数据仓库入门实战笔记。一、背景公司用 DataX Doris 搭数据仓库。我只写过 SpringBoot对大数据这套东西完全陌生。花了一个周末把 MySQL → DataX → Doris 的第一条同步链路跑通了记录一下过程给同样背景的人参考。二、这些东西分别是干什么的1. MySQL 和 Doris 的分工MySQL 管业务下单、付款Doris 管分析报表、排行。MySQL 擅长单次少量行的增删改查。当老板要看上个月各地区销售额排行一条 SQL 要扫几百万行MySQL 跑不动还会拖慢正常的下单接口。Doris 就是为这种扫描大量数据做汇总的场景设计的。2. 数据怎么从 MySQL 到 Doris数仓有一套标准的加工流水线叫 ETL抽取→转换→加载MySQL 业务表 → DataX 搬运 → Doris 原样落表ODS层→ SQL 清洗DWD层→ SQL 聚合DWS层→ 报表查询各层职责ODS操作数据层源表原样搬过来不改DWD明细数据层清洗、去重、关联DWS汇总数据层按维度预聚合按天/按区域的销售额汇总ADS应用数据层直接给报表用的最终结果表DataX 在这条链里只做一件事搬运。从 A 读到内存写到 B不改数据。配置一个 JSON 文件指定 reader从哪读和 writer往哪写就行。三、环境搭建1. 总体架构Windows 11 宿主机 ├── Docker Desktop │ ├── mysql-learn (MySQL 8.0, 端口 3306) │ ├── doris-fe (Doris 前端节点, 端口 9030) │ └── doris-be (Doris 后端节点, 端口 8040) └── DataX (本机 Python 3.8 启动)所有容器在一个自定义 Docker 网络datax-net里互相用容器名通信。DataX 跑在宿主机上通过localhost:3306和localhost:9030连数据库。2. 启动 MySQLdocker network create--subnet172.19.0.0/16 datax-net docker run-d--name mysql-learn--network datax-net -e MYSQL_ROOT_PASSWORDroot123 -e MYSQL_DATABASEtest_db -p 3306:3306 mysql:8.03. 启动 Doris FE 和 BEDoris 分两种节点FE管理调度和 BE存储计算。学习环境各一个就够了。# FEdocker run-d--name doris-fe--network datax-net--ip 172.19.0.10 -e FE_SERVERSfe1:172.19.0.10:9010-e FE_ID1 -p 8030:8030-p 9030:9030 apache/doris:fe-2.1.9# BEdocker run-d--name doris-be--network datax-net--ip 172.19.0.4 -e FE_SERVERSfe1:172.19.0.10:9010-e BE_ADDR172.19.0.4:9050-p 8040:8040 apache/doris:be-2.1.9关键固定 IP。容器重启后 IP 会变BE 失联排查很麻烦。启动后等 30 秒验证 BE 存活docker exec doris-fe mysql-h 127.0.0.1-P 9030-uroot -eSHOW BACKENDS\GAlive: true即可。4. 安装 DataXDataX 是 Python Java 跑的。官方提供编译好的压缩包解压即用。坑点Python 3.10 不兼容。DataX 的启动脚本用了imp模块Python 3.12 已彻底移除。另装一个 Python 3.8不改系统 PATH启动时指定完整路径C:\Python38\python.exedatax\bin\datax.py job\job.json四、打通第一条链路1. 建表MySQLCREATETABLEorders(idBIGINTAUTO_INCREMENTPRIMARYKEY,order_noVARCHAR(32)NOTNULL,user_idBIGINTNOTNULL,productVARCHAR(100)NOTNULL,amountDECIMAL(10,2)NOTNULL,regionVARCHAR(20)NOTNULL,statusTINYINTDEFAULT0,create_timeDATETIMEDEFAULTCURRENT_TIMESTAMP);INSERTINTOorders(...)VALUES(...);-- 插 10 条测试数据DorisCREATETABLEorders(idBIGINT,order_noVARCHAR(32),user_idBIGINT,productVARCHAR(100),amountDECIMAL(10,2),regionVARCHAR(20),statusTINYINT,create_timeDATETIME)DUPLICATEKEY(id)DISTRIBUTEDBYHASH(id)BUCKETS4PROPERTIES(replication_num1);注意学习环境只有 1 个 BEreplication_num必须设 1Doris 默认 3 会报错。2. DataX 任务 JSON{job:{setting:{speed:{channel:1}},content:[{reader:{name:mysqlreader,parameter:{username:root,password:root123,connection:[{jdbcUrl:[jdbc:mysql://localhost:3306/test_db],table:[orders]}],column:[*]}},writer:{name:mysqlwriter,parameter:{username:root,password:root123,writeMode:insert,connection:[{jdbcUrl:jdbc:mysql://localhost:9030/test_db?useServerPrepStmtsfalse,table:[orders]}],column:[*]}}}]}}这里有一个反直觉的地方writer 用的是mysqlwriter不是doriswriter。因为 Doris 兼容 MySQL 协议DataX 直接用 JDBC 往 9030 端口写就行。useServerPrepStmtsfalse必须加Doris 不支持 MySQL 的预处理语句。3. 执行C:\Python38\python.exedatax\bin\datax.py mysql_to_doris_orders.json日志末尾看到读写失败总数 : 0就通了。五、踩过的坑1. Docker 内网 IP 宿主机不通这是最大的坑绕了最久。DataX 如果用doriswriter它会通过 FE 获取 BE 地址然后直接 HTTP 连 BE8040 端口写数据。BE 注册的地址是 Docker 内网 IP172.19.0.4宿主机 Windows 根本连不上。试过 DataX 也放 Docker 里跑——但 Docker Hub 上的 DataX 镜像beginor/datax不带doriswriter插件。换datax_web镜像登录卡了半天进去后发现也没插件。自己挂载插件又遇到 httpclient jar 版本冲突。最终解决方案不用 doriswriter用 mysqlwriter。Doris 本身就是 MySQL 协议DataX 通过 JDBC 直接 INSERT完全不需要走 Stream Load。2. Python 版本坑Python 3.14 跑 DataX 直接报错。另装 Python 3.8不改全局 PATH启动时指定路径即可。3. PowserShell 编码DataX 输出 UTF-8PowerShell 默认 GBK中文日志乱码。加上这行[System.Console]::OutputEncoding [System.Text.Encoding]::UTF84. Windows 防火墙IDEA 连 Docker 里的 MySQL 超时。不关防火墙只开放端口New-NetFirewallRule-DisplayNameMySQL 3306-Direction Inbound-Protocol TCP-LocalPort 3306-Action Allow5. MySQL 8.0 认证JDBC 驱动和caching_sha2_password不兼容ALTERUSERroot%IDENTIFIEDWITHmysql_native_passwordBYroot123;6. Doris 容器重启丢数据Docker 容器没挂 volume重启后建过的库表全没了。学习阶段忍了生产环境必须做持久化。六、总结datax-learn/ ├── datax/ # DataX 解压目录 ├── jobs/ │ └── mysql_to_doris_orders.json ├── docs/ │ └── stage1-environment-setup.md └── LEARNING_PLAN.md作为一个只写过 Java 的后端第一天把三个组件MySQL、DataX、Doris串通感触最深的是大数据工具的很多问题不是技术难而是配置多、厂商杂、网络隔离要自己摸索。把这条路走通了后面学 DataX 的增量同步、Doris 的数据模型和分区心里就有底了。

相关新闻