【问题标题】:Can't connect to MySQL through MAMP无法通过 MAMP 连接到 MySQL
【发布时间】:2014-04-29 00:55:52
【问题描述】:

所以这是包含我的凭据的数组。

'mysql' => array(
    'host' => '127.0.0.1',
    'username' => 'root',
    'password' => '*',
    'db' => 's'
)

和实际的连接

 try{
    $this->_pdo = new PDO('mysql:host=' . Config::get('mysql/host') . ';dbname=' . Config::get('mysql/db'),Config::get('mysql/username'),Config::get('mysql/username'));
}
catch(PDOException $e){
    die($e->getMessage());
}

这是我得到的错误

SQLSTATE[28000] [1045] 用户 'root'@'localhost' 的访问被拒绝(使用密码:YES)

但我知道这意味着访问被拒绝,但凭据是 100% 正确的。我还通过命令行和工作台进行了测试。

【问题讨论】:

    标签: php mysql mamp


    【解决方案1】:

    您确定设置了密码吗?如果您尝试通过命令行连接会发生什么:

    /Applications/MAMP/Library/bin/mysql -uroot
    

    另外,MAMP 中root 的密码是root。这不是深奥/黑暗的秘密。您的示例中的* 是否有效?

    在您的连接器中,您是否尝试过使用localhost 而不是127.0.0.1?我已经看到一些 MySQL 设置可以同时使用一个,但不能同时使用另一个。

    编辑:如果您以某种方式弄乱了root 密码,请不要惊慌!您仍然可以通过这种方式重置它。警告,有些人认为这种密码重置方法是“有风险的”,但对于生产服务器或野外的任何服务器通常都是如此。在您桌面上的 MAMP 中,这应该是 100% 安全的。

    首先,完全停止 MAMP。

    接下来,使用skip-grant-tables 选项从命令行再次启动它,如下所示:

    /Applications/MAMP/Library/bin/mysqld --skip-grant-tables
    

    完成后,您可以像这样使用 100% 无密码登录:

    /Applications/MAMP/Library/bin/mysql -uroot
    

    然后你可以用这个单行重置root密码:

    UPDATE user SET Password=PASSWORD('root') WHERE user='root'; FLUSH PRIVILEGES; exit;
    

    好的,现在从命令行中找到运行带有skip-grant-tables 的 MySQL 守护进程的进程,如下所示:

    ps -u [your system username] | grep "mysqld --skip-grant-tables"
    

    应该返回一个包含两个项目的列表:一个是mysqld,另一个是你刚刚发出的命令。像这样的:

    502  1759 ttys004    0:00.11 /Applications/MAMP/Library/bin/mysqld --skip-grant-tables
    502  1766 ttys004    0:00.00 grep mysqld
    

    好的,现在我们知道 mysqldskip-grant-tables 的进程 ID 为 1759,继续像这样杀死它:

    kill 1759
    

    再次重新启动 MAMP,root 密码现在应该可以正常工作了。

    【讨论】:

    • 我收到ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)* 只是一个占位符。还尝试了localhost 而不是127.0.0.1
    • 好吧,看起来您正在建立连接,但是您的 MySQL 凭据被占用了?你做了什么造成的吗?没有责备,但它发生了。
    • @user302975 “hosed”是指您重置了密码,但没有按预期进行。查看我的编辑,了解如何强制重置 root 密码。
    • 在做/Applications/MAMP/Library/bin/mysql -uroot时我仍然得到ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/Applications/MAMP/tmp/mysql/mysql.sock' (2)
    • 这帮助解决了两天的问题......互联网上唯一有效的东西......谢谢!
    【解决方案2】:

    尝试将端口添加到您的阵列!对我来说,它奏效了!端口默认为 8889。您可以通过转到 MAMP>Preferences,然后转到 Ports 选项卡来更改它。这是我的想法(我还没有尝试过!):

    'mysql' => array(
        'host' => '127.0.0.1',
        'username' => 'root',
        'password' => '*',
        'port' => '8889',
        'db' => 's'
    )
    

    【讨论】:

      【解决方案3】:

      你用了两次Config::get('mysql/username'),第二次应该是Config::get('mysql/password')

      【讨论】:

      • 让连接字符串先回显,看看是否正确! $s='mysql:host=' . Config::get('mysql/host') . ';dbname=' . Config::get('mysql/db').','.Config::get('mysql/username').','.Config::get('mysql/password'); echo $s;
      • 我收到mysql:host=127.0.0.1;dbname=s,root,Array
      • 这意味着您的mysql密码在配置中没有正确设置。也许你只是打错了什么?
      • 我想我现在可以工作了,因为我有mysql:host=127.0.0.1;dbname=s,root,*,但现在我得到了Parse error: syntax error, unexpected 'new' (T_NEW) in /Users/idrisk/Desktop/localhost/classes/DB.php on line 12
      • 没关系。我忘记了=,但现在又一个问题。我得到SQLSTATE[42000] [1044] Access denied for user ''@'localhost' to database 's,root,*'
      猜你喜欢
      • 2015-01-02
      • 2013-04-14
      • 2013-10-18
      • 2015-02-01
      • 1970-01-01
      • 2014-03-28
      • 2011-06-17
      • 2014-10-18
      • 2014-11-25
      相关资源
      最近更新 更多