Mysqldump добавить drop table?
Я заметил в Codex, что для резервного копирования базы данных отображается опция --add-drop-table. Прежде чем я что-нибудь испорчу, означает ли это, что когда резервная копия будет импортирована, таблицы будут перезаписаны, если они существуют в целевой базе данных?
Я не хочу удалять таблицы при их резервном копировании!
user@linux:~/files/blog> mysqldump --add-drop-table -h mysqlhostserver
-u mysqlusername -p databasename (tablename tablename tablename) | bzip2
-c > blog.bak.sql.bz2
Enter password: (введите ваш пароль mysql)
user@linux~/files/blog>
http://codex.wordpress.org/Backing_Up_Your_Database#Using_Straight_MySQL_Commands

Это влияет только на вывод дампа MySQL в создаваемом файле.
Это не обязательно. Это нужно для того, чтобы при импорте созданного файла дампа в базу данных, где уже существует таблица с таким же именем, она будет удалена, а затем на её место будет добавлена новая таблица. В противном случае вы получите ошибку, и файл дампа не будет импортирован.
Он добавляет эту строку перед оператором создания таблицы в файле дампа:
DROP TABLE IF EXISTS `tablename`;
Если вы планируете импортировать файл дампа в новую базу данных, это не имеет значения.

Это происходит потому, что общий синтаксис выглядит примерно так:
mysql>mysqldump --opt --all-databses > all.sql
Параметр --opt
включён по умолчанию (что подразумевает использование --add-drop-table
), как упоминается в документации MySQL.

При удалении параметра --add-drop-table в данном синтаксисе, --add-drop-table всё равно используется, потому что --opt включён по умолчанию (если только вы не используете --skip-opt), а --opt включает в себя --add-drop-table. Смотрите здесь: https://dev.mysql.com/doc/refman/5.6/en/mysqldump.html#option_mysqldump_opt
И, как указано выше, это не означает, что ваши таблицы будут удалены при создании резервной копии, но команды для удаления таблиц будут включены в SQL-файл, потому что именно это вам нужно для дампа, чтобы можно было импортировать дамп без ошибок о том, что таблицы уже существуют.

Да, это сделает именно то, что сказано, т.е. удалит таблицу, если она уже существует. Пожалуйста, помните, что вы создаёте дамп, который будет импортирован (в двух сценариях):
Если создаётся новая база данных (или таблица), то операция DROP TABLE не имеет значения, потому что изначально нет таблицы для удаления.
Но чтобы пропустить удаление уже созданной таблицы, используйте --skip-add-drop-table. (Также используйте --no-create-info вместе с --skip-add-drop-table, потому что вам также не нужен оператор CREATE TABLE), например:
mysqldump --skip-add-drop-table --no-create-info -h mysqlhostserver -u mysqlusername -p databasename tablename | bzip2 -c > blog.bak.sql.bz2
К сведению: Вы не можете экспортировать более одной таблицы, используя (tablename, tablename, tablename). Либо экспортируйте все таблицы, не указывая имя таблицы после имени базы данных, либо укажите только одно имя таблицы.
Редактирование
Обратите внимание, что если ваша таблица очень большая, то разумно экспортировать её по частям. Т.е. создайте дамп-файлы по 80 тыс. (восемьдесят тысяч) записей (примерно равные 10 Мб), используя следующую команду: К сведению: Я разделил экспорт, используя WHERE в mysqldump.
mysqldump -h mysqlhostserver -u mysqlusername -p --add-drop-table --add-drop-trigger --skip-triggers --dump-date --single-transaction --where='1 limit 0,80000' databasename tablename > /home/blog1.bak.sql
mysqldump mysqlhostserver -u mysqlusername -p --skip-add-drop-table --no-create-info --dump-date --single-transaction --where='1 limit 80000,999999' databasename tablename > /home/blog2.bak.sql
Приведённая выше команда сначала создаёт файл с первыми 80К записями blog1.bak.sql (обратите внимание, что в этом дампе я пропустил триггеры. Я обнаружил это позже, потому что это сводило меня с ума — если в первом дампе были какие-либо связанные триггеры на INSERT или UPDATE, то при импорте этого первого файла:
- создаётся таблица
- вставляются записи в новую таблицу
- создаются триггеры, связанные с этой таблицей, и они применяются
Поэтому когда вы будете импортировать другие дамп-файлы после первого, триггеры будут применяться (пока нет способа отключить триггеры, кроме как переписать их и добавить сложный код для отключения триггеров при отладке или, в нашем случае, при импорте). Обычно триггеры содержат код с JOIN к другим таблицам, которые могут быть ещё не импортированы, что приведёт к ошибке импорта.
