mysql 关联备份数据

来源:互联网 发布:网络教学与传统教学 编辑:程序博客网 时间:2024/04/30 13:25


主题: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  --lock-all-tables 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 条件中添加“关联查询”的参数。

原创粉丝点击