带有或不带where子句的多个表的mysqldump

时间:2015-09-03 06:07:17

标签: mysql mysqldump

我的数据库中有一组表,我必须进行转储(:D)。我的问题是我想从某些表中获取一些数据,这些数据只能追溯到某些日期,并希望保留其余表格。

我提出的查询类似于:

mysqldump -h<hostname> -u<username> -p <databasename> 
<table1> <table2> <table3> 
<table4> --where 'created > DATE_SUB(now(), INTERVAL 7 DAY)',
<table5> --where 'created > DATE_SUB(now(), INTERVAL 7 DAY)
--single-transaction --no-create-info | gzip
> $(date +%Y-%m-%d-%H)-dump.sql.gz

上面代码的问题是table1,table2和table3将尝试获取table4的where子句。我不希望那个会导致这些表中不存在创建字段的错误的原因。

我尝试在表名之后加上逗号(,),就像我在where子句之后所做的那样但它不起作用。

此时我已经陷入困境,没有更多的选择期望创建两个不同的sql转储文件,我不想这样做。

2 个答案:

答案 0 :(得分:19)

进行两次转储,或者如果你不想进行两次转储,那么尝试两个命令

一个。

mysqldump -h<hostname> -u<username> -p 
<databasename>  <table1> <table2> <table3>
--single-transaction --no-create-info > dumpfile.sql

mysqldump -h<hostname> -u<username> -p <databasename> 
<table4> --where 'created > DATE_SUB(now(), INTERVAL 7 DAY)',
<table5> --where 'created > DATE_SUB(now(), INTERVAL 7 DAY)
--single-transaction --no-create-info >> dumpfile.sql

℃。

gzip dumpfile.sql

答案 1 :(得分:0)

因此,除非表格具有公共外键字段,否则上述解决方案将无效。

如果查看下面的示例,user_addresses,user_groups和user_payment_methods都具有常用的user_id字段。当mysqldump执行where子句时,它将过滤这些表。

mysqldump -u <username> -p <password> 
user_addresses user_groups user_payment_methods 
-w "user_id 
in (select id from users where email like '%@domain.com')"
--single-transaction| gzip > sqldump.sql.gz