Reset a MySQL root password

Use the following steps to reset a MySQL root password by using the command line interface.

Stop the MySQL service

(Ubuntu and Debian) Run the following command:

sudo /etc/init.d/mysql stop

(CentOS, Fedora, and Red Hat Enterprise Linux) Run the following command:

sudo /etc/init.d/mysqld stop

Start MySQL without a password

Run the following command. The ampersand (&) at the end of the command is required.

sudo mysqld_safe --skip-grant-tables &
for mysql 8
sudo mysqld --skip-grant-tables --shared-memory &

If the server does not start it is because it cannot create its pid file. Follow below to fix.
sudo mkdir /var/run/mysqld/
sudo chown mysql:mysql /var/run/mysqld/
Then run the top command again to start the server.

Connect to MySQL

Run the following command:

mysql -uroot

Set a new MySQL root password

Run the following command:

use mysql;

update user set authentication_string=PASSWORD("mynewpassword") where User='root';
update user set plugin="mysql_native_password" where User='root';
flush privileges;
quit

For mysql 8
mysql 8 needs more, we will set a blank password for root, restart the server normally then issue the normal change password query.

UPDATE mysql.user SET authentication_string='' WHERE user='root' and host='localhost';

Do not forget to run the normal change password command for mysql 8 after you restart the server normally.
This is the command once logged in as root but remember only once logged in to the normal running server or you will get errors.

ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';

Stop and start the MySQL service

(Ubuntu and Debian) Run the following commands:

sudo /etc/init.d/mysql stop
...
sudo /etc/init.d/mysql start

(CentOS, Fedora, and Red Hat Enterprise Linux) Run the following commands:

sudo /etc/init.d/mysqld stop
...
sudo /etc/init.d/mysqld start

Log in to the database

Test the new password by logging in to the database.

mysql -u root -p

Enter your new password when prompted.