无法通过MAMP连接到MySQL

问题描述 投票:4回答:3

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

'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'的访问被拒绝(使用密码:是)

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

php mysql mamp
3个回答
5
投票

您确定设置了密码吗?如果您尝试通过命令行连接,会发生以下情况:

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

此外,MAMP中root的密码为root。这不是深奥/秘密的秘密。您的示例中的*有效吗?

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

EDIT:如果您以某种方式破坏了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密码现在应该可以正常工作。


1
投票

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

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

0
投票

您两次使用Config::get('mysql/username'),第二个应该是Config::get('mysql/password')

© www.soinside.com 2019 - 2024. All rights reserved.