我试图在远程服务器上运行应用程序,然后通过计算机的浏览器连接此Web应用程序。连接数据库时出现错误。
错误消息是:CDbConnection failed to open the DB connection: SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost' (using password: YES)
。
我看到了很多解决方案,并尝试了一下,但是没有帮助。
当前使用的操作系统是Ubuntu 18.04,nginx版本是nginx/1.14.0 (Ubuntu)
,php版本是5.6.40
,mysql版本是5.7.24
,yii是1.1.19
版本。所有这些堆栈都安装在远程服务器上。
到目前为止,我已经尝试过;
我已检查用户是否存在。
SELECT user, host FROM mysql.user;
| user | host |
+-------------------+---------------+
| root | 127.0.0.1 |
| root | localhost |
+-------------------+---------------+
没关系。
我已经检查了mysql的运行端口。
mysql> SHOW GLOBAL VARIABLES LIKE 'PORT';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port | 3306 |
+---------------+-------+
我已经检查了授予权限;
mysql> SHOW GRANTS For root@localhost;
+----------------------------------------------------------------+
| Grants for root@localhost
|
+----------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION
| GRANT SELECT ON `root`.* TO 'root'@'localhost'
|GRANT ALL PRIVILEGES ON `xxxx`.* TO 'root'@'localhost'
| GRANT SELECT ON `xxxx`.* TO 'root'@'localhost'
| GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION |
+------------------------------------------------------------------+
mysql> SHOW GRANTS FOR CURRENT_USER();
+-----------------------------------------------------------------+
| Grants for root@127.0.0.1 |
+-----------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'127.0.0.1' WITH GRANT OPTION
|
| GRANT ALL PRIVILEGES ON `xxxx`.* TO
'root'@'127.0.0.1' |
+----------------------------------------------------------------------+
在php端,有一些文件由环境分隔。例如:development.php,test.php。
我已触发运行development.php,它包含一个连接字符串:
db' => array(
'connectionString' => 'mysql:host=127.0.0.1;dbname=xxxx',
'enableParamLogging' => $profiling,
'enableProfiling' => $profiling,
'schemaCachingDuration' => 0,
),
由另一个php文件加载的用户名和密码,如下所示:
'db' => array(
'class' => 'DbConnection',
'emulatePrepare' => true,
'username' => 'root',
'password' => 'xxxx',
'charset' => 'utf8',
'schemaCachingDuration' => 7200,
),
一切似乎都很正常。我也可以为该用户和密码连接mysql终端,如下所示:
mysql -u root -p -h 127.0.0.1
但是当我在浏览器中键入URL时,它给出了:
CDbConnection failed to open the DB connection: SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost' (using password: YES)
错误,我找不到解决方法。
答案 0 :(得分:0)
也许尝试使用localhost而不是127.0.0.1
return array(
'class' => 'CDbConnection',
'connectionString' => "mysql:host=localhost;dbname=xxxxx;port=3306",
'emulatePrepare' => true,
'username' => 'root',
'password' => 'xxxx',
'charset' => 'utf8',
'enableProfiling' => true,
'enableParamLogging' => true
);
答案 1 :(得分:0)
我找到了解决方案。
有一个我无法弄清楚的配置。在应用程序中,密码定义了多个。有些人使用ArrayHelper::merge
合并它。
因此,我认为密码存储在名为array1
的数组中。但已经在array2
使用ArrayHelper::merge($array1, $array2);
时,array2
已覆盖array1
。
我很长一段时间都想不通。
感谢您的帮助。
答案 2 :(得分:-1)
添加以下行,并检查XAMMP MySql服务器是否启动(有时xammp连接了其他数据库)。
return [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=xxx',
'username' => 'root',
'password' => 'xxx',
'charset' => 'utf8',
];