--ignore-table 是跳过单个大表最直接方式,需用 db_name.table_name 格式且可多次使用;漏写库名或大小写错误会导致静默失效;表名含短横线无需转义但须完全匹配。

mysqldump 用 --ignore-table 跳过单个大表最直接
如果只有一两个明显拖慢导出的表(比如日志表、历史归档表),--ignore-table 是最快捷的方式。它接受 db_name.table_name 格式,且可多次使用。
常见错误是漏写数据库名,导致命令静默失效——mysqldump 不报错,但表依然被导出。务必确认当前操作的库名,大小写也要一致(尤其在 Linux 环境下)。
mysqldump -u root -p myapp --ignore-table=myapp.audit_log --ignore-table=myapp.big_history > dump.sql- 不能写成
--ignore-table=audit_log,否则无效 - 若表名含特殊字符(如短横线),无需额外转义,但需确保实际表名拼写完全匹配
批量排除多个表得靠 shell 脚本拼接 --ignore-table
当要跳过的表有十几张,手动写一堆 --ignore-table 容易出错且难维护。更可靠的做法是先查出目标表名,再动态生成参数。
注意:MySQL 8.0+ 的 INFORMATION_SCHEMA.TABLES 默认不包含临时表,但如果你的“大表”是 MEMORY 或 TEMPORARY 类型,--ignore-table 对它们无效——这类表本来就不会被 mysqldump 导出。
- 用 SQL 查出所有大于 1GB 的表:
SELECT CONCAT(TABLE_SCHEMA, '.', TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES WHERE DATA_LENGTH > 1024*1024*1024 AND TABLE_SCHEMA = 'myapp'; - 配合
xargs或循环拼接参数:mysql -Nse "SELECT CONCAT('--ignore-table=', TABLE_SCHEMA, '.', TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES WHERE ..." | xargs mysqldump -u root -p myapp > dump.sql - 避免管道中密码泄露:改用配置文件或
MYSQL_PWD环境变量
--skip-triggers 和 --skip-routines 能间接提速,但和排除表无关
有人误以为加了这些参数就能“跳过大对象”,其实不然。触发器、存储过程本身不占导出体积主体,除非它们内部引用了超大表的定义(极少见)。真正影响速度的是数据页读取和网络传输,核心还是减少 SELECT * 的范围。
如果你导出后还要在目标库重建触发器或函数,记得单独导出它们:mysqldump -u root -p --no-data --triggers --routines myapp,否则 --skip-triggers 会导致这部分逻辑丢失。
-
--skip-triggers只跳过触发器定义,不影响数据导出速度 -
--skip-routines同理,对大表迁移无加速效果 - 真正影响性能的是
--single-transaction(InnoDB)是否启用,它决定是否加全局读锁
排除表后仍慢?检查 --max-allowed-packet 和网络缓冲
跳过了大表,但导出还是卡在某个位置,大概率不是表的问题,而是客户端或服务端的包大小限制触发了分片重传。特别是当剩余表里有 LONGTEXT 或 LONGBLOB 字段时,单行可能突破默认的 4MB 限制。
错误现象通常是导出中断并报错:Got a packet bigger than 'max_allowed_packet' bytes。这个错误不会因为跳过某张表就消失——只要剩下任意一行超长,就会触发。
- 导出时显式加大限制:
mysqldump --max-allowed-packet=512M -u root -p myapp --ignore-table=myapp.big_history > dump.sql - 服务端也要同步调高:
SET GLOBAL max_allowed_packet = 536870912;(需 SUPER 权限) - 如果走远程连接,中间代理(如 ProxySQL、HAProxy)也可能截断大包,需一并检查
排除大表只是迁移优化的第一步;真正卡点往往藏在单行长度、字符集转换开销、或客户端内存缓冲上。动手前先 SELECT COUNT(*) 和 AVG(LENGTH(blob_col)) 看看剩下字段的真实分布,比盲目加参数更有效。


















