it-roy-ru.com

mysqldump с несколькими таблицами с или без предложения where

У меня есть набор таблиц в моей базе данных, из которого я должен получить дамп (: 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 попытаются взять предложение where таблицы4. Я не хочу, чтобы причина, из-за которой возникла ошибка, в том, что созданное поле не существует в этих таблицах.

Я попытался поставить запятую (,) после имен таблиц, как я делал после предложения where, но это не работает.

На данный момент я в значительной степени застрял, и у меня больше нет альтернативы, ожидаю создания двух разных файлов дампа sql, что я бы не хотел делать. 

8
Sworup Shakya

сделать два дампа или если вы не хотите создавать два дампа, попробуйте две команды a.

 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

19
Sandeep Maharjan

Поэтому приведенное выше решение не будет работать, если в таблицах нет общего поля внешнего ключа. 

Если вы посмотрите на мой пример ниже, все 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
0
James