SQL Error 2002+Problem z VPS

Zombie
vps, mysql
DoreK
DoreK α-tester v3

Witam, problem z błędem 2002 po kilku restartach z powodu problemów z VPS'em, tak jak pisałem na pogaduchach: wszystko co na vps jest postawione przestało działać mimo iż był włączony, nie dało też się zalogować na ssh itd. Kilka minut po restarcie miałem to samo, więc podejrzewam, że coś się dzieje z węzłem n67, ale w tej sprawie już wysłałem zgłoszenie w panelu. Wie ktoś jak rozwiązać ten błąd z sql? Serwer MC, forum, sklep nie mają połączenia z bazą a w konsoli takie cuś po wpisaniu mysql image|643x75

kubus
kubus

/etc/init.d/mysqld stop mysqladmin -u root -p shutdown pkill -9 mysqld chmod 777 /var/run/mysqld/mysqld.sock reboot

DoreK
DoreK α-tester v3

Zaraz sprawdzę, ale podejrzewam że jednak coś z dyskiem =) image|690x128 Niemożliwe jest to że mój VPS jest zapełniony, skoro niedawno było poniżej 50% zajęte. /edit: To może lepiej poczekać na odpowiedź w tickecie, bo boję się że coś jeszcze bardziej spierdzielę :thinking:

DBanaszewski
DBanaszewski α-tester v3

Wejdź na VPSa i daj zrzut z df -h :)

DoreK
DoreK α-tester v3

W df-h to w ogóle cuda się dzieją: image|446x164 Było około 40% - czyżby baza wyparowała? No ale tutaj widać że df-h pokazuje co innego niż proxmox : V Już miałem taki przypadek i się okazało że dysk na węźle padł :v

DBanaszewski
DBanaszewski α-tester v3

Te pola typu storage to miejsca, gdzie znajdują się ISO itp.

Sprawdź, czy baza danych działa: mysqladmin -u root -p status

Jeżeli na węźle padłby dysk, to dlaczego uruchomił Ci się VPS? Jak padnie nam HDD czu SSD to włączysz komputer? (No w moim przypadku nie dało się włączyć XD)

DoreK
DoreK α-tester v3

Też fakt, to w takim razie dlaczego df-h podaje 16% a proxmox 46%? image|690x138 Co do komendy: image|645x127

DBanaszewski
DBanaszewski α-tester v3

Dysk n67 jest zapełniony w 46.4% ;) (a nie Twój VPS)

Z tego co tu pisze to MySQL server działa.


Przykład n65 image|690x91

Mój VPS: image|481x151

DoreK
DoreK α-tester v3

Dobra, jestem chyba zbyt wkurzony tą sytuacją i walę takie głupoty że szkoda gadać XDDD No to działać działa a w pma się nie wbije bo wywala ten sam błąd. Spróbuję komendy od @kubus

DBanaszewski
DBanaszewski α-tester v3

W pliku /etc/mysql/ zobacz jaki masz socket w sekcji [client]. Prawidłowy: socket=/var/lib/mysql/mysql.sock. Spróbuj również: sudo chmod -R 755 /var/lib/mysql/ i potem sudo service mysql restart.

DoreK
DoreK α-tester v3

Jaki plik? Bo /etc/mysql/ zbyt wiele mi nie mówi (albo jestem tak głupi że nie ogarniam :kappa:) Po wpisaniu komendy na restart mysql pokazało się to: image|636x67

Nieznajomy11
Nieznajomy11 Moderator forum.lvlup.pro

Zajęte miejsce w proxmox to rozmiar pliku dysku guesta na hoście. Kiedy zajmiemy 15 gb a potem usuniemy 5, to te 5 zostanie zapelnione zerami i nadal w proxmox bedziemy widzieli 15 gb uzyte.

https://lvlup.rok.ovh/t/proxmox-ve-5-i-zjadanie-dysku/4530

DBanaszewski
DBanaszewski α-tester v3

sudo systemctl status mysql.service walnij i pokaż :D

DoreK
DoreK α-tester v3

image|635x261

image|540x232 Tutaj przewinąłem tekst w prawo (strzałką) bo trochę ucięło

Nieznajomy11
Nieznajomy11 Moderator forum.lvlup.pro

Masz w ogóle folder /var/run/mysqld i /var/lib/mysql?

DoreK
DoreK α-tester v3

w /var/ jest skrót do folderu /run/ w którym znajduje się pusty folder mysqld folder var/lib/mysql istnieje i są tam moje bazy oraz inne rzeczy :V image|427x396

DBanaszewski
DBanaszewski α-tester v3

Skopiuj to i usuń MySQL server a zainstaluj MariaDB server ;) Nie wiem czy proces migracji się uda, ale jeżeli tak, to będzie wszystko sprawne :D

DoreK
DoreK α-tester v3

Wolę w ten sposób nie ryzykować - dane tu mają kilka GB, trochę by mi z tym pewnie zeszło a znając mojego pecha to by się jeszcze bardziej schrzaniło. Chcę zostać przy MySQL :>

Nieznajomy11
Nieznajomy11 Moderator forum.lvlup.pro

Czy ja wiem. Aby nie próbować na żywca kopiować baz - bo może się któraś nie skopiować.

DBanaszewski
DBanaszewski α-tester v3

Spróbuj tego: mysqldump -u root -p haslo_roota nazwa_bazy > dumpfilename.sql - jeżeli nie działa, czytaj dalej.


Wykonaj to:

sudo apt-get remove mysql-server
sudo apt-get install mysql-server

Musi być tam REMOVE, a nie PURGE, bo to usunie wszystkie pliki, a tak to tylko aplikację. Na wszelki wypadek zrób kopię za pomocą cp lub spakuj to w np. tar.gz.

Nieznajomy11
Nieznajomy11 Moderator forum.lvlup.pro

Ja na początku bym jednak spróbował zabić proces:

kill $(ps aux | grep mysql | awk '{print $2}')

a potem zrestartować vps:

 reboot
DoreK
DoreK α-tester v3

Nie pomogło, dalej wywala 2002. @DBanaszewski mam (jak widać na ss wyżej) kilkanaście baz (choć to sys widzę pierwszy raz na oczy, albo mi umknęło albo po prostu to nie jest baza XD) - dla każdej bazy użyć mam tej komendy? w sensie że mysqldump -u root -p haslo_roota dcraft_wiki > dumpfilename.sql mysqldump -u root -p haslo_roota dcraft_sklep > dumpfilename.sql mysqldump -u root -p haslo_roota Forum > dumpfilename.sql i tak dalej?

DBanaszewski
DBanaszewski α-tester v3

Yep.

Nieznajomy11
Nieznajomy11 Moderator forum.lvlup.pro
#!/bin/bash
 
mkdir -p dumps
 
for database in $(mysql --defaults-file=/etc/mysql/debian.cnf -B -s -e 'show databases' | grep -v information_schema)
do
	mysqldump --defaults-file=/etc/mysql/debian.cnf --skip-lock-tables $database > "dumps/$database.sql"
done

Powinno od razu wszystkie wyciągnąć. Nie wiem jak to ma się na ubuntu, bo w końcu debian.cnf Jak coś to po prostu musisz zmienić w komendach --defaults-file na zwykłe logowanie.

kubus
kubus

Ehh. mysqldump --defaults-file=/etc/mysql/debian.cnf --routines --flush-privileges --all-databases > /root/dump.sql

Nieznajomy11
Nieznajomy11 Moderator forum.lvlup.pro

Pakowanie wszystkiego do jednego pliku jest nieeleganckie :thinking:

kubus
kubus

No bywa. Sam z tego korzystam, działać działa, więc nie widze problemu oprócz estetyki.

DoreK
DoreK α-tester v3

@Nieznajomy11 zrobiłem tak jak doradziłeś i: image|643x43 czo teraz!

DBanaszewski
DBanaszewski α-tester v3

Skorzystaj z mojej porady:

DBanaszewski:

Wykonaj to:

sudo apt-get remove mysql-server sudo apt-get install mysql-server

Musi być tam REMOVE, a nie PURGE, bo to usunie wszystkie pliki, a tak to tylko aplikację.

DoreK
DoreK α-tester v3

Ok, zrobiłem kopię za pomocą tar gz: tar -zcvf /bazaKopia/kopiavarlibmysql.tar.gz /var/lib/mysql/ I do tar.gz poszło wszystko prócz folderów z moimi bazami które mają na pewno ponad 300mb, więc wychodzi na to że muszę dla każdej bazy zrobić inną kopię :thinking: /edit: Jednak nie, coś tam skopiowało ale wydaje mi się że nie wszystko skoro plik tar.gz ma wagę 162mb :thinking:

SystemZ
SystemZ Admin lvlup.pro

Wybaczcie za utrudnienia, wygląda na to że na n67 skrypt do backupów się trochę zapomniał, dodatkowo monitoring nie zwrócił mi na to uwagi a ciężko być na bieżąco z ponad 40 węzłami ręcznie sprawdzając wiele rzeczy przez SSH więc monitoring powinien być tu niezawodny. Jestem w trakcie badania co dokładnie miało miejsce że nie dostałem o tym alertu.

Nie zdążyłem się zapoznać z całym wątkiem ale jeśli wystąpiły problemy z plikami na dysku to sugeruję po prostu przywrócić najświeższy backup.

DBanaszewski
DBanaszewski α-tester v3

SystemZ:

przywrócić najświeższy backup

Ciekawe czy @DoreK zalicza się do osób robiących backup, czy do tych którzy "będą" robić backup :kappa:.

DoreK
DoreK α-tester v3

Robię backup serwerów MC na vps :facepalm:

kubus
kubus

Dodam też, że mam serwer na n67 i były problemy z tym, że serwer się co chwile ścinał i pomagał tylko reboot, no cóż. Zrobiłem reinstalla.

DoreK
DoreK α-tester v3

Czyli ten sam problem co u mnie - też się ścinał i musiałem stopować w panelu bo nie szło inaczej. Może przez to właśnie mam te problemy z mysql.

kubus
kubus

Ech.. myślałem, że coś w konfiguracji popsułem, a to jednak nie ja mam tylko te problemy

SystemZ
SystemZ Admin lvlup.pro

Ze wstępnych ustaleń wynika że nastąpiło to dziś około 02:00.

Tak czy inaczej, dodałem dla wszystkich węzłów więcej alertów odnośnie dysków i podniosłem priorytet dla tych alarmów, na przyszłość takie zdarzenia nie powinny mieć miejsca, a nawet jeśli by się zdarzyły to będą występować krócej.

DoreK
DoreK α-tester v3

Sprawdziłem logi swojego serwera i padł dopiero o 10:39:06 :V Pytanie: reinstalować mysql czy czekać?

DBanaszewski
DBanaszewski α-tester v3

To nie jest reinstalacja całego MySQL tylko aplikacji - jeżeli użyjesz opcji purge wtedy to możesz uznać reinstalacją całkowitą, gdyż pliki itp. są usuwane, a przy remove jest usuwana tylko aplikacja.

DoreK
DoreK α-tester v3

No to o to mi chodzi :thinking: Wykonałem te komendy (remove a potem install) i dalej jest ten problem XD @DBanaszewski

DBanaszewski
DBanaszewski α-tester v3

No to wiesz jaka opcja pozostała?

DoreK
DoreK α-tester v3

Zastanowię się nad tą propozycją jeszcze. @SystemZ wybacz za moje błędne info, mój serwer MC (i VPS prawdopodobnie też się ściął o tych godzinach) wyłączył się o 03:18:39 dziś i włączyłem go o 10:04:19, po czym znów się wyłączył o 10:39:06. Włączyłem go ponownie ale zauważono problem z bazą danych (wcześniej działała) i wyłączyłem wtedy VPS a potem uruchomiłem ponownie. co robić, jak żyć?

SystemZ
SystemZ Admin lvlup.pro

Po głębszej analizie mogę wyjaśnić co dokładniej miało miejsce. Jak już wspomniałem we wcześniejszym poście miejsce na dysku hosta uległo wyczerpaniu https://lvlup.rok.ovh/t/sql-error-2002-problem-z-vps/4994/#31

W momencie gdy miejsce uległo wyczerpaniu a system operacyjny Twojego VPS próbuje zapisać nowe dane i nie wystarczą mu wcześniej "zadeklarowane" bloki, może nastąpić uszkodzenie danych. Aby temu zapobiec proces odpowiedzialny za wirtualizację pauzuje VM (wirtualną maszynę) aby poczekać na moment gdy wymagane miejsce będzie dostępne na hoście, wtedy gdy miejsce się zwalnia, po kliknięciu na "start" VM wraca do normy bez problemu z danymi. Taka pauza jest przezroczysta dla systemu, po wznowieniu system działałby poprawnie, odczuwalne to jest jako "zwieszka" systemu.

Niestety tak się nie stało ze względu na fakt że prawdopodobnie VM zostało wyłączone "na twardo" a następnie włączone, a tak może wystąpić przy użyciu wyłącz/włącz w panelu klienta. Oznacza to że prawdopodobnie wszystkie otwarte i tylko po części zapisane dane mogły zostać naruszone gdyż potrzebne operacje na plikach nie zostały dokończone. Sądzę że ochroną od strony VPSa przynajmniej od strony bazy danych byłoby korzystanie z logu binarnego, w tym wypadku po restarcie VPS baza MySQL odtworzyłaby bieg zdarzeń i wycofała niekompletne operacje zostawiają stan trochę "do tyłu" lecz spójny. Nie jestem pewien czy zabezpieczyłoby to w 100% takie wypadki i czy jest to standardowa konfiguracja w dystrybucjach. Obstawiam że należy to włączyć samemu ze względu na większe zużycie miejsca na dysku.

Tak czy inaczej sądzę że sytuacja jest po części z mojej winy i sądzę że warto robić co się da aby klienci byli zadowoleni więc zobowiązuje się do bezpłatnego przywrócenia dostępnej wewnętrznej kopii zapasowej w tym konkretnym przypadku. Szczegóły zostaną ustalone już w systemie ticketów. Dla przejrzystości wspomnę że jest to zgłoszenie numer 17736.

DoreK
DoreK α-tester v3

Jak się cieszę że doszło do tego w nocy, a nie w środku dnia. Podejrzewam że strata po backupie będzie niewielka. Ciekawe tylko jak ze stratą graczy... a teraz powiem "a nie mówiłem? :>" (chodzi o to że od początku podejrzewałem problem z dyskiem hehe)

DoreK
DoreK α-tester v3

Postanowiłem zainstalować MariaDB i baza w teorii działa ale jest błąd np na forum ‘1932 - Table 'Forum.mybb_dvz_shoutbox' doesn't exist in engine‘ i w pma pokazuje że bazy bazy maja 0B+nie da się w nie wejść.