主题:mysqldump 备份多张相关联的表,并且执行有条件的筛选。 说明: . mysqldump 备份多张表,可以使用如下语法: mysqldump -uroot -proot mydatabase mytable_1 mytable_2 > /root/sql/2011_4_5_orders.sql . mysqldump 备份表的部分内容(也就是筛选出符合条件的记录),可以用如下语法: mysqldump -uroot -proot mydatabase mytable -w "order_id in ('1','2','3')" > /root/sql/2011_4_5_orders.sql . mysqldump 备份多张表,并且含有筛选条件?如下?: mysqldump -uroot -proot mydatabase mytable_1 mytable_2 -w "mytable_1.cust_id=mytable2.cust_id and mytable_1.cust_id in ('1','2','3')" > /root/sql/2011_4_5_orders.sql 很遗憾,上面的语法行不通,会报错: mysqldump: mysqldump: Couldn't execute 'SELECT /*!40001 SQL_NO_CACHE */ * FROM `mytable_2` WHERE mytable_1.cust_id=mytable2.cust_id and mytable_1.cust_id in ('1','2','3')': Unknown column 'mytable_1.cust_id' in 'where clause' (1054) 分析:当有多张表,并且加上了 -w 选项之后,只会从指定的最后一张表中查询,并且 dump 其实是使用一条 SElECT 的 sql 语句,所以,我们不能同时从多表中同时筛选出几张表的内容,而是需要分别筛选!并且,关联的表用 in 的方式,例如: mysqldump -uroot -proot mydatabase mytable_1 -w "cust_id in ('1','2','3')" > /root/sql/2011_4_5_cust.sql mysqldump -uroot -proot mydatabase mytable_2 -w "mytable_2.cust_id in (select cust_id from mytable_1 where mytable_1.cust_id in ('1','2','3'))" > /root/sql/2011_4_5_cust.sql 但遗憾的是,上面同样会报错,因为 lock tables 的问题,于是重新添加一个参数即可: mysqldump -uroot -proot --skip-add-locks mydatabase mytable_2 -w "mytable_2.cust_id in (select cust_id from mytable_1 where mytable_1.cust_id in ('1','2','3'))" > /root/sql/2011_4_5_cust.sql 总结:mysqldump 如果要同时筛选出多张表的内容,是无法达到的,只能一张表一张表的筛选出来,对于相关联的表的条件筛选,可以通过在 where 条件中添加“关联查询”的参数。