【发布时间】:2014-05-25 14:57:51
【问题描述】:
我正在尝试在我的机器上位于 C:/mysql/ 的 Windows XP 上运行免安装版本的 MySQL。
当我尝试连接 MySQL 时,我在 PHP 文件中收到错误消息。
无法连接:由于目标机器主动拒绝,无法建立连接
我已经编辑了配置文件 my.ini 并更改/添加了以下内容。
[client]
port = 3306
socket = C:/mysql/tmp/mysql.sock
[mysqld]
port = 3306
socket = C:/mysql/tmp/mysql.sock
basedir = C:/mysql/
datadir = C:/mysql/data/
bind-address = 127.0.0.1
skip-networking
enable-named-pipe
当我运行 mysqld.exe 时,我可以确认它正在命令提示符任务列表中运行。 但是,当我尝试 cmd netstat -a 时,我在 3306 处看不到任何端口使用情况。
在 MySQL 错误日志中,它会读取。
140411 13:30:34 [注意] c:\mysql\bin\mysqld.exe:准备连接。 版本:'5.5.37-log' 套接字:'' 端口:0 MySQL 社区服务器(GPL)
端口:0 在我看来不正确,但我不确定。
当我在 cmd 中直接运行 mysql.exe 时,会返回以下内容
ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061)
有些事情我已经尝试过了。
- 将 my.ini 的副本放在 C:/WINDOWS 中,并将副本放在 C:/mysql 中
- 将 bind-address = 127.0.0.1 更改为 bind-address = 本地主机
- 在 PHP 文件 MySQL 连接变体中,localhost、127.0.0.1、127.0.0.1:3306 在基本 mysql_connect() 中
- 已创建 tmp/mysql.sock 文件(以防 dir + 文件不存在问题)
- 在 my.ini 中注释掉 skip-networking
- 在运行 mysqld.exe 的同时在 cmd 中运行 mysqladmin.exe 后返回“无法连接到位于 'localhost' 的 MySQL 服务器”
- 运行 telnet localhost 3306 返回 'Connecting To localhost...无法在端口 3306 上打开与主机的连接:C 连接失败'
- 注释掉 my.ini 中的 bind-address 以允许默认设置。
- 使用 root 用户 (-u root) 运行 mysqld.exe,同时在 my.ini 中插入 user = root
- 将 Windows 防火墙设置为关闭。
提前致谢。
【问题讨论】:
-
你用什么命令连接?如果你连接到 127.0.0.1 而不是
localhost,它将使用 TCP 而不是套接字,但是你有skip-networking所以它会失败。 -
你的 PHP 代码是什么样的?您可能有错误的连接字符串。
-
@Michael Berkowski 和 user2254180 我已经更新了我尝试过的列表,我应该最初包括这些,因为我已经尝试了许多 php mysql 连接变体。
-
@cecilli0n 你读过这个MySQL documentation。命名管道仅适用于 mysqld-nt 并且您正在运行 mysqld。您需要命名管道来跳过网络
-
确保您可以从控制台连接,即
mysql -h localhost dbname。