Related
I have installed MariaDB via Homebrew after following this guide. It has been working fine, however today the root password has expired and I cannot seem to reset it with any of the —skip-grant-tables —skip-networking type options.
So far I have tried:
brew services stop mariadb
mysqld_safe --skip-grant-tables --skip-networking
mysql_secure_installation
also tried
mysql_secure_installation --connect-expired-password
Which gives me:
In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.
Enter current password for root (enter for none):
/usr/local/Cellar/mariadb/10.3.13_1/bin/mysql: unknown option '--connect-expired-password'
OK, successfully used password, moving on...
Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.
Set root password? [Y/n] Y
New password:
Re-enter new password:
/usr/local/Cellar/mariadb/10.3.13_1/bin/mysql: unknown option '--connect-expired-password'
Password update failed!
Cleaning up...
I've also added:
[mysqld]
default_password_lifetime=0
skip-grant-tables
to /usr/local/etc/my.cnf
Still doesn't let me update the root password with the above commands.
Brew doctor comes back clean and I'm running out of things to try.
Ended up running /usr/local/mysql/bin/mysqladmin -u root -p password and set a new password.
Log in
mysql -uroot
Then do
set password = password("your_password");
I had some tweaking for my server and unfortunately I can't log to phpmyadmin via whm anymore nore via ssh as I have access denied for root#localhost.
I tried to change my sql root password via whm but it give me the following error :
Unable to reset the MySQL root password.
The subprocess reported error number 1 when it ended.
Can anyone help me?
You'll have to check if you are able to login to mysql from a command prompt. Login to your server via SSH and issue a mysql. It should login to your mysql server.
If that doesn't work then do a cat /root/.my.cnf. There you should have the previous mysql root password. Copy that password and try this:
mysql -u root -p (then when prompted paste the password if you have copied earlier).
If you get an authentication failed message then that password is not the correct one and you have to manually change (you said you can't change it from WHM).
Do you use a local mysql server or a remote mysql server?
In order to change the mysql root password you have to stop the mysql service on the server and start it manually with skip grants option.
Depending on your CentOS version you have to options to stop the mysql service:
- CentOS 6.x - /etc/init.d/mysql stop
- CentOS 7.x - systemctl stop mysql
Then manually start the mysql service:
mysqld_safe --skip-grant-tables
Then issue the following:
mysql --user=root mysql
update user set Password=PASSWORD('new-password') where user='root';
flush privileges;
exit;
Restart mysql and you should be able to login with your new password. You might also want to save it in /root/.my.cnf as well.
I hope it helps!
Bogdan, seems you have to issue one more command: use mysql;
And it's quite possible that issuing the command: update user set Password=PASSWORD('new-password') where user='root';
you will be errored that there is no field Password. It happens if you're running mysql server version 5.7+. In such case change command as follows:
use mysql;update user set authentication_string=PASSWORD('new-password') where user='root';
I using mariadb and my mysql root user lost all of privelages. so everything gives me the "access denied" now.
I tried to reinstall mysql but it's looks like the configure files not deleted.
how can I fix it when I can't access to mysql table and even can't have another fress install.
by the way I using ubuntu 16.04 and according to this question
How do I restore the MySQL root user's privileges?
I think I can't do any thing except remove mariadb completely with all configure files.
------------------update------------------
I have no problem with my password, the problem is my root user has no privelages.
please don't send solutions about changing password
Enter the following lines in your terminal.
Stop the MySQL Server.
sudo /etc/init.d/mysql stop
Start the mysqld configuration.
sudo mysqld --skip-grant-tables &
Login to MySQL as root.
mysql -u root mysql
Replace YOURNEWPASSWORD with your new password!
UPDATE user SET Password=PASSWORD('YOURNEWPASSWORD') WHERE User='root'; FLUSH PRIVILEGES; exit;
I have erased and installed OSX 10.11 El Capitan and I have been following through this tutorial to get MySQL up and running on the new OS X. The first step was to download MySQL For Mac OS X 10.9 (x86, 64-bit), DMG Archive (works on 10.11, they recommended in the tutorial). While I were finishing installing the MySQL, I got the message saying that :
2015-10-25T02:10:54.549219Z 1 [Note] A temporary password is generated for root#localhost: R>gFySuiu23U
If you lose this password, please consult the section How to Reset the Root Password in the MySQL reference manual.
That was weird, I have never seen that kind of message. After that, I started MySQL via the Preference Pane and then use /usr/local/mysql/bin/mysql -v command on the terminal for another step. I got an error message saying that :
ERROR 1045 (28000): Access denied for user 'cheetah'#'localhost' (using password: NO)
I have also tried to access database through Sequel Pro using root as username and blank password, I got access denied message saying that :
Unable to connect to host 127.0.0.1 because access was denied.
Double-check your username and password and ensure that access from your current location is permitted.
MySQL said: Access denied for user 'root'#'localhost' (using password: NO)
Okay, I also tried this again using root as a username but 'R>gFySuiu23U' as a password (which was generated from MySQL). I got connection failed message saying that :
Unable to connect to host 127.0.0.1, or the request timed out.
Be sure that the address is correct and that you have the necessary privileges, or try increasing the connection timeout (currently 10 seconds).
MySQL said: Your password has expired. To log in you must change it using a client that supports expired passwords.
How could I solve this problem? I remember that MySQL has never got automatically generated a temporary password like this, hasn't it ?
Try this:
mysql -u root -h 127.0.0.1 -p
Enter password: (enter the random password here)
Ref:https://dev.mysql.com/doc/refman/5.7/en/data-directory-initialization-mysqld.html
Following this, you may reset your password using
ALTER USER 'root'#'localhost' IDENTIFIED BY 'new-password';
This is what worked for me on OS X Yosemite running MySql v5.7 (installed from the .dmg).
cd /usr/local/mysql/bin
./mysql -u root -p --connect-expired-password
(Enter the temporary password generated by the installer.)
This gets you into sandbox mode and mysql> prompt. Then set desired root password with SET PASSWORD:
SET PASSWORD FOR 'root'#'localhost' = PASSWORD('mySuperSecretPassword');
Now that the password MySQL had generated is expired, the problem is reduced to getting this password to work again (1) or generate a new one (2). This can be accomplished by running MySQL with the skip-grant-tables option which would make it ignore the access rights:
Stop your MySQL server.
Add the below at the end of the [mysqld] section of my.cnf file and save it.
skip-grant-tables
Start MySQL server.
In terminal, type
mysql -u root -p
to get into MySQL command prompt.
In the command prompt, type
USE mysql;
to get into the mysql database where it keeps database users.
Type
UPDATE user SET password_expired = 'N' WHERE User = 'root';
to let MySQL know the password is not expired (1) or
UPDATE user SET authentication_string = PASSWORD('YourNewPassword'), password_expired = 'N' WHERE User = 'root';
to assign a new password YourNewPassword to root (2).
Doing these steps under OSX 10.11 El Capitan and MySQL 5.7.X, should do the trick.
Considering that you already have MySQL installed then..
Open a terminal window and type:
sudo /usr/local/mysql/support-files/mysql.server stop
sudo mysqld_safe --skip-grant-tables
Since the command fired in the step 2 will be under on going state, you need to open another terminal window and then type:
mysql -u root -p
UPDATE mysql.user SET password_expired='N', authentication_string=PASSWORD('') WHERE User='root';
quit;
sudo /usr/local/mysql/support-files/mysql.server restart
Important: in the step 2 you must replace for your password.
Hope it will wok for you.
MySQL password expired
Resetting the password will solve the problem temporarily, however, from MySQL 5.7.4 to 5.7.10 (I think to encourage better security) the default value for the default_password_lifetime variable is 360 (about a year). For those versions, if you make no changes to this variable (or to individual user accounts) all user passwords expire after 360 days.
Typically, from a script you might get the message: "Your password has expired. To log in you must change it using a client that supports expired passwords."
So, to prevent automatic password expiry, log in as root (mysql -u root -p), then, for clients that automatically connect to the server (e.g. scripts.) change the password expiration settings for those clients:
ALTER USER 'script'#'localhost' PASSWORD EXPIRE NEVER;
or you can disable automatic password expiration for all users:
SET GLOBAL default_password_lifetime = 0;
Links:
MySQL: Password Expiration and Sandbox Mode
MySQL: Password Expiration Policy
Password expiration policy in MySQL Server 5.7
I'm running macOS Sierra(10.12.3) and I installed mysql-5.7.17-macos10.12-x86_64.dmg.
The answer from #lesley worked for me with the exception that I needed to add ./ to ensure I was calling the mysql binary in my current working directory. Which is where the aforementioned package was installed.
If you cd to /usr/local/mysql/bin and run mysql -u root -p --connect-expired-password, you could receive the following error.
mysql: unknown option '--connect-expired-password'
I did. Because simply running mysql without providing a path, called a previously installed version of the MariaDB client.
So to ensure you are executing the correct binary, you can either
provide the absolute path
/usr/local/mysql/bin/mysql -u root -p --connect-expired-password
or the relative path after changing directories
cd /usr/local/mysql/bin
./mysql -u root -p --connect-expired-password
Both ways should work. Once you are connected to the client, the instruction are the same as above from #lesley.
Enter your temporary password generated by the installer and set your new password.
SET PASSWORD FOR 'root'#'localhost' = PASSWORD('yourNewPassword');
I faced the same problem. I followed the installation process guide from https://www.ntu.edu.sg/home/ehchua/programming/sql/MySQL_HowTo.html and downloaded DMG archive and installed MySQL on my MAC OS X 10.12.2.
Finally executed the following commands on new Terminal.
cd /usr/local/mysql/bin
./mysql -u root -p --connect-expired-password
It worked.
Answer 7 worked for me: El capitan, MySQL installed from dmg and autogenerated password, but made sure to cd to /usr/local/bin/mysql before entering ./mysql -root -p Obvious, but I didn't the first time.
Now to find where all my databases and tables are and how to link them in.
For Mysql 5.7 I use
shell $ > sudo grep 'temporary password' /var/log/mysqld.log
This particular one did the trick for me:
As specified in this link: https://www.variphy.com/kb/mac-os-x-reset-mysql-root-password
Do all the steps except executing
UPDATE mysql.user SET Password=PASSWORD('NewPassword') WHERE User='root';
Execute
UPDATE mysql.user
SET authentication_string = PASSWORD('MyNewPass'), password_expired = 'N'
WHERE User = 'root' AND Host = 'localhost';
And then execute
FLUSH PRIVILEGES;
The another way to solve this issue is to use an older version of MySQL instead.
I have uninstalled MySQL version 5.7.9 for Mac OS X 10.9 (x86, 64-bit), DMG Archive and then install the older version, MySQL version 5.6.7 for Mac OS X 10.9 (x86, 64-bit), DMG Archive. This issue is solved. The given autogenerated password before finishing installation of this older version is gone and I can ultimately access the database using root as username and a blank password. Everything is working like a charm!
I installed view brew, and I had the same error message until I noticed this caveat:
We've installed your MySQL database without a root password. To secure it run:
mysql_secure_installation
To connect run:
mysql -uroot
To have launchd start mysql now and restart at login:
brew services start mysql
Or, if you don't want/need a background service you can just run:
mysql.server start
I got around this problem by running
'mysql -u root -p --connect-expired-password'
Then input the expired auto-gen password from mysql. Finally got in. Selected mysql db with
'use mysql'
and then updated user 'root' pw with
'ALTER USER 'root'#'localhost' IDENTIFIED BY 'your new password'
Installing MySQL manually by downloading packages for the first time generates a default password for root. Copy and save that. If not done somehow on successive re-installations it does not show that password.
Thus you cannot login to root.
Do the following :
Find mysql related entries from system
sudo find / -name mysql
Remove all mysql related entries by doing rm -rf <mysql_entries_above>
Download latest mysql-server and intall it.
You will be promted with a default password which you need to copy.
Run mysql_secure_installation and paste that password when asked for root.
Subsequently follow the steps and change admin password when prompted for.
Restarting Mysql server worked for me.
But in Mysql80-Server, it is more complicated than 5.7. In MySQL80 not allow you to update or change password during the config in my.cnf in state "skip grant table". So you need 3 big steps to do
I) change my.cnf to skip-grant-table
II) login MySQL with blank password & update table to blank password
III) restart mysql and login with blank password and update to new password
Step to do: (whatever, you forgot root password, temporary password gen by installation not work, etc. please follow the steps below) In my case on FreeBSD 12.2
stop your mysql server by
/usr/local/etc/rc.d/mysql-server stop
recheck again whether it is really stop (in case more serious problem than that)
/usr/local/etc/rc.d/mysql-server status
mysql is not running.
find your my.cnf file and add "skip-grant-tables" to it.
(normally before [Mysqldump] head)
restart mysql
/usr/local/etc/rc.d/mysql-server start
login to mysql
mysql -u root -p
when it ask for password, just press enter and you will log into mysql
select DB to use
use mysql
look at the table user
select user, authentication_string,password_expired from user;
update to blank password
UPDATE user SET authentication_string = '', password_expired='N' WHERE User = 'root';
quit mysql and make mysql stop
goto file my.cnf then take "skip-grant-tables" out of file.
restart mysql again with "mysql -u root -p" enter the blank password
then
ALTER USER 'root'#'localhost' IDENTIFIED WITH
caching_sha2_password BY 'YourNewPassword';
quit mysql and make mysql stop
restart mysql again then you will login with your new password
This may happens when you have installed mysql before.
Try the password you set for the last version of mysql.
This did work for me.
I have been trying to reset my MySQL root password. I have run mysqld_safe --skip-grant-tables, updated the root password, and checked the user table to make sure it is there.
Once restarting the MySQL daemon I tried logging in with the new root password that I just set and still get Access denied for user 'root' errors. I have also tried completely removing and reinstalling MySQL (including removing the my.cnf file) and still no luck. What can I do next?
SET PASSWORD FOR 'root'#'localhost' = PASSWORD('mypass');
FLUSH PRIVILEGES;
ALTER USER 'root'#'localhost' IDENTIFIED BY 'MyNewPass';
You can find Resetting the Root Password in the MySQL documentation.
Have a look at this from the MySQL reference manual:
First log in to MySQL:
mysql -u root -p
Then at the mysql prompt, run:
UPDATE mysql.user SET Password=PASSWORD('MyNewPass') WHERE User='root';
Then
FLUSH PRIVILEGES;
Look at this page for more information: Resetting the Root Password: Unix Systems
UPDATE:
For some versions of mysql, the password column is no longer available and you'll get this error:
ERROR 1054 (42S22): Unknown column 'Password' in 'field list'
In this case, use ALTER USER as shown in the answer below.
Please follow the below steps.
sudo service mysql stop
sudo mysqld_safe --skip-grant-tables
sudo service mysql start
sudo mysql -u root
use mysql;
show tables;
describe user;
update user set authentication_string=password('1111') where user='root';
FLUSH PRIVILEGES;
Log in with password "1111".
This is the updated answer for WAMP v3.0.6 and up.
In the MySQL command-line client, phpMyAdmin or any MySQL GUI:
UPDATE mysql.user
SET authentication_string=PASSWORD('MyNewPass')
WHERE user='root';
FLUSH PRIVILEGES;
In MySQL version 5.7.x there is no more password field in the MySQL table. It was replaced with authentication_string. (This is for the terminal/CLI.)
In the MySQL command-line client, phpMyAdmin or any MySQL GUI:
UPDATE mysql.user SET authentication_string=PASSWORD('MyNewPass') WHERE user='root';
FLUSH PRIVILEGES;
I searched around as well and probably some answers do fit for some situations,
my situation is Mysql 5.7 on a Ubuntu 18.04.2 LTS system:
(get root privileges)
$ sudo bash
(set up password for root db user + implement security in steps)
# mysql_secure_installation
(give access to the root user via password in stead of socket)
(+ edit: apparently you need to set the password again?)
(don't set it to 'mySecretPassword'!!!)
# mysql -u root
mysql> USE mysql;
mysql> UPDATE user SET plugin='mysql_native_password' WHERE User='root';
mysql> set password for 'root'#'localhost' = PASSWORD('mySecretPassword');
mysql> FLUSH PRIVILEGES;
mysql> exit;
# service mysql restart
Many thanks to zetacu (and erich) for this excellent answer (after searching a couple of hours...)
Enjoy :-D
S.
Edit (2020):
This method doesn't work anymore, see this question for future reference...
I found it! I forgot to hash the password when I changed it. I used this query to solve my problem:
update user set password=PASSWORD('NEW PASSWORD') where user='root';
I forgot the PASSWORD('NEW PASSWORD') and just put in the new password in plain text.
On MySQL 8.0.4+
To update the current root user:
select current_user();
set password = 'new_password';
To update another user:
set password for 'otherUser'#'localhost' = 'new_password';
To set the password policy before updating the password:
set global validate_password.policy = 0;
set password = 'new_password';
set password for 'otherUser'#'localhost' = 'new_password';
Another / better way to update the root password:
mysql_secure_installation
Do you want to stick with 5.x authentication, so you can still use legacy applications?
In my.cnf file
default_authentication_plugin = mysql_native_password
To update root:
set global validate_password.policy = 0;
alter user 'root'#'localhost' identified with mysql_native_password by 'new_password';
On MySQL 8 you need to specify the password hashing method:
ALTER USER 'root'#'localhost' IDENTIFIED WITH caching_sha2_password BY 'new-password';
This worked for me -
ALTER USER 'root'#'localhost' IDENTIFIED BY 'MyNewPass';
Chapter 4 Resetting the Root Password: Windows Systems
For MySQL 5.7.6 and later:
ALTER USER 'root'#'localhost' IDENTIFIED BY 'MyNewPass';
For MySQL 5.7.5 and earlier:
SET PASSWORD FOR 'root'#'localhost' = PASSWORD('MyNewPass');
For me, only these steps could help me setting the root password on version 8.0.19:
mysql
SELECT user,authentication_string FROM mysql.user;
ALTER USER 'root'#'localhost' IDENTIFIED WITH mysql_native_password BY 'your_pass_here';
FLUSH PRIVILEGES;
SELECT user,authentication_string FROM mysql.user;
If you can see changes for the root user, then it works.
Source: Can't set root password MySQL Server
You have to reset the password! Steps for Mac OS X (tested and working) and Ubuntu:
Stop MySQL
sudo /usr/local/mysql/support-files/mysql.server stop
Start it in safe mode:
sudo mysqld_safe --skip-grant-tables
(The above line is the whole command.)
This will be an ongoing command until the process is finished, so open another shell/terminal window and log in without a password:
mysql -u root
mysql> UPDATE mysql.user SET Password=PASSWORD('password') WHERE User='root';
Start MySQL
sudo /usr/local/mysql/support-files/mysql.server start
Your new password is 'password'.
Using the mysqladmin command-line utility to alter the MySQL password:
mysqladmin --user=root --password=oldpassword password "newpassword"
Source
For the current latest MySQL version (8.0.16), none of these answers worked for me.
After looking at several different answers and combining them together, this is what I ended up using that worked:
update user set authentication_string='test' where user='root';
I tried the answer from kta, but it didn't work for me.
I am using MySQL 8.0.
This worked for me in the MySQL command-line client (executable mysql):
SET PASSWORD FOR 'root'#'localhost' = 'yourpassword'
This is for Mac users.
On 8.0.15 (maybe already before that version) the PASSWORD() function does not work. You have to do:
Make sure you have Stopped MySQL first (above).
Run the server in safe mode with privilege bypass:
sudo mysqld_safe --skip-grant-tables
Replace this mysqld_safe with your MySQL path like in my case it was
sudo /usr/local/mysql/bin/mysqld_safe –skip-grant-tables
then you have to perform the following steps.
mysql -u root
UPDATE mysql.user SET authentication_string=null WHERE User='root';
FLUSH PRIVILEGES;
exit;
Then
mysql -u root
ALTER USER 'root'#'localhost' IDENTIFIED WITH caching_sha2_password BY 'yourpasswd';
Now just use:
SET PASSWORD FOR <user> = '<plaintext_password>'
Because 'SET PASSWORD FOR <user> = PASSWORD('<plaintext_password>')' is deprecated and will be removed in a future release.(Warning in 04/12 2021)
Please use SET PASSWORD FOR <user> = '<plaintext_password>' instead.
Update 04/12 2021 AM 2:22:07 UTC/GMT -5 hours.
Use the following statement to modify directly in the mysql command line:
mysql> SET PASSWORD FOR'root'#'localhost' = PASSWORD('newpass');
or 1.The terminal enters the bin directory of MySQL
cd /usr/local/mysql/bin
2.Open MySQL
mysql -u root -p
3.At this time you can use your default password
4.Perform operations in MySQL at this time
show databases;
5.You will be prompted to reset the root user password.
So how to reset the root password? I checked a lot of information but it didn’t take effect.
Including entering to modify the database in safe mode, using the mysqladmin command:
"Mysqladmin -u root password"your-new-password""
etc.,
Will not work.
The correct steps are as follows:
1.It is still in the cd /usr/local/mysql/bin/ directory
2.sudo su
After entering, you will be asked to enter your computer password.
When you enter it, nothing is displayed. After you enter it, press Enter
Then press enter
3.Cross the authorization verification
sh-3.2# ./mysqld_safe --skip-grant-tables &
If the execution of the command is stopped, and the execution has been completed at this time,
press Enter directly, and then exit to exit:
sh-3.2# exit
4.Re-enter MySQL at this time, no -p parameter, no password
./mysql -u root
5.Select the database MySQL (here MySQL refers to a database in MySQL,
there are other databases in MySQL, you can view it through show databases;)
use mysql;
6.Update the password of the root user in the database table:
update user set authentication_string=‘123456’ where User='root';
Note: The password field here is authentication_string,
not the password circulated on the Internet.
It is estimated that MySQL was updated later.
Re-enter MySQL and use the password you just set, is it all right?
Because you have just set to bypass the authorization authentication,
you can log in to MySQL directly without a password.
My stupid way is to restart the computer and log in to MySQL with the password again to see if the modification is effective;
Update from 2022
I've tried a few of the answer but the one that works for me is the following
ALTER USER 'root'#'localhost' IDENTIFIED BY 'MyNewPass';
Courtesy of StrongDM
Note: I'm using the MySql client for Windows 10 and I'm also logging as the root user.
In MySQL 5.7, the password is replaced
with 'authentication_string'. Use
update user set authentication_string=password('myfavpassword') where user='root';
So many comments, but I was helped by this method:
sudo mysqladmin -u root password 'my password'
In my case after installation I had got the MySQL service without a password for the root user, and I needed to set the password for my security.
A common error I run into from time to time, is that I forget the -p option, so be sure to use:
mysql -u root -p
Or just use interactive configuration:
sudo mysql_secure_installation
For macOS users, if you forget your root password, thusharaK's answer is good, but there are a few more tricks:
If you are using a system preference to start MySQL serverside, simply
sudo mysqld_safe --skip-grant-tables
might not work for you.
You have to make sure the command-line arguments are the same with the system start configuration.
The following command works for me:
/usr/local/mysql/bin/mysqld --user=_mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --log-error=/usr/local/mysql/data/mysqld.local.err --pid-file=/usr/local/mysql/data/mysqld.local.pid --keyring-file-data=/usr/local/mysql/keyring/keyring --early-plugin-load=keyring_file=keyring_file.so --skip-grant-tables
You can use
ps aux | grep mysql
to check your own.
Exit from WAMP and Stop all WAMP services.
Open Notepad and then type:
SET PASSWORD FOR 'root'#'localhost' = PASSWORD('');
Then save it to the C: drive with any name... like this "c:/example.txt"
Now go to your "wamp" folder: wamp → bin → mysql → mysql (your version) → bin
In my case the path is "C:\wamp\bin\mysql\mysql5.6.17\bin".
Now copy your path, run CMD with (Ctrl + R), and then type "cmd" (Enter).
Type cd, right click on CMD, and paste the path (Enter).
Now type (mysqld --init-file=C:\\example.txt) without braces and (Enter).
Then restart the PC or open Task Manager and kill mysqld.exe.
Start WAMP and your password will be removed...
Resetting root password.
sudo mysql --defaults-file=/etc/mysql/debian.cnf
alter user 'root'#'localhost' identified with mysql_native_password by 'new_password';
On Ubuntu,
sudo dpkg-reconfigure mysql-server-5.5
Replace 5.5 with your current version and you will be asked for the new root password.
On Mac open system preferences MySQL.
In the configuration section of MySQL, check for "Initialize Database".
Change the password in the prompt.