Przypadkowo upuściłem wszystkie stoły. Czy mogę przywrócić z powrotem? Nie mam kopii zapasowej.
11
Jeśli dosłownie nie masz kopii zapasowej, jestem w 99% pewien, że nie masz szczęścia.
Jeśli masz jakąkolwiek formę tworzenia kopii zapasowej, bez względu na to, jak stara, to czy włączono rejestrowanie binarne za pomocą opcji log-bin w pliku konfiguracyjnym MySQL (my.ini)? Jeśli tak, możesz je odzyskać od czasu ostatniej kopii zapasowej.
Przykro mi, nie udało mi się zacząć tygodnia, stary.
Pytanie jest dość stare, ale nie ma jednej pozytywnej odpowiedzi, więc dodam jedną.
Po tym, jak MySQL upuści tabelę, dane są jeszcze przez jakiś czas na nośniku. Możesz więc pobrać rekordy i odbudować tabelę. Później napiszę o tym na blogu, ale na razie szybki szkic.
Potrzebujesz struktury tabeli (instrukcja CREATE TABLE).
Jeśli parametr innodb_file_per_table jest włączony, upuszczona tabela znajduje się na partycji dysku. Zatrzymaj MySQL i zamontuj go jak najszybciej jak tylko do odczytu. Jeśli MySQL był na partycji głównej (co nie jest dobrym pomysłem przy okazji), zrób zdjęcie lub wyjmij dysk i podłącz do innego serwera. Innymi słowy, zatrzymaj wszystkie zapisy.
Jeśli INnodb_file_per_table OFF, to po prostu zatrzymaj MySQL.
Następnie pobierz i skompiluj narzędzie Un-Drop dla InnoDB z https://github.com/twindb/undrop-for-innodb/ . Szczegółowe informacje można znaleźć w poście „ Kompilowanie zestawu narzędzi do odzyskiwania TwinDB ”.
Następnie przeanalizuj partycję dyskową lub ibdata1 (w zależności od ustawienia pliku_nodb_plik_per_table) za pomocą parametru stream_parser:
Następnie odzyskaj słownik InnoDB, aby dowiedzieć się, w którym indeksie znajdowała się usunięta tabela.
Następnie weź strukturę tabeli i pobierz rekordy
Wypisze rekordy na stdout, a komendę LOAD DATA na stderr.
źródło
Oto co zrobiłem. W katalogu mysql (dla Ubuntu jest to / var / lib / mysql, dla Maca korzystającego z Homebrew jest to / usr / local / var / mysql), znalazłem kilka plików. Najpierw skopiowałem katalog myapp_development / zawierający określony schemat do mojego lokalnego katalogu mysql. Następnie utworzyłem kopię zapasową mojego lokalnego ibdata1 i skopiowałem ibdata1 serwera do katalogu mysql. Zabity mysqld. (
ps aux
aby znaleźć PID, tokill PID
). Zrestartowałem mysql, zaczął działać w trybie odzyskiwania po awarii. Następnie uruchomiłem lokalnego klienta mysql i wygenerowałem pełny zrzut potrzebnych tabel.I 15 000 wierszy reprezentujących tygodnie pracy nad wprowadzaniem metadanych, które naszym zdaniem zniknęły na zawsze, są zapisywane !!
Mam nadzieję, że to komuś pomoże.
źródło
Niestety niewiele można zrobić, oprócz zabrania bardzo cennej lekcji na temat potrzeby dobrego planu tworzenia kopii zapasowych.
W zależności od rodzaju tabeli możesz znaleźć eksperta, który może poskładać dane z powrotem z tego, co pozostało na dysku, ale taka analiza kryminalistyczna byłaby bardzo, bardzo droga (ponieważ wymagałaby stosunkowo rzadkich umiejętności) i wcale nie gwarantowana być naprawdę użytecznym.
źródło
Jeśli była to tabela MyISAM, wystarczy cofnąć usunięcie plików tabeli w katalogu / var / log / mysql lub jakimkolwiek katalogu danych. Możesz na przykład użyć narzędzia ext3grep .
źródło
Nie można cofnąć
DROP TABLE
.Możesz sprawdzić, czy w tym MySQL włączono rejestrowanie binarne , może stamtąd możesz wyodrębnić niektóre dane.
Poza tym możesz zapomnieć o MySQL i masz problemy z tą samą klasą, co „Przypadkowo usunąłem niektóre pliki z mojego systemu plików”. Istnieje kilka narzędzi, które próbują odzyskać pliki, a są też firmy, które robią to profesjonalnie.
źródło
Jeśli masz włączone rejestrowanie binarne, możesz po prostu ponownie utworzyć tabelę, jeśli masz schemat. Upewnij się, że tworzysz schemat, gdy masz wyłączone binlogs. Lub możesz po prostu pominąć sesję. Następnie możesz odtwarzać dzienniki bin do ostatniej instrukcji, która była samą tabelą upuszczania.
Jeśli nie, możesz przywrócić za pomocą zrzutu kopii zapasowej, jeśli taki masz. Jeśli masz pliki csv, możesz załadować metodę infiltracji danych w celu odzyskania danych. Jeśli odzyskujesz z mysqldump, możesz rozważyć przywrócenie pojedynczej tabeli z pliku zrzutu zamiast przywracania pełnej bazy danych. Jeśli rozmiar danych jest zbyt duży, możesz rozważyć wyłączenie kluczy przed załadowaniem, co znacznie zwiększy proces przywracania.
W przyszłości możesz chcieć mieć opóźnionego niewolnika o 10-24 godziny za sobą. Możesz utworzyć opóźnionego slave za pomocą zestawu narzędzi Percona (pt-slave-delay)
źródło