主机A正在运行一个mysql服务器。 在A上,我可以连接到数据库:
hostA: mysql -p
我已经允许来自主机B的用户X连接。 我可以通过这个连接:
hostB: mysql -h A --protocol=TCP -p -u X
但是,我无法通过TCP连接到A的A:
hostA: mysql -h 127.0.0.1 --protocol=tcp -p
它说:
ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1' (111)
我试过以下地址:
localhost, 127.0.0.1, <hostname>, <actual ip>
my.cnf中的绑定地址是实际的IP地址。
有什么想法吗? 任何人都可以提出进一步诊断?
你的命令:
hostA: mysql -h 127.0.0.1 --protocol=tcp -p
意味着使用环路IP地址127.0.0.1通过TCP套接字连接到服务器。
看来你的mysql守护进程(mysqld)正在监听其中一个接口的IP地址。 您可以通过查看my.cnf文件来确认:
bind-address = your_server_ip_addr
并使用:
$ sudo netstat -lnp | grep mysql
如果您将bind-address指定为:
0.0.0.0 :监听所有接口,或者 127.0.0.1 :只在本地监听 你的命令应该工作。
要解决这个问题,你需要改变你的命令是这样的:
mysql -h your_sever_ip_addr --protocol=tcp -p
或者适当地改变绑定地址。
注释掉你的my.cfn文件中的bind-address重新启动deamon并尝试然后mysqld应该监听所有的接口
#bind-address=...
mysqld具有通过127.0.0.1端口3306将TCP / IP DB连接路由到套接字文件的非常恶劣的习惯。
要看到这一点,只需login到MySQL并运行此命令:
mysql> SELECT USER(),CURRENT_USER();
USER()函数告诉你如何尝试进行身份validation
CURRENT_USER()函数告诉你mysqld是如何允许你进行身份validation的
如果您看到CURRENT_USER() root@localhost ,那么TCP / IP没有被使用。
@Khaled已经提到了这样做:
mysql -h your_sever_ip_addr --protocol=tcp -p
这是你要研究的东西
运行这个命令
SELECT CONCAT(user,'@',host) RootUser,password FROM mysql.user WHERE user='root';
你应该已经有了root@localhost 。 您也应该拥有[email protected]并使用与root@localhost相同的密码,如果您[email protected] ,也可以使用不同的密码。
如果您没有[email protected] ,那么以下是如何使用与root@localhost相同的密码创build[email protected] :
CREATE TABLE mysql.roothome LIKE mysql.user; INSERT INTO mysql.roothome SELECT * FROM mysql.user WHERE user='root' AND host='localhost'; UPDATE mysql.roothome SET host='127.0.0.1'; INSERT INTO mysql.user SELECT * FROM mysql.roothome; DROP TABLE mysql.roothome; FLUSH PRIVILEGES;
以下是如何使用root@localhost的不同密码创build[email protected] :
CREATE TABLE mysql.roothome LIKE mysql.user; INSERT INTO mysql.roothome SELECT * FROM mysql.user WHERE user='root' AND host='localhost'; UPDATE mysql.roothome SET host='127.0.0.1',password=password('whateveryouwant'); INSERT INTO mysql.user SELECT * FROM mysql.roothome; DROP TABLE mysql.roothome; FLUSH PRIVILEGES;
试一试 !!!