Zaboravljena MySQL root lozinka

Baza podatakaNedavno smo na helpdesku pomogli korisniku koji je zaboravio administratorsku (root@localhost) lozinku za MySQL. Rješenje problema je da se MySQL pokrene bez tzv. GRANT tablica, odnosno da se zaobiđu tablice s dozvolama. To se radi opcijom --skip-grant-tables.

Prvo zaustavimo MySQL:

# /etc/init.d/mysql stop
Stopping MySQL database server: mysqld

Zatim ga dignemo bez GRANT tablica, slijedećom naredbom:

# mysqld_safe --skip-grant-tables --skip-networking &
Starting mysqld daemon with databases from /var/lib/mysql
mysqld_safe[7754]: started

Sada možemo pristupiti MySQL poslužitelju bez autentikacije, te izvršimo naredbe:

mysql -e "UPDATE mysql.user SET Password = PASSWORD('novipassword') 
WHERE User = 'root'"
mysql -e "FLUSH PRIVILEGES;"

Za novije inačice MySQL-a (5.7.6+) i MariaDB-a (10.1.20+) rabi se naredba ALTER USER:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'novipassword';
FLUSH PRIVILEGES;

Napomena: Ako naredba 'ALTER USER' ne radi, vjerovatno se radi o nekom većem problemu. U svakom slučaju, još možete probati upotrijebiti narebu "UPDATE ... SET":

UPDATE mysql.user SET authentication_string = PASSWORD('novipassword') WHERE User='root' AND Host='localhost';

Još nam ostaje restart MySQL-a:

# /etc/init.d/mysql restart
STOPPING server from pid file /var/run/mysqld/mysqld.pid
mysqld_safe[8310]: ended
Starting MySQL database server: mysqld.
Checking for crashed MySQL tables in the background.

Za novije Debiane naravno, rabit ćemo naredbu systemctl:

# systemctl restart mariadb

Provjerimo da li je sve u redu:

mysql -e "select now();" -p 
Enter password:
+---------------------+
| now()               |
+---------------------+
| 2006-01-27 19:37:09 |
+---------------------+

I to je to!

Kuharice: 
Kategorije: 
Vote: 
0
No votes yet