Восстановить mysqldump, созданный с использованием —no-create-info и позволяющий пропустить таблицы, отсутствующие в текущей базе данных

#mysql

#mysql

Вопрос:

У меня есть резервная копия mysqldump, которая была создана с помощью --no-create-info option . Я хочу восстановить его в новой базе данных, в которой нет определенных таблиц (примерно 50 таблиц удалены из целевой базы данных, поскольку они больше не нужны).

Итак, я получаю Table 'table_name' doesn't exist по очевидной причине.

Итак, каков mysql способ восстановления в базе данных, в которой нет всех таблиц, присутствующих в файле резервной копии.

Я могу --insert-ignore попытаться избежать этого сбоя, но я сомневаюсь, что это может также игнорировать некоторые подлинные ошибки, такие как несоответствие типов данных и т. Д.

Комментарии:

1. Ошибка Сомневаюсь, что вы можете заставить mysql игнорировать тот факт, что вы пытаетесь восстановить несуществующие таблицы. Или я неправильно понял

2. Это вопрос типа «Если бы у меня была ветчина, у нас могли бы быть ветчина и яйца, если бы у меня были яйца»?

3. @RiggsFolly- Предположим, у меня есть резервная копия базы данных, в которой было 100 таблиц, но в моей новой базе данных всего 50 таблиц.

4. Является ли резервная копия форматом SQL?

5. ДА. Инструкции вставки

Ответ №1:

Очевидно, что вы не можете вставлять строки в таблицу, которая не существует.

Чтобы восстановить данные в вашем файле дампа, вам нужно сначала создать эти таблицы. Вы можете вернуться к исходному экземпляру MySQL и сбросить эти определения таблиц с помощью mysqldump --no-data

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

Вы могли бы использовать grep -v , например, для удаления строк.

Или вы могли бы использовать sed для удаления строк между «— Dumping data for table tablename » и любой следующей таблицей.

Если вы не хотите фильтровать данные, но вам не нужно восстанавливать данные для таблиц, которые не существуют, вы можете создать фиктивные таблицы с правильными полями, но определить таблицы с помощью механизма хранения BLACKHOLE, поэтому вставки фактически не приведут к сохранению каких-либо данных.

Еще один вариант: импортируйте файл дампа с mysql --force помощью so, чтобы он продолжался, даже если он получает ошибки при некоторых вставках.