带有或不带 where 子句的多个表的 mysqldump
mysqldump with multiple tables with or without where clause
我的数据库中有一组 table,我必须对其进行转储 (:D)。我的问题是我想从一些 tables 中获取一些数据,这些数据只能追溯到某些日子,并希望保持剩余的 tables 完好无损。
我想出的查询是这样的:
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 子句。我不希望那个原因会吐出一个错误,即创建的字段在这些 table 中不存在。
我试过在 table 名称后加上逗号 (,),就像我在 where 子句后所做的那样,但它不起作用。
在这一点上,我几乎陷入困境,别无选择,只能创建两个不同的 sql 转储文件,这是我不想做的。
做两个转储或者如果你不想做两个转储然后尝试两个命令
一个.
mysqldump -h<hostname> -u<username> -p
<databasename> <table1> <table2> <table3>
--single-transaction --no-create-info > dumpfile.sql
b。
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
c。
gzip dumpfile.sql
因此,除非表具有公共外键字段,否则上述解决方案将不起作用。
如果您查看我下面的示例,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
使用多个 where 条件转储多个 tables。
mysqldump -h <hostname> -u <username> -p'<password>' <db_name> <table_name> -where 'condition=true' --no-create-info > dumpfile.sql
然后,对于第二个 table,使用 ">>"。它将附加以前的转储文件。
--no-create-info >> dumpfile.sql
mysqldump -h <hostname> -u <username> -p'<password>' <db_name> <table_name_2> -where 'condition=true' --no-create-info >> dumpfile.sql
我的数据库中有一组 table,我必须对其进行转储 (:D)。我的问题是我想从一些 tables 中获取一些数据,这些数据只能追溯到某些日子,并希望保持剩余的 tables 完好无损。
我想出的查询是这样的:
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 子句。我不希望那个原因会吐出一个错误,即创建的字段在这些 table 中不存在。
我试过在 table 名称后加上逗号 (,),就像我在 where 子句后所做的那样,但它不起作用。
在这一点上,我几乎陷入困境,别无选择,只能创建两个不同的 sql 转储文件,这是我不想做的。
做两个转储或者如果你不想做两个转储然后尝试两个命令
一个.
mysqldump -h<hostname> -u<username> -p
<databasename> <table1> <table2> <table3>
--single-transaction --no-create-info > dumpfile.sql
b。
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
c。
gzip dumpfile.sql
因此,除非表具有公共外键字段,否则上述解决方案将不起作用。
如果您查看我下面的示例,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
使用多个 where 条件转储多个 tables。
mysqldump -h <hostname> -u <username> -p'<password>' <db_name> <table_name> -where 'condition=true' --no-create-info > dumpfile.sql
然后,对于第二个 table,使用 ">>"。它将附加以前的转储文件。
--no-create-info >> dumpfile.sql
mysqldump -h <hostname> -u <username> -p'<password>' <db_name> <table_name_2> -where 'condition=true' --no-create-info >> dumpfile.sql