vermin.eu.org

Specjalista IT na tru^Hopie

Entries Comments



zmiana hasła (roota) w mysql

17 August, 2005 (22:38) | debian(ized), sql | By: vermin

Pewnego pięknego dnia, konieczność losowa sprawiła, że musiałem przenieść bazy danych mysql trzymane na jednym serwerze na drugi. Mając pełna gamę rozwiązań wybrałem najprostsze - przekopiowanie katalogu /var/lib/mysql do nowej lokacji.
No i tu zaczęły się schody, czyli okazało się, że systemowy user debian-sys-maint nie może przeprowadzać stosownych operacji bo hasło zapisane w /etc/mysql/debian.cnf jest różne niż to zapisane w bazie. Oczywiście szybka akcja bydgoskiej policji czyli UPDATE mysql.user SET Password=PASSWORD(”supertajnehasło”) WHERE user=”debian-sys-maint”; w programie klienckim, potem mysqladmin -u root -p flush-privileges w konsoli (przy okazji - dostęp do administratora mysql jest zabezpieczony hasłem domyślnie) i działa! (ja wiem, można było obejrzeć konfig na źródłowej maszynie, ale w momencie gdy problem wyszedł na jaw to stary system był li-tylko wspomnieniem).
Oczywiście problemem byłoby zapomnienie hasła roota, co mogłoby, w zależności od wpisów w tabeli user bazy systemowej mysql, odciąć całkowicie możliwość tworzenia nowych baz i robienia ogólnie pojętego maintenance. Jednak i na to jest sposób!

  • Przede wszystkiem należy zastopować bazę
    /etc/init.d/mysql stop
  • Następnie należy uruchomić bazę danych w trybie pomijania sprawdzania haseł oraz ze względów bezpieczeństwa - bez obsługi połączeń sieciowych
    mysqld -user=mysql -pid-file=/var/lib/mysql/mysqld.pid \
    -socket=/var/lib/mysql/mysql.sock -datadir=/var/lib/mysql \
    -skip-grant-tables -skip-networking
  • Teraz szybkie ustawienie nowego hasła: albo podaną już komendą klienta mysql albo za pomocą mysqladmin
    mysqladmin -u root password “maksymalnietajnehasło”
  • Restart bazy i już możemy cieszyć się odzyskaną kontrolą!

Comments

Comment from edi_smooth
Time: 13/05/08, 9:33

Znalazłem jeden błąd w tym poradniku. Należy używać 2 myślników a nie jednego. Gdy używamy jednego (np: -user=mysql) to program zwróci błąd ( unknown option ‘-u’). Więc należy używać 2 myślników przed każdym argumentem:
mysqld –user=mysql –pid-file=/var/lib/mysql/mysqld.pid –socket=/var/lib/mysql/mysql.sock –datadir=/var/lib/mysql –skip-grant-tables –skip-networking

Comment from vermin
Time: 14/05/08, 15:53

jak widać po publikacji odpowiedzi były wpisane po dwa znaki. nie wiedzieć czemu WP ściął je do jednego :/

Write a comment