Подтвердить что ты не робот

Восстановление после неправильного запроса на обновление MySQL?

Я сделал неправильный запрос обновления в своей таблице.

Я забыл создать поле id в предложении WHERE.

Итак, чтобы обновить все мои строки.

Как восстановить это?

У меня не было резервной копии.

4b9b3361

Ответ 1

Извините, но шансы на восстановление перезаписанной базы данных MySQL обычно близки к нулю. В отличие от удаления файла, перезапись записи фактически и физически перезаписывает существующие данные в большинстве случаев.

Чтобы быть готовым, если что-то появляется здесь, вы должны остановить свой сервер MySQL и сделать копию физического каталога, содержащего базу данных, чтобы ничто не могло быть перезаписано далее: простая копия + вставка папки данных в другое место следует сделать.

Но не возлагайте надежды - я думаю, что ничего не может быть сделано действительно.

Возможно, вы захотите настроить частую резервную копию базы данных в будущем. Существует множество решений; один из простейших, самых надежных и простых в автоматизации (с использованием at или cron в Linux или планировщик задач в Windows) является MySQL туздЫшпр.

Ответ 2

Здесь можно извлечь два урока:

  • Резервные данные
  • Выполните инструкции UPDATE/DELETE в транзакции, чтобы вы могли использовать ROLLBACK, если все не так, как планировалось.

Осознание транзакции (автоматическая, явная и неявная) обработка вашей базы данных может избавить вас от необходимости восстанавливать данные из резервной копии.

Операции (транзакции) управления операциями управления транзакциями, чтобы гарантировать, что они являются атомарными. Быть "атомарным" означает, что транзакция либо происходит, либо нет. Единственный способ сообщить о завершении транзакции в базу данных - это использовать оператор COMMIT или ROLLBACK (для ANSI-92, который, к сожалению, не содержит синтаксиса для создания/начала транзакции, поэтому он специфичен для поставщика). COMMIT применяет изменения (если они есть), сделанные в транзакции. ROLLBACK игнорирует любые действия, произошедшие в транзакции, - очень желательно, когда оператор UPDATE/DELETE делает что-то непреднамеренное.

Обычно отдельные транзакции DML (Insert, Update, Delete) выполняются в транзакции autocommit - они фиксируются, как только оператор успешно завершается. Это означает, что нет возможности откатить базу данных до состояния до того, как оператор был запущен в таких случаях, как ваш. Когда что-то пойдет не так, единственной возможностью восстановления является восстановление данных из резервной копии (при условии, что она существует). В MySQL autocommit по умолчанию по для InnoDB - MyISAM не поддерживает транзакции. Его можно отключить, используя:

SET autocommit = 0

Явная транзакция заключается в том, когда оператор обертываются внутри явно определенного блока кода транзакции - для MySQL, START TRANSACTION. Он также требует явно сделанного оператора COMMIT или ROLLBACK в конце транзакции. Вложенные транзакции выходят за рамки этой темы.

Неявные транзакции немного отличаются от явных. Неявные транзакции не требуют объяснения транзакции. Однако, как и явные транзакции, они требуют инструкции COMMIT или ROLLBACK.

Заключение

Явные транзакции - это наиболее идеальное решение - для утверждения транзакции требуется COMMIT или ROLLBACK, и то, что происходит, четко указано для чтения другими, если есть необходимость. Неявные транзакции в порядке, если вы работаете с базой данных в интерактивном режиме, но операторы COMMIT должны указываться только после того, как результаты были протестированы и тщательно определены как действительные.

Это означает, что вы должны использовать:

SET autocommit = 0;

START TRANSACTION;
  UPDATE ...;

... и используйте только COMMIT;, когда результаты верны.

Тем не менее, инструкции UPDATE и DELETE обычно возвращают только количество затронутых строк, а не конкретные данные. Преобразуйте такие выражения в операторы SELECT и просмотрите результаты, чтобы обеспечить правильность до, чтобы выполнить оператор UPDATE/DELETE.

Добавление

Операторы DDL (Data Definition Language) автоматически фиксируются - они не требуют инструкции COMMIT. IE: инструкции таблицы, индекса, хранимой процедуры, базы данных и представления или изменения.

Ответ 3

Извините, что нет, но восстановить старые значения полей без резервной копии невозможно.

Не стреляйте в посланника...

Ответ 4

У вас есть binlogs? Вы можете восстановить доступ к бинлогам.