在MySQL中使用localhost服务器的别名

5 mysql localhost

当我在办公室时,MySQL运行在一个名为"mysqldev"的特定服务器上.在我的/etc/hosts文件中,我设置了"mysqldev"以匹配此服务器的IP.到现在为止还挺好.但是,当我不在办公室使用我的笔记本电脑时,我想使用我的本地MySQL数据库,因为我在那里克隆了特定的数据库,没有互联网连接到办公室数据库.我不想更改我的脚本,而是更改我的笔记本电脑配置.所以在我的笔记本电脑上我已经开始/etc/hosts:

127.0.0.1 localhost mysqldev

但是,出于某种原因,这不能按预期工作.如果我使用localhost上的服务器登录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';

我也关闭了防火墙进行测试,并没有什么区别.会是什么呢?

Dan*_*oap 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
Run Code Online (Sandbox Code Playgroud)

评论出来:

#skip-networking
Run Code Online (Sandbox Code Playgroud)

并重新启动服务器.然后再次尝试连接.


要查找套接字的位置,请通过localhost连接并发出以下命令:

mysql> show global variables like '%socket%';
+---------------+-----------------------------+
| Variable_name | Value                       |
+---------------+-----------------------------+
| socket        | /var/run/mysqld/mysqld.sock |
+---------------+-----------------------------+
Run Code Online (Sandbox Code Playgroud)