mysqldump多表带WHERE子句导出报1054未知列错误如何解决
问题原因
mysqldump的--where(简写为-w)参数是全局参数,不支持跟在表名后单独为单表指定筛选规则:同一条命令中如果多次传入--where,最后一次传入的条件会覆盖之前所有的设置,最终统一应用到本次要导出的所有表上。
你执行的命令中,最后一次传入的where条件是用date字段做时间筛选,这个条件会被强制套用到medical_voucher表的导出查询中,但该表不存在date字段,因此触发1054未知列错误。
修正方案
mysqldump原生不支持单表单where规则的多表一次性导出,根据实际场景选择对应方案即可:
- 若不同表的筛选字段、筛选逻辑不一致(比如本次场景中
medical_voucher用voucher_date字段、rawdata用date字段做时间判断),分多次执行导出命令、通过追加写入的方式生成最终备份文件:- 导出第一张表,首次写入时用
>覆盖/创建目标sql文件:mysqldump -uroot -proot database_name medical_voucher --where="voucher_date between '2019-06-24' and CURDATE()" > d:\test4.sql - 导出第二张及后续其他表时,将输出符改为
>>,把导出结果追加到已有sql文件末尾,不会覆盖之前的导出内容:mysqldump -uroot -proot database_name rawdata --where="`date` between '2019-06-24' and CURDATE()" >> d:\test4.sql
- 导出第一张表,首次写入时用
- 若本次要导出的所有表用于筛选的字段名、判断逻辑完全一致,不需要分多次执行,仅需在命令中写一次
--where参数,放在所有待导出表名的前/后位置均可,该条件会统一应用到所有表的导出逻辑中。
注意:如果在PowerShell等特殊shell环境下执行时遇到反引号解析报错,可以去掉字段名外的反引号,或根据当前shell规则对特殊字符做转义处理。
内容的提问来源于stack exchange,提问作者spt
相关产品推荐
相关产品推荐

