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

Создать таблицу, если она не существует из mysqldump

Мне интересно, есть ли какой-либо способ в mysqldump, чтобы добавить соответствующую таблицу создания таблицы [ЕСЛИ НЕ СУЩЕСТВУЕТ]. Любые идеи?

4b9b3361

Ответ 1

Согласно одному источнику, mysqldump не использует эту опцию.

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

В противном случае вы можете запустить файл дампа с помощью script, который заменит все вхождения CREATE TABLE на CREATE TABLE IF NOT EXISTS.

Ответ 2

Попробуйте использовать это в своем файле SQL:

sed 's/CREATE TABLE/CREATE TABLE IF NOT EXISTS/g' <file-path>

или сохранить

sed -i 's/CREATE TABLE/CREATE TABLE IF NOT EXISTS/g' <file-path>

он не идеален, но он работает: P

Ответ 3

Использование sed, как описано в @Pawel, хорошо работает. Тем не менее вам может не понравиться идея подачи ваших данных через более потенциальные источники ошибок, чем это абсолютно необходимо. В этом случае можно использовать две отдельные свалки:

  • первый дамп, содержащий определения таблиц (--no-data --skip-add-drop-table)
  • второй дамп с данными (--no-create-info --skip-add-drop-table)

Есть еще кое-что, о чем можно подумать (например, триггеры). Подробнее см. Руководство.

Ответ 4

Не то, что вам может понадобиться, но с --add-drop-table каждый CREATE имеет префикс соответствующего оператора DROP TABLE.

В противном случае я бы пошел на простой поиск/замену (например, с помощью sed).

Ответ 5

создайте bash script с этим... убедитесь, что вы сделали его исполняемым. (chmod 0777 dump.sh)

dump.sh

#!/bin/bash

name=$HOSTNAME
name+="-"
name+=$(date +"%Y-%m-%d.%H:%M")
name+=".sql"
echo $name;
mysqldump --replace --skip-add-drop-table --skip-comments izon -p > "$name"
sed -i 's/CREATE TABLE/CREATE TABLE IF NOT EXISTS/g' "$name"

Ответ 6

Найти и заменить текст В Windows 7 с помощью PowerShell

Откройте командную строку и используйте команду ниже

powershell -Command "(gc E:\map\map_2017.sql) -replace 'CREATE TABLE', 'CREATE TABLE IF NOT EXISTS' | Out-File E:\map\map_replaced.sql"
  • Первый параметр - это путь к файлу

  • Второй параметр - 'find string'

  • Третий параметр - 'replace string'

Эта команда создаст новый файл с замененным текстом. Удалите команду, начиная с '|' (pipe), если вы хотите заменить и сохранить содержимое в том же файле.

Ответ 7

Сед будет намного быстрее без 'g' (global) в конце:

например:

mysqldump -e <database> | sed 's/^CREATE TABLE /CREATE TABLE IF NOT EXISTS /' > <database>.sql 

Ответ 8

Выход дампа представляет собой комбинацию DROP и CREATE, поэтому вы должны удалить инструкцию DROP и изменить оператор CREATE для формирования действительного (логического) вывода:

 mysqldump --no-data -u root <schema> | sed 's/^CREATE TABLE /CREATE TABLE IF NOT EXISTS /'| sed 's/^DROP TABLE IF EXISTS /-- DROP TABLE IF EXISTS /' > <schema>.sql