多表备份+条件筛选这种场景,多人用 mysqldump 时候容易踩坑,是一加上关联条件就报错。其实你只要掌握一点技巧,起来也挺顺手的。我最近刚整理了一个方法,用 --where 一张张筛数据,再配合子查询,既灵活又不容易出错,适合数据量不算大的导出任务。

mysqldump 的基础命令还算好记,mysqldump -u root -p 后跟数据库和表名就行,输出路径记得加上。多个表直接列就可以,挺直观。想备份某几条记录,用 -w 加上条件语句就能搞定。

重点是别想着直接写多表关联的条件-w 里面,那肯定出问题。因为 mysqldump 只对一张表执行筛选逻辑,你写再多条件都白搭,直接报“未知列”错。想,只能绕个弯子。

我建议的办法是,先把主表的数据筛出来,比如用 cust_id in (...) 过滤一轮,子表用 IN (SELECT ...) 再捞一次,这样导出结果更精准。哦对了,还有个坑点,执行子查询的时候记得加上 --skip-add-locks,不然容易遇到锁表失败。

这个方法适合你要导出多个逻辑相关的表,又控制一下数据量的情况。用得熟练的话,维护数据、测试导出都能挺高效的。如果你对 MySQL 热备感兴趣,也可以看看 XtraBackup 那篇,讲得还不错。

如果你经常用 mysqldump 搞数据导出,建议把这招记下来,省时省力还不出错。