出现 mysqli::real_connect(): (HY000/1045): Access denied for user 'admin'@'localhost' (using password: YES)
错误,表示 phpMyAdmin
无法连接到 MySQL 数据库,可能是由于以下几个原因:
1. 用户名或密码错误
- 这个错误通常表示 MySQL 用户名或密码不正确。请确保你使用的 MySQL 用户名和密码是正确的。
检查用户名和密码是否正确:
你可以尝试通过命令行手动登录 MySQL,使用你在 phpMyAdmin
中配置的用户名和密码:
mysql -u admin -p
输入密码,看看是否能够成功登录。如果登录失败,说明用户名或密码错误。
如果你忘记了 MySQL 用户密码,可以重置密码:
sudo mysql
然后执行以下命令重置 admin
用户的密码(将 your_new_password
替换为新密码):
ALTER USER 'admin'@'localhost' IDENTIFIED BY 'your_new_password';
FLUSH PRIVILEGES;
EXIT;
2. 权限问题
- 即使用户名和密码正确,用户可能没有足够的权限访问数据库。
检查用户权限:
进入 MySQL 控制台:
sudo mysql
然后执行以下命令,检查 admin
用户是否有足够权限:
SHOW GRANTS FOR 'admin'@'localhost';
如果发现 admin
用户没有足够权限,你可以授予该用户适当的权限:
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' IDENTIFIED BY 'your_new_password' WITH GRANT OPTION;
FLUSH PRIVILEGES;
3. phpMyAdmin
配置文件中的数据库配置
- 如果你的 MySQL 用户名和密码正确,且有足够权限,那么检查
phpMyAdmin
的配置文件是否配置正确。
编辑 phpMyAdmin
的配置文件:
在 Ubuntu 上,phpMyAdmin
的配置文件通常位于 /etc/phpmyadmin/config.inc.php
。
打开该文件:
sudo nano /etc/phpmyadmin/config.inc.php
找到如下部分,并确认 dbuser
和 dbpass
设置的用户名和密码正确:
$cfg['Servers'][$i]['user'] = 'admin';
$cfg['Servers'][$i]['password'] = 'your_password';
确保这些信息与你 MySQL 的 admin
用户一致。
4. MySQL 身份验证插件问题
- 在某些系统上,MySQL 用户可能使用了
auth_socket
插件进行身份验证,这与传统的密码验证方式不同。
检查是否使用 auth_socket
插件:
进入 MySQL 控制台:
sudo mysql
然后执行以下命令查看 admin
用户是否使用了 auth_socket
插件:
SELECT user, host, plugin FROM mysql.user WHERE user = 'admin';
如果结果显示 plugin
列中是 auth_socket
,则需要将其更改为 mysql_native_password
,以便 phpMyAdmin
可以使用密码进行身份验证:
ALTER USER 'admin'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password';
FLUSH PRIVILEGES;
总结
- 检查用户名和密码是否正确。
- 检查 MySQL 用户是否有足够的权限。
- 确认
phpMyAdmin
配置文件中的数据库配置正确。 - 检查是否有身份验证插件问题,确保使用
mysql_native_password
插件。
完成这些步骤后,重新尝试登录 phpMyAdmin
,看看是否能够解决问题。如果有其他问题或需要进一步帮助,请告诉我!
从你提供的 phpMyAdmin
配置文件来看,这个文件的主要部分从 dbconfig-common
加载数据库配置信息。这意味着用户名和密码等数据库连接参数从 /etc/phpmyadmin/config-db.php
文件中读取,而不是直接在 config.inc.php
文件中配置。
要解决 mysqli::real_connect(): Access denied
问题,以下是需要检查和操作的步骤:
1. 检查 /etc/phpmyadmin/config-db.php
文件中的数据库连接配置
打开 /etc/phpmyadmin/config-db.php
文件,确认 dbuser
和 dbpass
是否正确:
sudo nano /etc/phpmyadmin/config-db.php
你应该在该文件中看到类似以下的配置:
<?php
$dbuser='admin'; // 这里的用户名应该与你 MySQL 的用户名一致
$dbpass='your_password'; // 这里的密码应该与你 MySQL 的密码一致
确保这里的 dbuser
和 dbpass
是正确的,并且与 MySQL 的配置匹配。
2. 手动设置 config.inc.php
文件中的用户名和密码(可选)
如果你不想依赖 /etc/phpmyadmin/config-db.php
,你也可以直接在 config.inc.php
文件中手动设置用户名和密码。
在文件中添加以下内容:
$cfg['Servers'][$i]['user'] = 'admin'; // MySQL 用户名
$cfg['Servers'][$i]['password'] = 'your_password'; // MySQL 用户密码
将此内容放在 config.inc.php
的服务器配置部分,如:
if (!empty($dbname)) {
$cfg['Servers'][$i]['auth_type'] = 'cookie';
$cfg['Servers'][$i]['host'] = $dbserver;
$cfg['Servers'][$i]['user'] = 'admin'; // 添加用户名
$cfg['Servers'][$i]['password'] = 'your_password'; // 添加密码
}
3. 确保 MySQL 用户有适当权限
确保 admin
用户有足够的权限访问 phpMyAdmin
需要的数据库。如果 MySQL 用户权限不足,可能会导致访问被拒绝。
进入 MySQL 控制台并检查用户权限:
sudo mysql
然后执行以下命令,查看用户权限:
SHOW GRANTS FOR 'admin'@'localhost';
如果发现权限不足,可以授予用户更多权限:
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' IDENTIFIED BY 'your_password';
FLUSH PRIVILEGES;
4. 确认 MySQL 身份验证方式
确保 admin
用户的身份验证方式为 mysql_native_password
而不是 auth_socket
。你可以使用以下命令来检查:
SELECT user, host, plugin FROM mysql.user WHERE user = 'admin';
如果显示 plugin
为 auth_socket
,则修改为 mysql_native_password
:
ALTER USER 'admin'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password';
FLUSH PRIVILEGES;
总结
检查并确保 /etc/phpmyadmin/config-db.php
文件中的数据库配置正确,或者手动在 config.inc.php
中添加数据库连接信息。同时,确认 MySQL 用户有足够的权限,并使用 mysql_native_password
身份验证方式。
完成这些检查后,重新尝试访问 phpMyAdmin
,问题应该可以解决。