Скажем, в тестовой базе данных были удалены данные за год. Я получил два идентификатора данных не ранее чем за один год, а данные за другой - не позднее, и, следовательно, диапазон того, что здесь отсутствует. Мой вопрос; Есть ли вообще какая-либо опасность в использовании следующей команды из полного экземпляра базы данных, чтобы получить рабочий дамп, который можно использовать для восстановления базы данных с отсутствующим фрагментом информации в ней? Команда:
mysqldump -t --insert-ignore --skip-opt --single-transaction --quick --where="id<156789339" -w"id>124054297" -u root -p database table > partial.sql
И это для импорта после сжатия / перемещения:
zcat partial.sql.gz | mysql -u root -p database table
Возможно, стоит упомянуть одно предостережение - данные поступают из mysql 5.5 (percona) при импорте в экземпляр mysql 5.1, хотя я думаю, что нет никаких проблем совместимости, о которых я знаю случайно, которые могут возникнуть из-за этого.
я понимаю -t
избегать создания CREATE TABLE
заявления (--no-create-info
), --insert-ignore
в случае, если мой диапазон перекрывается, поэтому он игнорирует, существует ли этот идентификатор уже, и --skip-opt
чтобы убедиться, что он не выполняет целую кучу вещей, которые могут испортить вещи при импорте (--add-drop-tab, --add-locks, --create-options, --disable-keys, --extended-insert, --lock-tables, --quick, and --set-charset
согласно странице руководства для mysqldump). Просто хочу знать наверняка, что это все, что мне нужно при экспорте, и если что-то мне не хватает при импорте, прежде чем в конечном итоге будут сделаны какие-либо возможные ошибки.
Наверное, это будет нормально. Есть некоторые особые случаи, когда он может выйти из строя.
В вашей БД есть ИНОСТРАННЫЕ КЛЮЧИ, указывающие на вашу таблицу с помощью оператора ON DELETE CASCADE, в этом случае вы потеряли другие данные в результате предыдущего удаления, и вам также необходимо найти и скопировать эти данные. Если ваш db использует MYISAM, у вас нет внешних ключей, поэтому вы в безопасности.
Вы используете специальные функции, не поддерживаемые в предыдущей версии, например. FULLTEXT индексы. Поскольку вы сказали, что это тестовая база данных, я полагаю, что модель идентична. В таком случае проблем быть не должно.
Вы используете разные кодирование/сопоставление в двух БД, и у вас есть текстовые поля не ASCII (локализованные) в таблице. Опять же, если модель такая же, проблем быть не должно. (Если ваша таблица не имеет явного определения кодировки и кодировки по умолчанию на серверах mysql отличается у вас может быть проблема, но это маловероятно).
Если вы используете INNODB, вы можете захотеть выполнить весь свой дамп в ТРАНЗАКЦИИ (между BEGIN; и COMMIT;)