出现 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

找到如下部分,并确认 dbuserdbpass 设置的用户名和密码正确:

$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 文件,确认 dbuserdbpass 是否正确:

sudo nano /etc/phpmyadmin/config-db.php

你应该在该文件中看到类似以下的配置:

<?php
$dbuser='admin';  // 这里的用户名应该与你 MySQL 的用户名一致
$dbpass='your_password';  // 这里的密码应该与你 MySQL 的密码一致

确保这里的 dbuserdbpass 是正确的,并且与 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';

如果显示 pluginauth_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,问题应该可以解决。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注