Як скасувати таблицю DROP?


Відповіді:


12

Якщо у вас буквально немає резервного копіювання, я на 99% впевнений, що вам не пощастило.

Якщо у вас є будь-яка форма резервного копіювання, як би не була стара, то чи увімкнено бінарний журнал через опцію log-bin у конфігураційний файл MySQL (my.ini)? Якщо це так, вони, можливо, зможуть відновити з моменту останньої резервної копії.

Поганий спосіб почати тиждень чувак, вибачте.


2
Імовірно, тому, що ви недосвідчені, ми все робили подібні речі, все-таки робимо іноді (заблокували себе з мого власного VCenter не тиждень тому) - важливо лише те, що ви вчитеся на цьому, щоб ви менше ймовірно, повториться.
Chopper3

Що я можу зробити зараз ?? Я не можу просто сидіти і чекати !!!!

8
Скажіть своєму менеджеру
Chopper3

4
Це не вирішує проблему, але, можливо, хтось із ваших розробників має копію, яка не надто віддалена від останньої гарної копії?
Том О'Коннор

3
Том підкреслює дуже хороший момент: якщо ваші розробники мають звичку регулярно робити знімки живих даних для тестування / розробки, то, можливо, вам пощастить і добре, що один із них має досить недавню копію, щоб погіршити вашу ситуацію з " повна катастрофа "лише до" великих незручностей ".
Девід Спіллетт

7

Питання досить старе, але жодної позитивної відповіді немає, тому я додам його.

Після того, як MySQL опустить таблицю, дані деякий час залишаються на носіях. Таким чином, ви можете отримати записи та відновити таблицю. Пізніше я буду вести блог про це, але поки що швидкий ескіз.

Вам потрібно мати структуру таблиці (оператор CREATE TABLE).

Якщо значення innodb_file_per_table увімкнено, випаднана таблиця знаходиться на розділі диска. Зупиніть MySQL та встановіть його якнайшвидше. Якщо MySQL був на кореневому розділі (що не дуже добре ідея btw), тоді сфотографуйте або вийміть диск і підключіть до іншого сервера. Перестаньте писати іншими словами.

Якщо innodb_file_per_table OFF, просто зупиніть MySQL.

Потім завантажте та компілюйте інструмент для скасування для InnoDB з https://github.com/twindb/undrop-for-innodb/ . Детальніше ознайомтесь із повідомленням " Складання TwinDB інструментарію відновлення ".

Потім проаналізуйте розділ диска або ibdata1 (залежно від налаштування innodb_file_per_table) за допомогою stream_parser:

./stream_parser -f /path/to/diskimage_or_ibdata1

Потім відновіть словник InnoDB, щоб дізнатися, в якому індекс_id потрапила таблиця.

Потім візьміть структуру таблиці та вийміть записи

./c_parser -f pages-diskimage_or_ibdata1/FIL_PAGE_INDEX/00000<index_id>.page

Він виведе записи в stdout і команда LOAD DATA в stderr.


ви, сер, врятували мені життя
Buddhi741

2

Ось що я зробив. У каталозі mysql (для Ubuntu це / var / lib / mysql, для Mac з використанням Homebrew це / usr / local / var / mysql), я знайшов деякі файли. Спочатку я скопіював каталог myapp_development /, що містить конкретну схему, в мій локальний каталог mysql. Потім я створив резервну копію свого локального ibdata1 і скопіював ibdata1 сервера в каталог mysql. Вбито mysqld. ( ps auxщоб знайти PID, значить kill PID). Перезапущений mysql, він запускався в режимі відновлення після аварійного завершення. Потім запустив мій локальний клієнт mysql і створив повний дамп потрібних мені таблиць.

І 15000 рядків, що представляють тижні роботи, вводячи метадані, які, на нашу думку, зникли назавжди, рятуються !!

Сподіваюся, що це комусь допоможе.


Це приємні зусилля, але я впевнений, що не буде покладати надто багато надій на цю надійну техніку. Тим не менше, +1 для творчого мислення.
John Gardeniers

Так, ви маєте рацію. Він закінчився роботою лише тому, що ми випадково видалили всі дозволи від користувача mysql, тому база даних виявилася порожньою для цього користувача.
Герцог

2

На жаль, ви можете зробити дуже мало, крім того, щоб забрати дуже цінний урок про необхідність хорошого резервного плану.

Залежно від типу таблиці, ви, можливо, зможете знайти експерта, який може зібрати дані назад з того, що він залишив на диску, але такий судово-медичний аналіз був би дуже дорогим (тому що це вимагатиме відносно незвичайних навичок) і зовсім не гарантовано бути по-справжньому корисним.


Чи є якийсь інший варіант?

1
Як підказує FractalizeR, якщо таблиці були простими таблицями MyISAM, ви, можливо, зможете відновити пов'язані з ними файли. Якщо ви збираєтеся спробувати, тоді вам потрібно буде вимкнути сервер зараз, оскільки чим довше система активна, тим більше шансів на те, що простір, який використовуються файлами, буде повторно використаний, що робить неможливим відновлення видалення файлів (або зробити невідтворені файли пошкодженими вмістом ). Спосіб відновлення залежить від використовуваної файлової системи. ntfsundelete.com - це перше корисне посилання в пошуку Google для неповернених на NTFS.
Девід Спіллетт

0

Якщо це була таблиця MyISAM, вам потрібно просто видалити файли таблиць у / var / log / mysql або будь-яких даних даних. Наприклад, ви можете використовувати утиліту ext3grep .


ext3grep призначений для файлових систем ext3. Якщо ви використовуєте Windows, то навряд чи ви використовуєте файлову систему ext3 (швидше за все, ви використовуєте NTFS, хоча це може бути FAT32). Якщо ви збираєтеся спробувати відновлення видалених файлів, вам потрібно якнайшвидше вимкнути сервер, незалежно від того, які інші сервіси працюють на ньому, оскільки чим довше сервер активний, тим більше шансів, що відновити не зможе допомогти ти взагалі.
Девід Спіллетт

Якщо у вас увімкнена тіньова копія на томі, в якому зберігалися таблиці MyISAM, ви отримали змогу повернути їх назад таким чином.
Кетрін Макіннес

Щоб відновити видалений файл бази даних, ви можете шукати в google "ntfs undelete". Я не знаю, де на вашому ПК знаходиться dir data. Вам потрібно перевірити свій файл my.ini або, наприклад, шукати файли з розширенням MYD.
Владислав Раструсний

0

Ви не можете "скасувати" a DROP TABLE.

Ви можете подивитися і переконатись, що у MySQL увімкнено бінарний журнал , можливо, ви можете витягти звідти деякі дані.

Крім цього, ви можете забути про MySQL і знаходитесь в одному класі проблем "Я випадково видалив деякі файли зі своєї файлової системи". Є кілька інструментів, які намагаються відновити файли, також є компанії, які роблять це на професійній основі.


-1

Якщо у вас увімкнено двійковий журнал, ви можете просто відтворити таблицю спочатку, якщо у вас є схема. Переконайтеся, що ви створюєте схему, поки бінлоги вимкнено Або ви можете просто пропустити сеанс. Тоді ви можете відтворювати бінлоги до останнього твердження, яке було самою таблицею drop.

Якщо ні, то ви можете відновити, використовуючи резервний дамп, якщо у вас є такий. Якщо у вас є файли csv, ви можете виконати завантаження даних infile для відновлення даних. Якщо ви відновлюєтеся з mysqldump, ви можете розглянути можливість відновлення однієї таблиці з дамп-файлу, а не відновлення повної бази даних. Якщо розмір даних занадто великий, то ви можете розглянути можливість відключення ключів перед завантаженням, це значно збільшить процес відновлення.

На майбутнє ви, можливо, хочете, щоб затриманий раб вийшов десь на кшталт 10-24 години. Ви можете створити відкладений раб за допомогою інструментарію percona (pt-slave-delay)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.