8 ответов:
Согласно одному источнику, mysqldump не имеет этой опции.
Вы можете использовать опцию
В противном случае вы можете запустить файл дампа через скрипт, который заменит все вхождения--forceпри импорте файла дампа обратно, где MySQL будет игнорировать ошибки, порожденные попытками создать дубликаты таблиц. Однако обратите внимание, что при использовании этого метода другие ошибки также будут игнорироваться.CREATE TABLEнаCREATE TABLE IF NOT EXISTS.
Попробуйте использовать это в вашем файле 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
Использование
sed, как описано @Pawel, хорошо работает. Тем не менее вам может не понравиться идея передачи данных через большее количество потенциальных источников ошибок, чем это абсолютно необходимо. В этом случае можно использовать два отдельных дампа:Однако есть и другие вещи, о которых нужно позаботиться (например, триггеры). Подробности смотрите в руководстве.
- первый дамп, содержащий определения таблиц(
--no-data --skip-add-drop-table)- второй дамп только с данными (
--no-create-info --skip-add-drop-table)
Не то, что вы могли бы хотеть, но с
--add-drop-tableкаждое создание предваряется соответствующим оператором DROP TABLE.В противном случае я бы пошел на простой поиск/замену (например, на
sed).
Создайте сценарий bash с этим... убедитесь,что вы сделали его исполняемым. (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"
Для поиска и замены текста в 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"
Первый парам - это путь к файлу
Второй парам является "найти строку"
Третий парам - это "заменить строку"
Эта команда создаст новый файл с замененным текстом. Удалите команду, начинающуюся с ' | ' (pipe), если вы хотите заменить и сохранить содержимое в том же файле.
Sed будет намного быстрее без 'G' (global) в его конце:
Например:
mysqldump -e <database> | sed 's/^CREATE TABLE /CREATE TABLE IF NOT EXISTS /' > <database>.sql
Вывод дампа представляет собой комбинацию 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
Comments