--ignore-table参数必须写全库名和表名(如myapp.log_action),区分大小写,不支持通配符;排除多表需重复多次该参数;仅对基表生效,对视图、临时表无效;验证需grep备份文件确认。

mysql dump 用 --ignore-table 排除单个日志表
直接生效,但必须写全库名和表名,格式是 database_name.table_name。比如日志表叫 log_action,在 myapp 库里,就得写成:
mysqldump -u root -p myapp --ignore-table=myapp.log_action > backup.sql
常见错误是只写表名(--ignore-table=log_action)或漏掉库名,这时参数会被忽略,备份里依然包含该表。
- 一个
--ignore-table只能排除一张表;要排除多张,得重复写多次 - 大小写敏感:如果表名实际是
Log_Action,写成log_action就无效 - 不能用通配符,
--ignore-table=myapp.log_%不起作用
排除多个日志表时怎么写参数
不能合并、不能用逗号分隔,必须每个表单独一个 --ignore-table。例如要跳过 myapp.log_error、myapp.log_access 和 myapp.audit_log:
mysqldump -u root -p myapp \ --ignore-table=myapp.log_error \ --ignore-table=myapp.log_access \ --ignore-table=myapp.audit_log \ > backup.sql
写成一行也行,但参数顺序无关,只要每个都带完整 db.table 格式。漏掉任意一个,对应表就会被导出。
- 如果日志表分散在不同库,要分别对每个库执行
mysqldump,--ignore-table不跨库生效 - 脚本中拼接参数时,注意 shell 变量未展开或空格截断问题,建议用数组或逐行追加
为什么 --ignore-table 对视图或临时表无效
这个参数只作用于基表(base table),不匹配视图(VIEW)、临时表(TEMPORARY TABLE)或系统表(如 mysql.* 下的表)。如果你的“日志表”其实是基于 log_event 的视图,那它仍会出现在备份里——因为 mysqldump 导出的是视图定义,不是数据。
- 检查对象类型:运行
SELECT TABLE_TYPE FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='myapp' AND TABLE_NAME='log_view'; - 若确实是视图,需改用
--ignore-table排除其底层基表,或手动从 SQL 文件中删掉CREATE VIEW段 - 临时表本来就不会被
mysqldump扫描,无需额外处理
备份后验证是否真排除了日志表
别只信命令没报错。最简单的验证方式是 grep 表结构定义:
grep '^CREATE TABLE.*log_error' backup.sql
如果返回空,说明排除成功;如果有输出,就说明 --ignore-table 没生效。这时候要回头检查三点:
- 表名和库名是否完全匹配(包括下划线、大小写、反引号)
- 执行命令时连接的是否是预期数据库(
-D myapp或命令行末尾指定库名) - 是否误用了
--exclude-table(不存在的参数,会被静默忽略)
真正容易被忽略的是字符集与排序规则导致的隐式大小写转换——比如库启用了 lower_case_table_names=1,但你在参数里写了大写字母,就可能失效。











