Reputation: 2687
How do I change the MySQL root password and username in ubuntu server? Do I need to stop the mysql service before setting any changes?
I have a phpmyadmin setup as well, will phpmyadmin get updated automatically?
Upvotes: 241
Views: 721670
Reputation: 2777
Surprisingly, most of the answers here write the password in such a way that it will get logged somewhere on disk. That's bad practice.
The most secure way to reset the root mysql password (in a way that doesn't risk having it getting written to a log file) is:
sudo mysqladmin -u root password
This will prompt you to type the password in STDIN. Here's an example execution:
user@host:~$ sudo mysqladmin -u root password
New password:
Confirm new password:
user@host:~$
Upvotes: 1
Reputation: 8431
Set / change / reset the MySQL root password on Ubuntu Linux. Enter the following lines in your terminal.
sudo /etc/init.d/mysql stop
/var/run/mysqld
doesn't exist, you have to create it at first: sudo mkdir -v /var/run/mysqld && sudo chown mysql /var/run/mysqld
mysqld
configuration: sudo mysqld --skip-grant-tables &
mysql -u root mysql
YOURNEWPASSWORD
with your new password:For MySQL < 8.0
UPDATE mysql.user SET Password = PASSWORD('YOURNEWPASSWORD') WHERE User = 'root';
FLUSH PRIVILEGES;
If your MySQL uses new auth plugin, you will need to use: update user set plugin="mysql_native_password" where User='root';
before flushing privileges.
Note: on some versions, if
password
column doesn't exist, you may want to try:
UPDATE user SET authentication_string=password('YOURNEWPASSWORD') WHERE user='root';
Note: This method is not regarded as the most secure way of resetting the password, however, it works.
For MySQL >= 8.0
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'YOURNEWPASSWORD';
FLUSH PRIVILEGES;
As noted in comments by @lambart, you might need to kill the temporary password-less mysql process that you started, i.e. sudo killall -9 mysqld
and then start normal daemon: sudo service mysql start
References:
Upvotes: 328
Reputation: 417
For those who find password function doesn't work for mysql 8.0 and creating the file and doing the init are very difficult. What I did is drop the root user in the user table in the safe mode as many mentioned above. And create the root user again by referring to https://askubuntu.com/questions/766334/cant-login-as-mysql-user-root-from-normal-user-account-in-ubuntu-16-04/784347#784347, Then do
ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password(this is the plugin which specified in the user table) BY 'password';
FLUSH PRIVILEGES;
Hope someone can find this when above doesn't work. Try this way.
Upvotes: 0
Reputation: 121
The steps below worked for me. I'm using MySQL 8.* on Ubuntu
sudo systemctl stop mysql sudo systemctl status mysql
Edit the systemd config file so you can access MySQL without permission check
sudo systemctl edit mysql
Copy and paste the following 3 lines
[Service] ExecStart= ExecStart=/usr/sbin/mysqld --skip-grant-tables --skip-networking
After pasting the lines CTRL+0 to save and then CTRL+X to exit
sudo systemctl daemon-reload sudo systemctl start mysql
5.Now connect to MySQL server without password
sudo mysql -u root
6.Load the grant tables by running
mysql> FLUSH PRIVILEGES;
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'YourPasswordHere';
mysql> exit
sudo systemctl revert mysql
sudo systemctl daemon-reload
sudo systemctl restart mysql
Now connect to mysql with the new password set in step 7
You can visit this link reset root password for mysql 8 for more details.
Upvotes: 5
Reputation: 677
1.Open nano / vim to create a file with the following content and Save file as ~/mysql-pwd
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NEWPASSWORD';
sudo systemctl stop mysql
sudo mysqld -init-file=~/mysql-pwd
sudo systemctl start mysql
mysql -u root -p
. password will be your NEWPASSWORD
Upvotes: 3
Reputation: 413
In my case this option helped : https://stackoverflow.com/a/49610152/13760371
Thank you, Rahul.
except for the following moment, when I try entered command:
UPDATE mysql.user SET authentication_string=PASSWORD('YOURNEWPASSWORD'), plugin='mysql_native_password' WHERE User='root' AND Host='%';
the console issued a warning:
1681 'password' is deprecated and will be removed in a future release
cured with this command:
UPDATE mysql.user SET authentication_string=CONCAT('*', UPPER(SHA1(UNHEX(SHA1('NEWPASSWORD'))))), plugin='mysql_native_password' WHERE User='root' AND Host='localhost';
MySQL version 5.7.X
My variant:
1. > sudo service mysql stop
2. > sudo mkdir /var/run/mysqld
3. > sudo chown mysql: /var/run/mysqld
4. > sudo mysqld_safe --skip-grant-tables --skip-networking &
5. > mysql -uroot mysql
6. > UPDATE mysql.user SET authentication_string=CONCAT('*', UPPER(SHA1(UNHEX(SHA1('NEWPASSWORD'))))), plugin='mysql_native_password' WHERE User='root' AND Host='localhost';
7. > \q;
8. > sudo mysqladmin -S /var/run/mysqld/mysqld.sock shutdown
9. > sudo service mysql start
Upvotes: 16
Reputation: 1245
At first run this command:
sudo mysql
and then you should check which authentication method of your MySQL user accounts use.So run this command
SELECT user,authentication_string,plugin,host FROM mysql.user;
now you can see something like this already :
+------------------+-------------------------------------------+-----------------------+-----------+
| user | authentication_string | plugin | host |
+------------------+-------------------------------------------+-----------------------+-----------+
| root | | auth_socket | localhost |
| mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
in the table that is in the above , you can see that all of your mysql users accounts status & if you have set a password for root account before you see mysql_native_password
in plugin column instead auth_socket
.
All in all for change your root password you should run :
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
Be sure to change password to a strong password of your choosing. Then for reload your server to put your new changes into effect run this;
FLUSH PRIVILEGES;
So again check the authentication methods which has employed by your mysql , by this command:
SELECT user,authentication_string,plugin,host FROM mysql.user;
and now the output is :
+------------------+-------------------------------------------+-----------------------+-----------+
| user | authentication_string | plugin | host |
+------------------+-------------------------------------------+-----------------------+-----------+
| root | *3636DACC8616D997782ADD0839F92C1571D6D78F | mysql_native_password | localhost |
| mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
as you can see in the grant table your root account has mysql_native_password
.
now you can exit MYSQL shell
exit;
That's it.just you should restart mysql by sudo service mysql restart
.
Now you can login to mysql as a root account with your password easily.
Upvotes: 93
Reputation: 3165
Most of the answers on this topic are outdated; two major changes have occurred in MySQL up until the writing of this answer:
1- the 'Password' field in the user table has been replaced by 'authentication_string' column.
2- the 'Password' encryption function : PASSWORD("of some text") is deprecated.
Please refer to this link for further information:dev.mysql.com/doc/refman/8.0/en/resetting-permissions.html
Upvotes: 3
Reputation: 7925
I haven't seen the official steps recommended by the MySQL 8.0 guide, which were the only ones that worked for me. Here's a summary of those steps.
Stop the MySQL server if it is running. Look in /var/lib/mysql/
, /var/run/mysqld/
, or /usr/local/mysql/data/
to find the pid file with the server's process ID. Generally the file begins with either mysqld or your system's host name and ends with .pid.
Replace mysql-data-directory
and host_name
that you just found, in the following command:
$ sudo kill `sudo cat /mysql-data-directory/host_name.pid`
This command will create a text file in /tmp/mysql-init
with the SQL statement and makes the mysql user the owner. Replace in the command MyNewPass
with your own password.
$ echo "ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';" > /tmp/mysql-init && sudo chown mysql /tmp/mysql-init
Start the MySQL server by running the following command on the command line. After this the password is updated and you can close the server again with CTRL+C
.
$ sudo mysqld --user=mysql --init-file=/tmp/mysql-init &
Remove the temporary file with your password:
$ sudo rm /tmp/mysql-init
Upvotes: 1
Reputation: 2483
If you know the 'root' users password, log in to mysql with that credentials. Then execute the following query to update the password.
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_passowrd';
Upvotes: 2
Reputation: 745
I faced problems with ubuntu 18.04 and mysql 5.7, this is the solution
Try restart mysql-server before execution the comands
sudo service mysql restart
MYSQL-SERVER >= 5.7
sudo mysql -uroot -p
USE mysql;
UPDATE user SET authentication_string=PASSWORD('YOUR_PASSWORD') WHERE User='root';
UPDATE user SET plugin="mysql_native_password";
FLUSH PRIVILEGES;
quit;
MYSQL-SERVER < 5.7
sudo mysql -uroot -p
USE mysql;
UPDATE user SET password=PASSWORD('YOUR_PASSWORD') WHERE User='root';
UPDATE user SET plugin="mysql_native_password";
FLUSH PRIVILEGES;
quit;
Upvotes: 47
Reputation: 666
Setting MySQL Password
sudo /etc/init.d/mysql stop
sudo mkdir /var/run/mysqld/
sudo chown mysql /var/run/mysqld/
sudo mysqld_safe --skip-grant-tables &
sudo mysql -u root
use mysql;
update user set authentication_string=PASSWORD("New_Passwore_Here") where
User='root';
Save the changes
flush privileges; exit;
stop MySQL safe_mode and start MySQL default service
sudo /etc/init.d/mysql stop
sudo /etc/init.d/mysql start
sudo mysql -u root -p
*** Source : https://websiteforstudents.com/resetting-mysql-root-password-on-ubuntu-16-04-17-10-and-18-04-lts/
Upvotes: 0
Reputation: 2399
For Ubuntu 18.04 and mysql version 14.14 Distrib 5.7.22 follow the below step to reset the mysql password.
sudo systemctl stop mysql
sudo systemctl edit mysql
This command will open a new file in the nano editor, which you'll use to edit MySQL's service overrides. These change the default service parameters for MySQL. This file will be empty, so add the following content:
[Service]
ExecStart=
ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/run/mysqld/mysqld.pid --skip-grant-tables --skip-networking
sudo systemctl daemon-reload
sudo systemctl start mysql
sudo mysql -u root
FLUSH PRIVILEGES;
UPDATE mysql.user SET authentication_string = PASSWORD('new_password') WHEREuser = 'root';
UPDATE mysql.user SET plugin ='mysql_native_password' WHERE user = 'root';
sudo systemctl revert mysql
and finally
sudo systemctl restart mysql
Now enjoy
Upvotes: 8
Reputation: 259
You can use this command:
UPDATE mysql.user SET Password=PASSWORD('newpwd') WHERE User='root';
after that please use flush:
FLUSH PRIVILEGES;
Upvotes: 2
Reputation: 2883
What worked for me (Ubuntu 16.04, mysql 5.7):
Stop MySQL
sudo service mysql stop
Make MySQL service directory.
sudo mkdir /var/run/mysqld
Give MySQL user permission to write to the service directory.
sudo chown mysql: /var/run/mysqld
Start MySQL manually, without permission checks or networking.
sudo mysqld_safe --skip-grant-tables --skip-networking &
On another console, log in without a password.
mysql -uroot mysql
Then:
UPDATE mysql.user SET authentication_string=PASSWORD('YOURNEWPASSWORD'), plugin='mysql_native_password' WHERE User='root' AND Host='localhost';
EXIT;
Turn off MySQL.
sudo mysqladmin -S /var/run/mysqld/mysqld.sock shutdown
Start the MySQL service normally.
sudo service mysql start
Upvotes: 90
Reputation: 1865
Change the MySQL root password. In Simpler way
All these commands should be run as root.
Login through MySQL command line tool using your old password:
Step-1
mysql -uroot -p"your_old_password"
Then run below command:
Step-2
SET PASSWORD FOR root@'localhost' = PASSWORD('your_new_password');
Method-2 (First login using your old password using above command)
Run this command, which sets a password for the current user:
SET PASSWORD = PASSWORD('your_new_password');
Above command is for the current user. If you want to change the password for other user, you can put the user name instead of "root".
Upvotes: 1
Reputation: 211
This works like charm I did it for Ubuntu 16.04. Full credit to below link as I got it from there. [https://coderwall.com/p/j9btlg/reset-the-mysql-5-7-root-password-in-ubuntu-16-04-lts][1]
Stop MySQL
sudo service mysql stop
Make MySQL service directory. sudo mkdir /var/run/mysqld
Give MySQL user permission to write to the service directory.
sudo chown mysql: /var/run/mysqld
Start MySQL manually, without permission checks or networking.
sudo mysqld_safe --skip-grant-tables --skip-networking &
Log in without a password.
mysql -uroot mysql
Update the password for the root user. make sure at atleast root account gets updated by the below query. make some selection and check the existing values if you like
UPDATE mysql.user SET
authentication_string=PASSWORD('YOURNEWPASSWORD'),
plugin='mysql_native_password' WHERE User='root';
EXIT;
Turn off MySQL.
sudo mysqladmin -S /var/run/mysqld/mysqld.sock shutdown
Start the MySQL service normally.
sudo service mysql start
Upvotes: 13
Reputation: 2194
This is the solution for me. I work at Ubuntu 18.04: https://stackoverflow.com/a/46076838/2400373
But is important this change in the last step:
UPDATE mysql.user SET authentication_string=PASSWORD('YOURNEWPASSWORD'), plugin='mysql_native_password' WHERE User='root' AND Host='localhost';
Upvotes: 10
Reputation: 34231
As mysql documentation on the password() function says:
This function was removed in MySQL 8.0.11.
This invalidates pretty much all existing answers for mysql v8.0.11 and newer.
Per mysql documentation the new generic way to reset the root password is as follows:
The preceding sections provide password-resetting instructions specifically for Windows and Unix and Unix-like systems. Alternatively, on any platform, you can reset the password using the mysql client (but this approach is less secure):
Stop the MySQL server if necessary, then restart it with the --skip-grant-tables option. This enables anyone to connect without a password and with all privileges, and disables account-management statements such as ALTER USER and SET PASSWORD. Because this is insecure, if the server is started with the --skip-grant-tables option, it enables --skip-networking automatically to prevent remote connections.
Connect to the MySQL server using the mysql client; no password is necessary because the server was started with --skip-grant-tables:
shell> mysql
In the mysql client, tell the server to reload the grant tables so that account-management statements work:
mysql> FLUSH PRIVILEGES;
Then change the 'root'@'localhost' account password. Replace the password with the password that you want to use. To change the password for a root account with a different host name part, modify the instructions to use that host name.
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';
You should now be able to connect to the MySQL server as root using the new password. Stop the server and restart it normally (without the --skip-grant-tables and --skip-networking options).
Upvotes: 2
Reputation: 1507
This solution belongs to the previous version of MySQL. By logging in to MySQL using socket authentication, you can do it.
sudo mysql -u root
Then the following command could be run.
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
Details are available here .
Upvotes: 12
Reputation: 3865
The only method that worked for me is the one described here (I am running ubuntu 14.04). For the sake of clarity, these are the steps I followed:
sudo vim /etc/mysql/my.cnf
Add the following lines at the end:
[mysqld] skip-grant-tables
sudo service mysql restart
mysql -u root
use mysql
select * from mysql.user where user = 'root';
- Look at the top to determine whether the password column is called
password or authentication_string
UPDATE mysql.user set *password_field from above* = PASSWORD('your_new_password') where user = 'root' and host = 'localhost';
- Use the proper password column from above
FLUSH PRIVILEGES;
exit
sudo vim /etc/mysql/my.cnf
Remove the lines added in step 2 if you want to keep your security standards.
sudo service mysql restart
For reference : https://dev.mysql.com/doc/refman/5.7/en/resetting-permissions.html
Upvotes: 184
Reputation: 161
Stop MySQL sudo service mysql stop
Make MySQL service directory. sudo mkdir /var/run/mysqld
Give MySQL user permission to write to the service directory. sudo chown mysql: /var/run/mysqld
Start MySQL manually, without permission checks or networking. sudo mysqld_safe --skip-grant-tables --skip-networking &
5.Log in without a password. mysql -uroot mysql
6.Update the password for the root user.
UPDATE mysql.user SET authentication_string=PASSWORD('YOURNEWPASSWORD'), plugin='mysql_native_password' WHERE User='root' AND Host='%'; EXIT;
Turn off MySQL. sudo mysqladmin -S /var/run/mysqld/mysqld.sock shutdown
Start the MySQL service normally. sudo service mysql start
Upvotes: 15
Reputation: 101
You can try these some steps to reset mysql 5.7 root password :
Stop Mysql Service 1st
sudo /etc/init.d/mysql stop
Login as root without password
sudo mysqld_safe --skip-grant-tables
&
After login mysql terminal you should need execute commands more:
use mysql;
UPDATE mysql.user SET authentication_string=PASSWORD('solutionclub3@*^G'), plugin='mysql_native_password' WHERE User='root';
flush privileges;
sudo mysqladmin -S /var/run/mysqld/mysqld.sock shutdown
After you restart your mysql server If you still facing error you must visit : Reset MySQL 5.7 root password Ubuntu 16.04
Upvotes: 1
Reputation: 21902
You don't need all this. Simply log in:
mysql -u root -p
Then change the current user's password as the mysql>
prompt:
mysql> set password=password('the_new_password');
mysql> flush privileges;
Upvotes: 3
Reputation: 1682
To update the "root" Mysql user password you must have in mind that you will need of super user permissions for that. If you have super user privilegies, try the following commands:
MySQL 5.7.6 and later
sudo su
service mysql stop
mysql -u root
ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';
\q;
exit
mysql -u root -p MyNewPass
MySQL 5.7.5 and earlier
sudo su
service mysql stop
mysql -u root
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MyNewPass');
\q;
exit
mysql -u root -p MyNewPass
Upvotes: 2
Reputation: 1467
I had to go this route on Ubuntu 16.04.1 LTS. It is somewhat of a mix of some of the other answers above - but none of them helped. I spent an hour or more trying all other suggestions from MySql website to everything on SO, I finally got it working with:
Note: while it showed Enter password for user root, I didnt have the original password so I just entered the same password to be used as the new password.
Note: there was no /var/log/mysqld.log only /var/log/mysql/error.log
Also note this did not work for me:
sudo dpkg-reconfigure mysql-server-5.7
Nor did:
sudo dpkg-reconfigure --force mysql-server-5.5
Make MySQL service directory.
sudo mkdir /var/run/mysqld
Give MySQL user permission to write to the service directory.
sudo chown mysql: /var/run/mysqld
Then:
run /usr/bin/mysql_secure_installation
Output from mysql_secure_installation
root@myServer:~# /usr/bin/mysql_secure_installation
Securing the MySQL server deployment.
Enter password for user root:
VALIDATE PASSWORD PLUGIN can be used to test passwords and improve security. It checks the strength of password and allows the users to set only those passwords which are secure enough. Would you like to setup VALIDATE PASSWORD plugin?
Press y|Y for Yes, any other key for No: no Using existing password for root. Change the password for root ? ((Press y|Y for Yes, any other key for No) : y
New password:
Re-enter new password: By default, a MySQL installation has an anonymous user, allowing anyone to log into MySQL without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment.
Remove anonymous users? (Press y|Y for Yes, any other key for No) : y Success.
Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y Success.
By default, MySQL comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment.
Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
Dropping test database... Success.
Removing privileges on test database... Success.
Reloading the privilege tables will ensure that all changes made so far will take effect immediately.
Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y Success.
All done!
Upvotes: 1
Reputation: 83157
Echoing rogerdpack's comment: if you don't know the MySQL root password and you don't care about MySQL data/settings, you can reinstall it and reset the root's password as follows:
sudo apt-get remove --purge mysql-server mysql-client mysql-common
sudo rm -rf /var/lib/mysql
sudo apt-get install -y mysql-server mysql-client
During the installation, you can choose the root's password:
Upvotes: 7
Reputation: 1596
To reset or change the password enter sudo dpkg-reconfigure mysql-server-X.X
(X.X is mysql version you have installed i.e. 5.6, 5.7) and then you will prompt a screen where you have to set the new password and then in next step confirm the password and just wait for a moment. That's it.
Upvotes: 0
Reputation: 3137
The official and easy way to reset the root password on an ubuntu server...
If you are on 16.04, 14.04, 12.04:
sudo dpkg-reconfigure mysql-server-5.5
If you are on 10.04:
sudo dpkg-reconfigure mysql-server-5.1
If you are not sure which mysql-server version is installed you can try:
dpkg --get-selections | grep mysql-server
Updated notes for mysql-server-5.7
Note that if you are using mysql-server-5.7 you can not use the easier dpkg-reconfigure method shown above.
If you know the password, login and run this:
UPDATE mysql.user SET authentication_string=PASSWORD('my-new-password') WHERE USER='root';
FLUSH PRIVILEGES;
Alternatively, you can use the following:
sudo mysql_secure_installation
This will ask you a series of questions about securing your installation (highly recommended), including if you want to provide a new root password.
If you do NOT know the root password, refer to this Ubuntu-centric write up on the process.
See for more info:
https://help.ubuntu.com/16.04/serverguide/mysql.html https://help.ubuntu.com/14.04/serverguide/mysql.html
Upvotes: 101
Reputation: 361
If you know your current password, you don't have to stop mysql server. Open the ubuntu terminal. Login to mysql using:
mysql - username -p
Then type your password. This will take you into the mysql console. Inside the console, type:
> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
Then flush privileges using:
> flush privileges;
Then you are all done.
Upvotes: 5