ERROR 1130 (HY000): Host '' is not allowed to connect to this MySQL server [duplicate]
Asked Answered
C

7

176

Why oh why can I not connect to mysql?

mysql -u root -ptest101 -h xxx.xxx.xxx.xxx
ERROR 1130 (HY000): Host 'xxx.xxx.xxx.xxx' is not allowed to connect to this MySQL server

In my.cnf I have the below

# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address        = 0.0.0.0

I also ran the below...

'UPDATE mysql.user SET Password = PASSWORD('test101') WHERE User = 'root';
FLUSH PRIVILEGES;

I can access on the host machine using mysql -u root -ptest101 but not using mysql -u root -ptest101 -h xxx.xxx.xxx.xxx

Wow...why is this happening? I am n ubuntj 12.04

mysql> SELECT host FROM mysql.user WHERE User = 'root';
+---------------------------------------------+
| host                                        |
+---------------------------------------------+
| %                                           |
| 127.0.0.1                                   |
| ::1                                         | |
| localhost                                   |
+---------------------------------------------+
5 rows in set (0.00 sec)
Clearly answered 30/9, 2013 at 18:30 Comment(1)
Remember that mysql accounts aren't just usernames. they're user@host pairs, where either of the pair can be a wildcard. You might be using the right username, but did you grant the right host privileges as well?Kiel
S
420

Your root account, and this statement applies to any account, may only have been added with localhost access (which is recommended).

You can check this with:

SELECT host FROM mysql.user WHERE User = 'root';

If you only see results with localhost and 127.0.0.1, you cannot connect from an external source. If you see other IP addresses, but not the one you're connecting from - that's also an indication.

You will need to add the IP address of each system that you want to grant access to, and then grant privileges:

CREATE USER 'root'@'ip_address' IDENTIFIED BY 'some_pass';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'ip_address';

If you see %, well then, there's another problem altogether as that is "any remote source". If however you do want any/all systems to connect via root, use the % wildcard to grant access:

CREATE USER 'root'@'%' IDENTIFIED BY 'some_pass';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';

Finally, reload the permissions, and you should be able to have remote access:

FLUSH PRIVILEGES;
Shrill answered 30/9, 2013 at 18:37 Comment(13)
I did what was suggested. See that outuo above. I still get same error. I cant connect.Clearly
This post worked bucktownbell.com/?p=653Clearly
That sql statement "GRANT ALL PRIVILEGES ON . TO 'root'@'%'" need a ";" after it....Lohrman
and now it just complains that Access denied for userSetter
and after this you should do SET PASSWORD FOR 'root'@'%' = PASSWORD('MyNewPass'); mysql docs only say to update 'root'@'localhost' to "change the root password" which deceives people into believing they have changed the root password when they haven't.Setter
GRANT ALL PRIVILEGES ON . TO 'root'@'%'; Is wrong, replace the % with *Shanna
@Shanna % is correct as documented at dev.mysql.com/doc/refman/5.7/en/request-access.htmlSetter
If you get access denied for user look here.. https://mcmap.net/q/111736/-access-denied-for-user-39-root-39-39-localhost-39-while-attempting-to-grant-privileges-how-do-i-grant-privilegesSartre
This comment worked. I also had the problem where my root user was not having rights to connect from any host or my specific host. Thanks.Ide
This worked for mysql 8 as wellMonegasque
Change the bind address to 0.0.0.0 and followed by CREATE USER 'root'@'%' IDENTIFIED BY 'some_pass'; GRANT ALL PRIVILEGES ON . TO 'root'@'%'; worked like magic. I'm running two ec2 instances incase if anyone runs into trouble with that and remember to run with public IP. You can use nmap to confirm ports are exposed to outside world, just to be on the safer side.Mier
Why is this much hard? Do I need to add hosts for all users one by one?Conation
this works for me using Docker-Compose with mysql:8.0.32 & phpmyadmin:latest with this command CREATE USER 'root'@'%' IDENTIFIED BY 'some_pass'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';. Thank you so much!!Repugn
G
31

Following two steps worked perfectly fine for me:

  1. Comment out the bind address from the file /etc/mysql/my.cnf:

    #bind-address = 127.0.0.1

  2. Run following query in phpMyAdmin:

    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'; FLUSH PRIVILEGES;

Great answered 11/10, 2014 at 9:56 Comment(5)
+ sudo service mysql restartPru
Removing the bind will make the server open on ALL IP's... this is a security issue!Firestone
Works for me. Thanks man.Wafture
@AlexFrenkel But dont we have password authentication via privileges? How can you otherwise access it from a dynamic ip for debugging purpose. I can change it later for productionInutile
On mysql 8+, you need to create the user instead of implicitly creating the user with the grant statement. See: https://mcmap.net/q/80981/-how-to-grant-all-privileges-to-root-user-in-mysql-8-0Nemato
C
24

Open MySQL via terminal

mysql -u root --host=127.0.0.1 -p

Choose Database

mysql>use mysql

Grant Access

mysql>GRANT ALL ON *.* to root@'%' IDENTIFIED BY 'redhat@123';

Refresh Rights

mysql>FLUSH PRIVILEGES;

Checking Status of user

mysql> SELECT host FROM mysql.user WHERE User = 'root';
Columelliform answered 28/4, 2016 at 6:26 Comment(1)
sudo service mysql restart need to run after this thanksEyeglasses
N
2

mysql> CREATE USER 'name'@'%' IDENTIFIED BY 'passWord'; Query OK, 0 rows affected (0.00 sec)

mysql> GRANT ALL PRIVILEGES ON . TO 'name'@'%'; Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.00 sec)

mysql>

  1. Make sure you have your name and % the right way round
  2. Makes sure you have added your port 3306 to any firewall you may be running (although this will give a different error message)

hope this helps someone...

Nephritic answered 5/8, 2015 at 12:48 Comment(0)
G
-1

For those who are able to access cpanel, there is a simpler way getting around it.

  1. log in cpanel => "Remote MySQL" under DATABASES section:

  2. Add the IPs / hostname which you are accessing from

  3. done!!!

Gaol answered 16/9, 2016 at 6:9 Comment(0)
P
-7

Go to PhpMyAdmin, click on desired database, go to Privilages tab and create new user "remote", and give him all privilages and in host field set "Any host" option(%).

Pleuropneumonia answered 22/7, 2014 at 11:3 Comment(0)
B
-13

there an easy way to fix this error

just replace the files on the folder : C:\xampp\mysql\data\mysql

with the files on : C:\xampp\mysql\backup\mysql

Bottali answered 18/9, 2015 at 16:55 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.