Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: "Ogromna" baza danych i równie "ogromny" problem
Forum PHP.pl > Forum > Bazy danych > MySQL
maaciek_
Witajcie,

Mam backup swojej bazy danych, która (przez moją nieuwagę) została zasyfiona przez spamboty.

Pech chciał, że kilka dni temu aktualna baza (już odchudzona) została uszkodzona przez wywołanie złośliwego polecenia (włamanie na forum) - straciłem jedną jedyną tabelę - zawierającą posty z forum . Na szczęście (a może i nie...) mam backup (sprzed dwóch dni), który waży 2,4 gb (w archiwum .gz - 350 mb). Z powodu wagi tego backupu nie jestem w stanie czegokolwiek ręcznie w backupie zmienić, ani nawet wgrać go, ponieważ serwer MySQL (mam serwer VPS) najzwyczajniej w świecie się zawiesza (wyłącza?). Od razu uprzedzam pytanie - próbowałem zrobić backup lokalnie - poprzez wywołanie odpowiedniego polecenia z poziomu powłoki - efekt taki sam, jak przy próbie uploadu przy pomocy phpmyadmin. Tak samo dzieje się przy próbie użycia skryptu bigdump.


Proszę Was o pomoc - jak wyciągnąć z bazy danych jedną jedyną tabelę? Próbowałem już otwierać bazę w VIM pod Windowsem, próbowałem otwierać kilkoma programami do podglądu plików, jednak każdy wczytuje bazę tylko do pewnego momentu i zawiesza się. Nie wiem już co robić, a tracę pieniążki przez awarię forum!


Pilnie proszę Was o pomoc, bo nie mam pojęcia już co zrobić sad.gif
erix
W jaki sposób to wczytujesz?

Jeśli to VPS, to podejrzewam, że problemem jest brak pamięci - postaw sobie identyczną wersję MySQL na swoim komputerze, w maszynie wirtualnej (ale z większym przydziałem pamięci), przywróć dumpa i potem przegraj dane MySQL na właściwy serwer.
Adi32
Moja rada to napisać program z rodziny C i wyciągnąć odpowiednie dane wyrażeniem regularnym.
maaciek_
Backup wywoływałem komendą mysql -unazwausera -p baza < nazwadumpu.sql


Próbowałem też wersję "dla opornych", czyli z phpmyadmin (jak już napisałem). Próbowałem nawet przez DA - efekt Ciągle ten sam. Zainstaluję jeszcze mysql na swoim komputerze i sprawdzę, czy zadziała.
erix
Cytat
Moja rada to napisać program z rodziny C i wyciągnąć odpowiednie dane wyrażeniem regularnym.

Ciężarówkę do przeprowadzek też składasz ze śrubek?

Cytat
Próbowałem też wersję "dla opornych", czyli z phpmyadmin (jak już napisałem). Próbowałem nawet przez DA - efekt Ciągle ten sam.

Przez PMA to ni choroby nie przejdzie.

Pierwsza metoda IMO będzie najlepsza, ale tylko na maszynie z większą ilością pamięci, bo VPS-y są pod tym względem biedne.
Adi32
Cytat(erix @ 9.01.2012, 22:03:09 ) *
Ciężarówkę do przeprowadzek też składasz ze śrubek?


Zrozumiałem, że nie da rady tego backupa odpalić w żaden sposób bo z powosu swoich rozmiarów wszystko wiesza.
Skoro człowiek traci pieniądze i potrzebuje szybko rozwiązać problem to tak. To rozwiązanie moim zdaniem nie jest 'składaniem ciężarówki ze śrubek', nie jest tak skomplikowane ale wiadomo - lepiej byłoby to załatwić w konwencjolnalny sposób.
erix
Cytat
To rozwiązanie moim zdaniem nie jest 'składaniem ciężarówki ze śrubek', nie jest tak skomplikowane ale wiadomo - lepiej byłoby to załatwić w konwencjolnalny sposób.

Owszem, jest składaniem ciężarówki ze śrubek. Bo Ty chcesz pisać seda na nowo. tongue.gif
ActivePlayer
odpal to sobie na jakiejś lokalnej maszynie.

wczytaj dumpa poleceniem

Kod
mysql -u ... -p nazwa_bazy < plik_dumpa.sql


wyczyść co masz wyczyścić ew po wczytaniu przekopiuj sobie to co Cie interesuje. jeśli masz dostęp do shella to to samo możesz zrobić na zdalnej maszynie.
pitbull82
Spróbuj sobie na localhoscie wgrać bazę skryptem http://sypex.net/en/products/dumper/downloads/

Swoją drogą plik jest rozpakowany przed rozpoczęciem wgrywania? Spróbuj 2 metodami bo różnie to może być.
darko
Jeśli interesuje Cię tylko jedna tabela - możesz spróbować użyć grep z odpowiednim wyrażeniem, które wyciągnie i zrzuci do odrębnego pliku zawartość dumpa sql tej jednej tabeli, która Cię interesuje. Zadanie łatwe nie będzie (trzeba napisać i sprawdzić odpowiedni pattern i czekać na wynik), ale powinno dać radę to zrobić (metoda wypróbowana na pliku dump ważącym ponad 10Gb i zadziałało, trochę trwało, ale był to jedyny sposób w mojej sytuacji i poskutkował). Niestety nie mam już nigdzie mojego patternu.
ps. pamiętaj, że nawet jeśli uda Ci się odzyskać dane, to nie jest to w żadnym wypadku rozwiązanie Twojego problemu. Wszystkie luki trzeba połatać, dla pewności pozmieniaj hasła to połączenia z bazą i ftp, sprawdź też konfigurację serwera, w miejscach gdzie użytkownik może przesłać jakieś dane formularzem dodaj captchę, sprawdzaj też czasy pomiędzy kolejnymi insertami do bazy, lepiej dmuchać na zimne.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.