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