zmiana hasła (roota) w mysql
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 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 :/
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