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.userWHEREUser='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:
CREATEUSER'root'@'ip_address' IDENTIFIED BY'some_pass';GRANTALL 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:
CREATEUSER'root'@'%' IDENTIFIED BY'some_pass';GRANTALL PRIVILEGES ON*.*TO'root'@'%';
Finally, reload the permissions, and you should be able to have remote access:
FLUSH PRIVILEGES;
Following two steps worked perfectly fine for me:
-
Comment out the bind address from the file
/etc/mysql/my.cnf
:#bind-address = 127.0.0.1
-
Run following query in phpMyAdmin:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'; FLUSH PRIVILEGES;