mysqldump 排除表是什么
--ignore-table 让备份时跳过指定的表:access_log、tmp_cache、按月分的历史归档表这类体积大又不需要备份的表,排除后 dump 明显变小、耗时明显缩短。它必须写成「库名.表名」,一张表一条参数,重复出现即可排除多张,不支持通配符。
基本信息
| 适用版本 | mysqldump 全系列(MySQL 5.7 / 8.0 客户端) |
|---|---|
| 语法 | --ignore-table=db.table(必须带库名) |
| 多表 | 每条排除一张表,参数可重复出现 |
| 通配符 | 不支持,无法写成 appdb.log_* |
| 生成方式 | 用 information_schema 查表名拼出参数列表 |
| 替代手段 | --tables 只导出白名单表;--where 做行级过滤 |
典型使用场景
- 全库备份时跳过大日志表,把备份窗口压到可接受范围
- 跳过缓存表与临时表:这些表数据可从上游重建,备份无意义
- 跳过按月分表的历史归档:单独用物理备份或归档策略处理
- 导出跨库汇总数据时排除某个库的系统辅助表
- 缩小传给测试环境的 dump 体积,只保留业务核心表
排除大日志表
排除大日志表
# 每条 --ignore-table 排除一张表,必须带库名
mysqldump -uroot -p --single-transaction \
--ignore-table=appdb.access_log \
--ignore-table=appdb.tmp_cache \
--ignore-table=appdb.msg_archive_2026 \
--databases appdb > appdb_no_logs.sql
# 导出后核对实际包含的表,确认排除生效
mysqldump -uroot -p appdb --no-data | grep '^CREATE TABLE'生成排除参数列表
生成排除参数列表
-- 查出需要排除的表,直接拼成命令行参数
SELECT CONCAT('--ignore-table=', table_schema, '.', table_name) AS opt
FROM information_schema.tables
WHERE table_schema = 'appdb'
AND (table_name LIKE 'log\_%' OR table_name LIKE 'tmp\_%' OR table_name LIKE '%\_archive\_%')
ORDER BY table_name;同类参数与区别
| 参数 | 粒度 | 说明 |
|---|---|---|
| --ignore-table | 表(排除) | 写「库.表」,无通配符,可重复 |
| --tables | 表(白名单) | 只导出后面列出的表,等价于反向做法 |
| --no-data | 结构 | 只导建表语句,不导数据 |
| --where | 行 | 按条件过滤行,对所有目标表生效 |
| --all-databases | 全部库 | 与排除参数同用时逐库对照,注意库名大小写 |
排除清单要和业务确认:被忽略的表若在恢复时被应用访问,会表现为「表不存在」或数据为空;建议把排除清单写进备份脚本注释并纳入变更评审。
表名大小写敏感(Linux 上默认区分大小写):排除项与实际表名不一致时该表仍会被导出,备份完成后用 grep 'CREATE TABLE' 或 SHOW TABLES 核对实际包含的表清单,别只看命令是否报错。