6

I've installed MySQL and during installation I was asked for a password which I entered, but now my teacher says that we should be able to log in as root without any password.

This works but I don't get any privileges:

login prompt username phpmyadmin

This doesn't work:

login prompt username root, password has been entered, no access

Neither does this

login prompt, username root, no password, no access

Zanna
  • 69,223
  • 56
  • 216
  • 327
Sagnik Das
  • 61
  • 1
  • 1
  • 4
  • 3
    Possible duplicate of [sudo mysql\_secure\_installation : command not found](https://askubuntu.com/questions/889727/sudo-mysql-secure-installation-command-not-found) – Yaron Jan 01 '19 at 08:31
  • Also Take a look here:[how to reset mysql root password](https://askubuntu.com/questions/489098/unable-to-reset-root-password-of-mysql) – Yaron Jan 01 '19 at 08:33
  • 1
    Open a terminal, run `mysql -u root -p` enter the password. Can you login there? – Kulfy Jan 01 '19 at 08:57
  • @kulfy I am getting "ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)" – Sagnik Das Jan 01 '19 at 14:16
  • That means you've entered wrong password. Which Ubuntu version are you using? How did you installed mysql? I tried installing MySQL in Ubuntu that I use in virtuabox and haven't got any prompt to set a password. – Kulfy Jan 01 '19 at 14:19
  • i am using ubuntu 18.10 i followed https://www.digitalocean.com/community/tutorials/how-to-install-and-secure-phpmyadmin-on-ubuntu-18-04 as no guide for 18.10 was available. – Sagnik Das Jan 01 '19 at 14:29

1 Answers1

17

Cause of the issue

The default configuration for logging in as root user in MySQL 5.7 requires use of an authentication socket. This can be verified via querying the user table:

mysql> select user,authentication_string,plugin from user where user='root';
+------+-----------------------+-------------+
| user | authentication_string | plugin      |
+------+-----------------------+-------------+
| root |                       | auth_socket |
+------+-----------------------+-------------+
1 row in set (0.00 sec)

From the documentation:

The socket plugin checks whether the socket user name (the operating system user name) matches the MySQL user name specified by the client program to the server. If the names do not match, the plugin checks whether the socket user name matches the name specified in the authentication_string column of the mysql.user system table row. If a match is found, the plugin permits the connection.

In other words, mysql by default doesn't have root password set - you need to either run phpMyAdmin as root or via sudo (both of which are bad idea for security reasons), or you change the authentication method and reset the root password as shown in Digital Ocean tutorial.

Note that aside from same name, MySQL users and system users are not the same. You can have a MySQL user jdoe and have no such user on the host system. Thus, root is MySQL's root user, not system user.

Steps to change plugin and password:

  1. open terminal and run sudo mysql -u root. You should see a greeting message and mysql> prompt. This is the MySQL shell, which is different from your command-line shell, so only SQL statements are accepted here.

  2. Enter the following sequence of SQL queries:

    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> flush privileges;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql>  UPDATE user SET plugin='mysql_native_password',authentication_string=PASSWORD('newpassword') WHERE user = 'root';
    Query OK, 1 row affected, 1 warning (0.00 sec)
    Rows matched: 1  Changed: 1  Warnings: 1
    
  3. Exit and attempt to sign in:

    mysql> exit
    Bye
    
    $ sudo systemctl restart mysql
    $ sudo mysql -u root -p
    Enter password: 
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 5
    Server version: 5.7.21-1 (Debian)
    
    Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
    
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    mysql> 
    

If everything goes well, you should be able to sign in from phpMyAdmin via the new password. If something goes wrong, attempt to restart the server without permission checking (that's step num. 3 in the Digital Ocean tutorial). For other issues, feel free to ask another question here or on Database Administrators - Stack Exchange

vim
  • 103
  • 4
Sergiy Kolodyazhnyy
  • 103,293
  • 19
  • 273
  • 492
  • The problem is that i can enter the CLI for mysql if i type >sudo mysql i get >ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO) – Sagnik Das Jan 01 '19 at 14:22
  • 1
    @SagnikDas Command is `sudo mysql -u root`. You used `sudo mysql` which is incomplete. – Kulfy Jan 01 '19 at 14:24
  • 3
    The answer by Sergiy Kolodyazhnyy worked for me but I had to do an additional restart at the end ( systemctl restart mysql ) – mcirsta Apr 03 '19 at 20:08
  • can you share answer which works for mysql 8 – Akhil Surapuram Feb 15 '21 at 14:12