Unable to access MySQL after it automatically generated a temporary password

MysqlMacosOsx ElcapitanSequelpro

Mysql Problem Overview


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 ?

Mysql Solutions


Solution 1 - Mysql

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';

Solution 2 - Mysql

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');

Solution 3 - Mysql

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:

  1. Stop your MySQL server.

  2. Add the below at the end of the [mysqld] section of my.cnf file and save it.

    skip-grant-tables

  3. Start MySQL server.

  4. In terminal, type

    mysql -u root -p

to get into MySQL command prompt.

  1. In the command prompt, type

    USE mysql;

to get into the mysql database where it keeps database users.

  1. 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).

Solution 4 - Mysql

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:

  1. sudo /usr/local/mysql/support-files/mysql.server stop
  2. 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:

  1. mysql -u root -p
  2. UPDATE mysql.user SET password_expired='N', authentication_string=PASSWORD('') WHERE User='root';
  3. quit;
  4. 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.

Solution 5 - Mysql

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;

MySQL: Password Expiration and Sandbox Mode
MySQL: Password Expiration Policy
Password expiration policy in MySQL Server 5.7

Solution 6 - Mysql

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'); 

Solution 7 - Mysql

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.

Solution 8 - Mysql

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.

Solution 9 - Mysql

For Mysql 5.7 I use

> shell $ > sudo grep 'temporary password' /var/log/mysqld.log

Solution 10 - Mysql

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;

Solution 11 - Mysql

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!

Solution 12 - Mysql

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

Solution 13 - Mysql

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'

Solution 14 - Mysql

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 :

  1. Find mysql related entries from system sudo find / -name mysql

  2. Remove all mysql related entries by doing rm -rf <mysql_entries_above>

  3. Download latest mysql-server and intall it.

  4. You will be promted with a default password which you need to copy.

  5. Run mysql_secure_installation and paste that password when asked for root.

  6. Subsequently follow the steps and change admin password when prompted for.

Solution 15 - Mysql

Restarting Mysql server worked for me.

Solution 16 - Mysql

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

  1. stop your mysql server by

    /usr/local/etc/rc.d/mysql-server stop
    
  2. 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.
    
  3. find your my.cnf file and add "skip-grant-tables" to it. (normally before [Mysqldump] head)

  4. restart mysql

    /usr/local/etc/rc.d/mysql-server start
    
  5. login to mysql

    mysql -u root -p
    

    when it ask for password, just press enter and you will log into mysql

  6. select DB to use

    use mysql
    
  7. look at the table user

    select user, authentication_string,password_expired from user;
    
  8. update to blank password

    UPDATE user SET authentication_string = '', password_expired='N' WHERE User = 'root'; 
    
  9. quit mysql and make mysql stop

  10. goto file my.cnf then take "skip-grant-tables" out of file.

  11. restart mysql again with "mysql -u root -p" enter the blank password

  12. then

ALTER USER 'root'@'localhost'   IDENTIFIED WITH
    caching_sha2_password BY 'YourNewPassword';

13. quit mysql and make mysql stop 14. restart mysql again then you will login with your new password

Solution 17 - Mysql

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.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionCheetah FelidaeView Question on Stackoverflow
Solution 1 - MysqlKumar NitinView Answer on Stackoverflow
Solution 2 - MysqlLesleyView Answer on Stackoverflow
Solution 3 - MysqlAnton NikiforovView Answer on Stackoverflow
Solution 4 - MysqlMarceloView Answer on Stackoverflow
Solution 5 - MysqlDave EverittView Answer on Stackoverflow
Solution 6 - MysqlnajemnyvrahView Answer on Stackoverflow
Solution 7 - MysqlhygullView Answer on Stackoverflow
Solution 8 - Mysqljames meekView Answer on Stackoverflow
Solution 9 - Mysqlji-ruhView Answer on Stackoverflow
Solution 10 - MysqlSudarsana GudipatiView Answer on Stackoverflow
Solution 11 - MysqlCheetah FelidaeView Answer on Stackoverflow
Solution 12 - Mysqlas21View Answer on Stackoverflow
Solution 13 - MysqlShelby BedzykView Answer on Stackoverflow
Solution 14 - MysqlSouvik DasView Answer on Stackoverflow
Solution 15 - MysqlAjay KumarView Answer on Stackoverflow
Solution 16 - MysqlKuzmiraunView Answer on Stackoverflow
Solution 17 - MysqlashuiView Answer on Stackoverflow