是,mydumper默认单线程导出,必须显式指定-t参数(如-t 4)并配合--rows或--chunk-filesize才能对单张大表分片并行读取,否则仍为全表顺序扫描。
mydumper 能显著加快百万级以上 MySQL 表的导出速度,但默认配置下它不自动启用多线程压缩或并行写入,直接用会卡在单线程瓶颈上。
mydumper 导出慢,是不是没开 -t 参数?
mydumper 默认只用 1 个线程导出所有表,即使加了
(jobs)也无效——
控制的是「并发导出多少张表」,而
才控制「单张表内部切分多少线程读取」。百万级单表必须显式指定
,否则仍为全表顺序扫描。
:对一张大表按主键范围切分成 4 段,并行 SELECT
必须配合
或
使用,否则
不生效
若表无主键或唯一索引,
会被忽略,退化为单线程
导入时
mysql
dump 的 source 命令太慢,换 myloader 为什么还卡住?
myloader 是专为 mydumper 输出设计的并行导入工具,但它默认只开 4 个线程(
),且每线程默认禁用 autocommit。实际导入速度取决于目标库的 I/O 和事务提交频率。
务必加
(根据 CPU 核数和磁盘 IO 调整,8–32 之间较稳)
必须加
,否则 binlog 写入会拖慢 3–5 倍
导入前在目标库执行
和
,否则唯一/外键校验吃 CPU
myloader 不支持跳过已存在表,重复导入会报错,需手动
或先清空
mydumper 导出文件太多,磁盘 inode 占满怎么办?
mydumper 按表+chunk 切分,一张千万行的表开启
可能生成上百个
文件,小文件密集写入容易打爆 ext4 的 inode 限额(尤其 Docker 容器或某些云盘)。
MySQL(Linux)
MySQL 9.6.0是面向Linux平台的2026年创新版本,核心架构迎来重大革新。其将外键约束与级联操作从InnoDB引擎层上移至SQL层,确保所有数据变更均被完整记录至Binlog,彻底解决了CDC(变更数据捕获)与主从复制中的数据不一致难题。此外,该版本引入container_aware启动选项以原生适配容器环境,并对审计日志进行了组件化重构,为追求极致数据一致性与云原生体验的开发者提供了全新选择。
下载
用
(单位 MB)限制单文件大小,减少文件总数
避免
设得太小(如 10000),否则 chunk 过碎;建议从 100000 起调
导出后用
打包再传输,既省 inode 又压缩体积
检查
,inode 使用率超 90% 时,
旧 dump 目录比调优更有效
导出数据一致性怎么保障?--single-transaction 不起作用?
mydumper 的
仅对 InnoDB 表生效,且要求全局事务隔离级别为
。如果源库开了
且有长事务未提交,导出仍可能看到部分新数据或被阻塞。
导出前执行
,确认无运行超 30 秒的事务
对 MyISAM 表,
无效,必须用
(停写)或接受非一致性快照
若源库启用了 GTID,加
避免 GTID 冲突,结构单独导
导出完成后立刻校验
(需提前安装 mydumper-check 工具)
真正卡点不在工具选型,而在是否意识到:mydumper 的线程模型是「表级并行 + 表内分片」两级控制,漏掉任意一级参数(
或
)都会回归单线程;而导入端的 binlog、foreign key、autocommit 三者任一未关,速度就掉一半。
-j-j-t-t-t 4--chunk-filesize--rows-t-t-t 4-t 16--disable-binlogSET FOREIGN_KEY_CHECKS=0SET UNIQUE_CHECKS=0DROP TABLE-t 8.sql--chunk-filesize=256--rowstar -cf dump.tar *.sqldf -irm -f--single-transactionREPEATABLE READread_only=OFFSELECT TRX_ID, TRX_STARTED FROM INFORMATION_SCHEMA.INNODB_TRX ORDER BY TRX_STARTED LIMIT 1--single-transaction--lock-all-tables--skip-triggers --skip-events --no-schemasmydumper --check-j-t