Mam bazę danych MySQL, którą „odziedziczyłem” i nie otrzymałem poświadczeń administratora. Mam jednak dostęp do skrzynki, na której działa. Czy istnieje sposób na odzyskanie poświadczeń administratora lub utworzenie nowych?
Przeczytaj i wykonaj rozdział dotyczący resetowania hasła roota w Podręczniku MySQL.
Ta procedura uruchamia demona mysql bez autoryzacji, umożliwiając połączenie bez podawania poświadczeń. W tym trybie możesz normalnie łączyć się i resetować hasła i granty. Następnie nie zapomnij ponownie uruchomić mysql z odpowiednią autoryzacją.
Jeśli jest to pudełko Debian / Ubuntu, istnieje specjalne konto ekwiwalentne root o nazwie debian-sys-maint . Możesz przeczytać hasło w /etc/mysql/debian.cnf
Za pomocą tego hasła możesz zalogować się do mysql jako debian-sys-maint, używając:
mysql --defaults-file=/etc/mysql/debian.cnf mysql
Po zalogowaniu wykonaj następujące czynności:
update user set password=password('<new password>') where user='root';
flush privileges;
quit;
root powinien być teraz dostępny przy użyciu nowego hasła:
mysql -uroot -p
Mój użytkownik root nie istniał. Na
CREATE USER root@localhost;
mam
ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
Rozwiązaniem było
mysqld_safe --skip-grant-tables &
mysql
INSERT INTO user (Host,User,Password) VALUES ('localhost', 'root', 'changethispassword');
UPDATE mysql.user SET Grant_priv='Y', Super_priv='Y' WHERE User='root';
FLUSH PRIVILEGES;
Następnie dodałem kolejno wszystkich szeregowców z niewielką pomocą:
mysql mysql -e "SELECT * FROM user WHERE User='root'\G"|grep N
(a ten może i powinien być bardziej zautomatyzowany)
Uwaga: znalezienie prawidłowej liczby „Y” w INSERT
jest PITA.
Ponieważ kroki w Podręczniku MySQL nie są bardzo jasne, próbuję odpowiedzieć tutaj w prostszym języku. (ta odpowiedź dotyczy użytkowników MacBooka OSX):
my.cnf
. (Dla mnie został umieszczony @ /Applications/XAMPP/xamppfiles/etc
. Możesz po prostu wyszukać, jeśli nie możesz go znaleźć).my.cnf
plik w dowolnym edytorze tekstu. "skip-grant-tables"
(bez cudzysłowów) na końcu [mysqld]
sekcji i zapisz plik. skip-grant-tables
opcji. Terminal
i uruchom mysql
polecenie mysql> UPDATE mysql.user SET Password=PASSWORD('MyNewPass') WHERE User='root';
mysql> FLUSH PRIVILEGES;
mysql> exit