Przejęcie serwera WWW Debian Etch przy uruchomionym MySQL.
Zwykle uruchamiam, zatrzymuję i restartuję msyql używając:
/etc/init.d/mysql restart
Z jakiegoś powodu w tej konfiguracji otrzymuję następujące informacje:
: ~ # /etc/init.d/mysql stop
Zatrzymywanie serwera bazy danych MySQL: mysqld nie powiodło się!
Proces mysql działa poprawnie:
:~# ps aux | grep mysql
root 2045 0.0 0.1 2676 1332 ? S Jun25 0:00 /bin/sh /usr/bin/mysqld_safe
mysql 2082 0.6 10.7 752544 111188 ? Sl Jun25 18:49 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/run/mysqld/mysqld.pid --skip-external-locking --port=3306 --socket=/var/run/mysqld/mysqld.sock
root 2083 0.0 0.0 1568 504 ? S Jun25 0:00 logger -p daemon.err -t mysqld_safe -i -t mysqld
root 11063 0.0 0.0 2856 716 pts/0 S+ 17:29 0:00 grep mysql
Jestem pewien, że jest na to naprawdę łatwy sposób, ale chcę też zrozumieć, co się dzieje. Dlaczego typowy sposób nie działa dla mnie?
EDYTUJ AKTUALIZACJĘ jako aktualizację:
JBRLSVR001:/var/log/mysql# mysqladmin shutdown
JBRLSVR001:/var/log/mysql# dpkg --list mysql\*
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Installed/Config-files/Unpacked/Failed-config/Half-installed
|/ Err?=(none)/Hold/Reinst-required/X=both-problems (Status,Err: uppercase=bad)
||/ Name Version Description
+++-============================================-============================================-========================================================================================================
un mysql-client <none> (no description available)
un mysql-client-4.1 <none> (no description available)
ii mysql-client-5.0 5.0.32-7etch8 mysql database client binaries
ii mysql-common 5.0.32-7etch8 mysql database common files (e.g. /etc/mysql /my.cnf)
un mysql-common-4.1 <none> (no description available)
ii mysql-server 5.0.32-7etch8 mysql database server (meta package depending on the latest version)
un mysql-server-4.1 <none> (no description available)
ii mysql-server-5.0 5.0.32-7etch8 mysql database server binaries
zamknięcie mysqladmin działa, ale nadal jestem ciekawy, dlaczego polecenia /etc/init.d/mysql nie działają.
/tmp/mysql.sock
zamiast tego szukała ręcznej instalacji/var/run/mysqld/mysqld.sock
. Tak więc skrypt napisany przez opiekunów Debiana cicho wydawał błąd. Musisz tylko naprawićsocket=
w/etc/mysql/debian.cnf
Odpowiedzi:
powinien działać, aby zamknąć serwer.
Widzę dwie prawdopodobne możliwości:
Co
dpkg --list mysql\*
mówiCo mówi /var/log/mysql.err? Lub inne dzienniki MySQL?
EDYTOWAĆ:
Tak
mysqladmin shutdown
działało?Zgodnie z tym pakiet mysql-server jest zainstalowany (mysql-server-5.0; pakiet mysql-server to prawdopodobnie tylko skrótowy kod). Więc może zainstalowali nad nim? Bieganie
debsums mysql-server-5.0
może ci powiedzieć więcej.dpkg --listfiles mysql-server-5.0
też może pomóc ...Co tak naprawdę znajduje się w /etc/init.d/mysql? Nie sprawdziłem tej konkretnej wersji pakietu, ale powinna spróbować użyć
mysqladmin shutdown
... Może masz szczęście i tylko złamali ...źródło
Dlaczego tak się dzieje
Jest to powszechny problem podczas importowania mysql i zastępowania samej bazy danych mysql, na przykład podczas przywracania z kopii zapasowej mysqldump -A.
To dobra rzecz: prawdopodobnie chcesz wykonać kopię zapasową wszystkich użytkowników mysql, uprawnień itp. - ale może to siać spustoszenie w rzeczach takich jak użytkownik debian-sys-maint używany do czystego zamykania mysql.
Chociaż ta nowa baza danych prawdopodobnie zmieni zarówno hasło roota, jak i hasło debian-sys-maint, oczywiście nie zmieni automatycznie oczekiwanego hasła debian-sys-maint w /etc/mysql/debian.cnf. W rzeczywistości, chyba że utworzyłeś kopię zapasową tego pliku, prawdopodobnie nawet nie wiesz, jakie jest to hasło!
Resetowanie hasła root mysql (opcjonalnie)
Najpierw najważniejsze. Jeśli hasło roota mysql było inne między starymi i nowymi serwerami, możesz użyć mysqladmin, aby je naprawić:
Jednak gdy apt-get zainstaluje serwer mysql, prawdopodobnie poprosił cię o nowe hasło roota mysql i prawdopodobnie użyłeś tego samego, którego używałeś wcześniej.
Napraw hasło do systemu Debian sys Maintenance.
Teraz spójrz teraz na hasło sys debian sys, które debian utworzył dla ciebie, gdy zainstalowałeś je na nowym serwerze. (Potrzebujesz sudo, ponieważ powinien to być plik wysoce chroniony).
Teraz zaloguj się do mysql przy użyciu hasła root ustawionego powyżej:
Zresetuj hasło użytkownika debian-sys-maint i nie zapomnij opróżnić uprawnień:
Sprawdź, czy działa:
źródło
2 dodatkowe wskazówki:
Spowoduje to wyświetlenie poleceń wykonanych przez skrypt inicjujący.
zainstaluj pakiety sumy i możesz przetestować, które pakiety zostały zmodyfikowane (weryfikacja jest również dostępna dla RPM, ale IMHO działa lepiej).
źródło
"Access denied for user 'debian-sys-maint'@'localhost'"
, co było absolutnie poprawne: moja baza danych mysql nie przypisała jeszcze żadnych uprawnień, więcmysql stop
nie miała uprawnień w samej bazie danych do zamknięcia. Podręcznikmysqladmin shutdown
działał idealnie.na pewno zadziała
źródło
Zakładając, że pakiet jest nieco dziwny, problemem może być plik pid. Podejrzewam, że nowe pakiety lub skompilowana instalacja nie utworzyły / var / run / mysql / ani czegokolwiek, co jest standardem w Debianie dla pliku pid, który ma zostać zapisany, lub skrypt inicjujący szuka pliku mysqld.pid w innym miejscu. Jeśli możesz naprawić niezgodność pliku init / pid, prawdopodobnie powinno działać.
źródło
Skrypt mysql shutdown używa użytkownika debian-sys-maint do uruchomienia „mysqladmin shutdown”, odczytując hasło użytkownika z /etc/mysql/debian.cnf. Powinieneś sprawdzić, czy ten plik istnieje i czy możesz uruchomić zamknięcie mysqladmin jako ten użytkownik.
źródło
Możesz technicznie zakończyć to:
Ale możesz stracić dane?
Lepiej zapytaj kogoś na http://www.serverfault.com
źródło
Użycie „pkill mysql” również prawdopodobnie spowoduje utratę danych, zwłaszcza jeśli zostanie wywołane jako „pkill -9” :(
Polecam również użycie „sh -x”, aby zobaczyć, jaki może być problem ze skryptem inicjującym, a także możesz zajrzeć do dzienników błędów MySQL (/ var / log / mysql lub / var / lib / mysql, w zależności od konfiguracji), aby sprawdzić, czy utknął na naprawdę długo działającym zapytaniu lub czymś, a tym samym nie chce jeszcze zejść z wdziękiem.
źródło
Aby śledzić komentarz do twojego pytania, wypiszę pełną odpowiedź:
Problem polega na tym, że domyślnym gniazdem jest
/tmp/mysql.sock
źródło MySQL i/var/run/mysqld/mysqld.sock
pliki binarne Debiana.Rozwiązaniem jest ustalenie ścieżki gniazdo w
/etc/mysql/debian.cnf
, dostarczając dobrasocket=
. Lub zachowując go, ale następnie zmień ten w/etc/mysql/my.cnf
.Oto, jak się o tym dowiedziałem:
/etc/init.d/mysql
kiedy pojawia się komunikat „nieudane”, masz następującą linię:echo -e "$ps_alive processes alive and '$MYADMIN ping' resulted in\n$ping_output\n" | $ERR_LOGGER -p daemon.debug
To mnie wskazało
$MYADMIN ping
, to znaczymysqladmin --defaults-file=/etc/mysql/debian.cnf ping
. Uruchomienie tego polecenia kończy się na:Więc rzuciłem okiem
/etc/mysql/debian.cnf
i odkryłem, że to było złe gniazdo.źródło
użyj następującego polecenia:
$ mysqladmin zamknięcie
powinno to być dostępne w twoim katalogu / usr / bin.
źródło
musisz być superużytkownikiem, aby rozpocząć zatrzymywanie mysql (i większości innych usług) na Debianie.
Nie jestem pewien, czy jesteś już, czy nie ... jeśli nie, musisz zrobić jedną z nich
źródło