iMac上MAMP的MySQL运行正常,标准连接与PHP连接却遭拒绝求助
这问题我之前帮朋友排查过类似的,咱们一步步来拆解排查:
确认MySQL是否监听TCP/IP端口
先打开终端,运行下面的命令,看看MySQL是否在监听8889端口:lsof -i :8889如果没有返回任何结果,说明你的MySQL只启用了Socket连接,没开TCP/IP支持。这时候需要修改MAMP的MySQL配置文件:
找到/Applications/MAMP/conf/my.cnf(MAMP Pro版本路径可能略有不同),打开后:- 找到
bind-address行,确保它的值是127.0.0.1(允许本地TCP连接) - 找到
skip-networking行,如果存在的话,在前面加#注释掉这一行
修改完后重启MAMP的MySQL服务,再重新运行上面的命令,应该能看到MySQL进程监听8889端口了。
- 找到
核对MAMP的端口配置
打开MAMP的偏好设置,切换到「Ports」标签页,确认MySQL的端口确实是8889。有时候不小心误改了端口,自己没察觉,就会导致连接失败。修正PDO连接字符串的写法
你的当前连接字符串把端口写在了host后面,虽然部分环境支持,但标准写法应该分开指定port参数:$db = new PDO( "mysql:host=127.0.0.1;port=8889;dbname=wabie_centraldb", "root", "root", array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET sql_mode=""') );换这种写法试试,兼容性会更好。
检查系统防火墙设置
打开iMac的「系统偏好设置」→「安全与隐私」→「防火墙」,看看是否阻止了MySQL或者PHP进程的网络连接。可以临时关闭防火墙测试,如果能正常连接,再给对应的进程添加防火墙例外规则。对比两台Mac的MAMP配置差异
既然你的MacBook上同配置正常,建议把两台机器的MAMP版本、my.cnf配置文件做个对比,看看有没有诸如TCP监听开关、端口设置、权限相关的差异。另外也可以检查两台机器的PHP版本是否一致,避免因版本兼容问题导致连接失败。尝试用localhost替代127.0.0.1
有些环境下localhost会优先走Socket,但你可以试试强制指定端口的写法:$db = new PDO( "mysql:host=localhost;port=8889;dbname=wabie_centraldb", "root", "root", array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET sql_mode=""') );如果还是不行,可以在PDO选项里明确不指定Socket,强制走TCP连接。
内容的提问来源于stack exchange,提问作者TempPeck




