Reset root password mysql

  Mysql / MariaDB

n het geval dat je het root password van de mysql database vergeten bent, kan je deze resetten. Er zijn waarschijnlijk nog andere manieren maar je kan de volgende 2 in ieder geval gebruiken.

Debian en/of Ubuntu

Op een Debian systeem, of een afgeleide daarvan zoals Ubuntu is er een speciale user ‘debian-sys-maint’. deze gebruiker heeft admin privileges en word normaal gebruikt voor het afsluiten en automatische controleren van de database op corrupted tabellen. en jij kan hem gebruiken om het root password te resetten. Je kan het wachtwoord van deze user vinden in de file /etc/mysql/debian.cnf uiteraard heb je wel root acces op het systeem nodig om deze file te bekijken. Het password in deze file is random gegenereerd.

edwin@server:~$ mysql -u debian-sys-maint -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 146
Server version: 5.1.37-1ubuntu5.1 (Ubuntu)

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> use mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> update user set password=PASSWORD('geheim') where user='root';
Query OK, 3 rows affected (0.00 sec)
Rows matched: 3  Changed: 3  Warnings: 0

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> 

Password is nu gereset. je zou moeten kunnen inloggen.

Algemene manier

Deze Methode werkt ook, nadeel is dat de database gestopt moet worden, je applicaties hebben er dus last van, regel down time. ook voor deze methode heb je root toegang tot het systeem nodig.

Stop de database.

edwin@server:~$ sudo /etc/init.d/mysql stop
[sudo] password for edwin: 
 * Stopping MySQL database server mysqld                                 [ OK ] 

Start mysql in safe mode in de background, of open een extra terminal om extra commando’s uit te voeren.

edwin@server:~$ sudo mysqld_safe --skip-grant-tables & 
[1] 23016
edwin@server:~$ 100311 12:39:57 mysqld_safe Logging to syslog.
100311 12:39:57 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql

Log nu in met mysql en de user root zonder een password op te geven. en verander het password.

edwin@server:~$ mysql -u root 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.1.37-1ubuntu5.1 (Ubuntu)
 
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> update user set password=PASSWORD('geheim') where user='root';
Query OK, 0 rows affected (0.00 sec)
Rows matched: 3  Changed: 0  Warnings: 0

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> quit 
Bye

Nu moeten we mysqld_safe weer stoppen, breng het proces weer naar de voorgrond. en als dat gebeurt is druk crtl-c

edwin@server:~$ fg 
sudo mysqld_safe --skip-grant-tables
^C100311 12:40:49 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended
edwin@server:~$ 

Je kan nu mysql weer op de normale manier starten. en daarna inloggen met root user.

edwin@server:~$ sudo /etc/init.d/mysql start
[sudo] password for edwin: 
 * Starting MySQL database server mysqld                                 [ OK ] 
 * Checking for corrupt, not cleanly closed and upgrade needing tables.
edwin@server:~$