当我在办公室时,MySQL在特定的服务器上运行,该服务器称为“ mysqldev”。 在我的/etc/hosts文件中,我设置了“ mysqldev”以匹配该服务器的IP。 到目前为止,一切都很好。 但是,当我使用笔记本电脑不在办公室时,我想使用本地的MySQL数据库,因为我在那里克隆了特定的数据库,并且没有互联网可以连接到办公室数据库。 我不想更改脚本,而是要更改笔记本电脑配置。 所以在我的笔记本电脑上,我已经在/etc/hosts设置了:

127.0.0.1 localhost mysqldev

但是,由于某些原因,此操作无法按预期进行。 如果我使用本地主机上的服务器登录到MySQL,一切都很好。 但是,当我尝试登录mysqldev服务器(与localhost相同的IP)时,出现错误:

Warning: mysqli::mysqli() [mysqli.mysqli]: [2002] Connection refused (trying to connect via tcp://mysqldev:3306)

(这是使用PHP,但是使用命令行是相同的错误)

在系统上设置的用户具有登录此服务器的特定权限:

CREATE USER 'test'@'mysqldev' IDENTIFIED BY '123';

GRANT ALL PRIVILEGES ON testdb.* TO 'test'@'mysqldev';

我还关闭了防火墙进行测试,并且没有任何区别。 会是什么呢?

===============>>#1 票数:6 已采纳

MySQL客户端库尝试猜测如何连接到数据库。 当您将localhost作为主机名时,它假定您正在使用本地套接字(在计算机上搜索名为mysql.sock的文件,可能在/var/lib/mysql/usr/local/mysql/

但是,当您使用其他任何内容(例如ip地址,其他主机名,或者您的情况是mysqldev ,它将尝试通过tcp连接到主机。 从错误消息中,似乎您的本地mysql服务器未在tcp端口3306上侦听(mysql默认)

检查时,如果你的my.cnf(可能/etc/my.cnf/etc/mysql/my.cnf )允许使用TCP的。 如果您找到类似

skip-networking

注释掉:

#skip-networking

并重新启动服务器。 然后重试连接。


要找出您的套接字在哪里,请通过localhost连接并发出以下命令:

mysql> show global variables like '%socket%';
+---------------+-----------------------------+
| Variable_name | Value                       |
+---------------+-----------------------------+
| socket        | /var/run/mysqld/mysqld.sock |
+---------------+-----------------------------+

===============>>#2 票数:0

如果您正在使用MAMP Pro并遇到问题,则可以简单地取消选中MySQL Server设置中标有“仅允许本地访问”的框。

  ask by translate from so

未解决问题?本站智能推荐: