You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

iMac上MAMP的MySQL运行正常,标准连接与PHP连接却遭拒绝求助

解决MAMP MySQL仅Socket可连、TCP/IP连接被拒的问题

这问题我之前帮朋友排查过类似的,咱们一步步来拆解排查:

  • 确认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

火山引擎 最新活动