Подтвердить что ты не робот

Mysql dump - исключить некоторые данные таблицы

Возможно ли, используя mysql dump для экспорта всей структуры базы данных, но исключая определенные данные таблиц из экспорта.

Скажем, что в базе данных 200 таблиц, я хочу экспортировать структуру из всех 200 таблиц, но я хочу игнорировать данные из 5 конкретных таблиц.

Если это возможно, как это сделать?

4b9b3361

Ответ 1

В соответствии с mysqldump docs:

mysqldump name_of_db --ignore-table=name_of_db.name_of_table

Ответ 2

Это создаст export.sql со структурой из всех таблиц и данных из всех таблиц, исключая table_name

mysqldump --ignore-table=db_name.table_name db_name > export.sql
mysqldump --no-data db_name table_name >> export.sql

Ответ 3

Я думаю, что решение AmitP уже здорово - чтобы еще больше улучшить его, я думаю, что имеет смысл сначала создать все таблицы (структуру), а затем заполнить его данными, кроме тех, которые были исключены

mysqldump --no-data db_name > export.sql
mysqldump --no-create-info --ignore-table=db_name.table_name db_name >> export.sql

если вы хотите исключить более 1 таблицы, просто используйте директиву --ignore-table чаще (в команде 2nc) - см. справку mysqldump:

--ignore-table=name   Do not dump the specified table. To specify more than one
                      table to ignore, use the directive multiple times, once
                      for each table.  Each table must be specified with both
                      database and table names, e.g.,
                     --ignore-table=database.table

Ответ 4

Я новый пользователь и не имею достаточной репутации для голосования или комментариев по ответам, поэтому я просто передаю это как ответ.

@kantholy, безусловно, имеет лучший ответ.

@Метод AmitP выгружает всю структуру и data в file, а затем в drop/create table statement в конце. В результате файл по-прежнему потребует от import всех ваших нежелательных данных, прежде чем просто уничтожить его.

Метод @kantholy сначала выгружает всю структуру, а затем только data для table, которую вы не игнорируете. Это означает, что ваш следующий import не должен тратить время на import все data, которые вам не нужны, особенно важно, если у вас есть очень большие суммы data, которые вы хотите игнорировать, чтобы сэкономить время.

Чтобы напомнить, самый эффективный ответ:

mysqldump --no-data db_name > export.sql
mysqldump --no-create-info --ignore-table=db_name.table_name1 [--ignore-table=db_name.table_name2, ...] db_name >> export.sql

Ответ 5

Другая возможность, которую я использую, состоит в том, чтобы избежать вставки строк в нужную таблицу.

Принцип состоит в том, чтобы отфильтровать строки INSERT INTO, используя grep -v

mysqldump name_of_db | grep -v 'INSERT INTO \'name_of_table\' VALUES'

или же

mysqldump name_of_db | grep -v 'INSERT INTO \'name_of_db\'.\'name_of_table\' VALUES'

Что вы можете легко попасть в файл gziped и отдельный файл ошибок

mysqldump name_of_db | grep -v 'INSERT INTO \'name_of_db\'.\'name_of_table\'' | gzip > /path/dumpfile.sql.gz 2> /path/name_of_db.err

и, следовательно, получить хорошую резервную копию того, что вы хотите, и знать, что не удалось, если таковые имеются :-)

Ответ 6

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

Чтобы идти дальше, мы должны сделать:

1/Экспорт структуры

mysqldump --no-data db_name | sed 's/ AUTO_INCREMENT=[0-9]*\b//g' > export-structure.sql

2/Экспорт только данных и игнорирует некоторые таблицы

mysqldump --no-create-info --ignore-table=db_name.table_name1 [--ignore-table=db_name.table_name2, ...] db_name >> export-data.sql

3/Экспорт конкретных данных в одну таблицу

mysqldump --no-create-info --tables table_name --where="id not in ('1', '2', ...)" > export-table_name-data.sql

Я пытался использовать --skip-opt для сброса AUTO_INCREMENT но это также AUTO_INCREMENT определение AUTO_INCREMENT для поля, CHARSET и других вещей.

Ответ 7

Может быть, этот инструмент может помочь вам:

https://github.com/webfactory/slimdump

Отказ от ответственности Я один из сопровождающих.

Ответ 8

На мой взгляд, лучший ответ от Стейка, единственный ответ, который действительно работает в любом случае.

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

Как уже указывалось выше, у вас могут быть проблемы с последовательностями.

Но я считаю более критическим, что база данных может иметь триггеры, которые проверяют или обрабатывают информацию (предположим, триггер, который вставляет записи в таблицу B при вставке в таблицу A) - в этом случае последовательность создания полной схемы (включая триггеры), а затем вставка данных создаст другой набор результатов.