Допустим, в тестовой базе данных были стерты данные за год. Я получил два идентификатора для данных за один год самое раннее и данные за другой год самое позднее, и, следовательно, диапазон того, что здесь отсутствует. Мой вопрос: есть ли какая-либо опасность в использовании следующей команды из полного экземпляра базы данных, чтобы получить рабочий дамп, который можно использовать для восстановления базы данных с отсутствующим фрагментом информации в ней? Команда:
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). Просто хочу знать наверняка, что это все, что мне нужно при экспорте, и есть ли что-то, чего я, возможно, упускаю при импорте, прежде чем будут сделаны возможные ошибки.
решение1
Наверное, это будет нормально. Есть некоторые особые случаи, когда это может не сработать.
В вашей базе данных есть FOREIGN KEY, указывающие на вашу таблицу с помощью оператора ON DELETE CASCADE, в этом случае вы потеряли другие данные в результате предыдущего удаления, и вам нужно найти и скопировать эти данные. Если ваша база данных использует MYISAM, у вас нет внешних ключей, поэтому вы в безопасности.
Вы используете специальные функции, не поддерживаемые в предыдущей версии, например, индексы FULLTEXT. Поскольку вы сказали, что это тестовая база данных, я полагаю, что модель идентична. В этом случае проблем быть не должно.
Вы используете разныекодирование/подборкав двух БД и у вас есть не ASCII (локализованные) текстовые поля в таблице. Опять же, если модель та же самая, проблем быть не должно. (Если в вашей таблице нет явного определения кодировки и кодировка по умолчанию в серверах mysqlотличаетсяу вас могут возникнуть проблемы, но это маловероятно).
Если вы используете INNODB, вам может потребоваться выполнить весь дамп в ТРАНЗАКЦИИ (между BEGIN; и COMMIT;)