Я випадково скинув усі столи. Чи можу я відновити назад? У мене немає резервної копії.
Я випадково скинув усі столи. Чи можу я відновити назад? У мене немає резервної копії.
Відповіді:
Якщо у вас буквально немає резервного копіювання, я на 99% впевнений, що вам не пощастило.
Якщо у вас є будь-яка форма резервного копіювання, як би не була стара, то чи увімкнено бінарний журнал через опцію log-bin у конфігураційний файл MySQL (my.ini)? Якщо це так, вони, можливо, зможуть відновити з моменту останньої резервної копії.
Поганий спосіб почати тиждень чувак, вибачте.
Питання досить старе, але жодної позитивної відповіді немає, тому я додам його.
Після того, як 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.
Ось що я зробив. У каталозі 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 рядків, що представляють тижні роботи, вводячи метадані, які, на нашу думку, зникли назавжди, рятуються !!
Сподіваюся, що це комусь допоможе.
На жаль, ви можете зробити дуже мало, крім того, щоб забрати дуже цінний урок про необхідність хорошого резервного плану.
Залежно від типу таблиці, ви, можливо, зможете знайти експерта, який може зібрати дані назад з того, що він залишив на диску, але такий судово-медичний аналіз був би дуже дорогим (тому що це вимагатиме відносно незвичайних навичок) і зовсім не гарантовано бути по-справжньому корисним.
Якщо це була таблиця MyISAM, вам потрібно просто видалити файли таблиць у / var / log / mysql або будь-яких даних даних. Наприклад, ви можете використовувати утиліту ext3grep .
Ви не можете "скасувати" a DROP TABLE
.
Ви можете подивитися і переконатись, що у MySQL увімкнено бінарний журнал , можливо, ви можете витягти звідти деякі дані.
Крім цього, ви можете забути про MySQL і знаходитесь в одному класі проблем "Я випадково видалив деякі файли зі своєї файлової системи". Є кілька інструментів, які намагаються відновити файли, також є компанії, які роблять це на професійній основі.
Якщо у вас увімкнено двійковий журнал, ви можете просто відтворити таблицю спочатку, якщо у вас є схема. Переконайтеся, що ви створюєте схему, поки бінлоги вимкнено Або ви можете просто пропустити сеанс. Тоді ви можете відтворювати бінлоги до останнього твердження, яке було самою таблицею drop.
Якщо ні, то ви можете відновити, використовуючи резервний дамп, якщо у вас є такий. Якщо у вас є файли csv, ви можете виконати завантаження даних infile для відновлення даних. Якщо ви відновлюєтеся з mysqldump, ви можете розглянути можливість відновлення однієї таблиці з дамп-файлу, а не відновлення повної бази даних. Якщо розмір даних занадто великий, то ви можете розглянути можливість відключення ключів перед завантаженням, це значно збільшить процес відновлення.
На майбутнє ви, можливо, хочете, щоб затриманий раб вийшов десь на кшталт 10-24 години. Ви можете створити відкладений раб за допомогою інструментарію percona (pt-slave-delay)