我尝试在远程服务器上运行应用程序,然后通过计算机的浏览器连接此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端,有一些文件被环境分开。例如:php、测试. 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
但当我在浏览器中键入网址时,它会给出:CDbConnection failed to open the DB connection: SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost' (using password: YES)
错误,但我找不到解决方法。
3条答案
按热度按时间rjjhvcjd1#
也许尝试localhost而不是127.0.0.1
qncylg1j2#
我找到解决办法了。
有一个配置我搞不懂,在应用程序中,密码定义了不止一次,还有人用
ArrayHelper::merge
来合并。所以,我认为密码存储在一个名为
array1
的数组中。但是已经在array2
中定义了在使用
ArrayHelper::merge($array1, $array2);
时,array2
覆盖了array1
,我想了很久都没弄明白,谢谢你的帮助。mqkwyuun3#
添加以下行,并检查XAMMP MySql服务器是否已启动(有时xammp连接不同的数据库)。