SQLSTATE [HY000] [1698]访问被拒绝用户'root'@'localhost'.尝试了一切

lam*_*2sk 42 php mysql login root

我刚刚安装了Ubuntu 16.04并在其上安装了Web服务器.一切运作良好,但我无法访问数据库.我在互联网上尝试了一切,也在这里,但没有任何作用......即使我创建新用户并授予所有权限,我也无法创建数据库:(在PHP中我得到'这个错误:

SQLSTATE[HY000] [1698] Access denied for user 'root'@'localhost'
Run Code Online (Sandbox Code Playgroud)

当我尝试登录终端时,它可以工作,但在PHP和phpmyadmin中没有.请帮忙.

PHP代码:

protected $host = '127.0.0.1';
protected $db = 'dbname';
protected $name = 'root';
protected $pass = 'root';
protected $conn;
private static $settings = array(
    PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'
);

public function __construct() {
    try {
        $this->conn = new PDO("mysql:host=$this->host;dbname=$this->db", $this->name, $this->pass, self::$settings);
    } catch (PDOException $e) {
        echo $e->getMessage();
    }
}
Run Code Online (Sandbox Code Playgroud)

And*_*ris 92

事实证明,你不能再使用root5.7中的用户而不成为sudoer.这意味着你不能再运行mysql -u root了,sudo mysql -u root而是必须做.

这也意味着如果您root在GUI(或任何非命令行应用程序)中使用用户,它将不再起作用.要使其工作,您必须创建具有所需权限的新用户并使用它.

有关详细信息,请参阅答案.

  • 哦,天哪,为什么地狱.花了我几个小时来找到它.谢谢. (16认同)
  • 非常感谢您提供此信息.你是个救世主.花了很长时间才碰到这里. (4认同)
  • 你救了我的命!非常感谢 (2认同)
  • 因此,各地的开发设置现在都必须完成一些额外的步骤,才能开始编码:( (2认同)

leo*_*old 68

这些步骤适用于使用Ubuntu 16.04,Apache 2.4,MariaDB,PDO的多个系统

  1. 以root身份登录MYSQL

    mysql -u root
    
    Run Code Online (Sandbox Code Playgroud)
  2. 授予权限.给新用户执行:

    CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
    GRANT ALL PRIVILEGES ON *.* TO 'newuser'@'localhost';
    FLUSH PRIVILEGES;
    
    Run Code Online (Sandbox Code Playgroud)
  3. 绑定到所有地址:

    最简单的方法是在/etc/mysql/mariadb.conf.d/50-server.cnf /etc/mysql/mysql.conf.d/mysqld.cnf文件中注释掉这一行 ,具体取决于你是什么系统运行:

    GRANT ALL PRIVILEGES ON `%`.* TO 'newuser'@'localhost';
    
    Run Code Online (Sandbox Code Playgroud)
  4. 退出mysql并重启mysql

    #bind-address = 127.0.0.1 
    
    Run Code Online (Sandbox Code Playgroud)

默认情况下,它仅绑定到localhost,但如果您对该行进行注释,则它会绑定到它找到的所有接口.注释掉该行等同于bind-address =*.

要检查以root身份执行的mysql服务的绑定:

exit
service mysql restart
Run Code Online (Sandbox Code Playgroud)


小智 30

也许有点晚了,但我发现这个答案在网上看.它可以帮助其他人解决同样的问题.

$sudo mysql -u root
[mysql] use mysql;
[mysql] update user set plugin='' where User='root';
[mysql] flush privileges;
[mysql] \q
Run Code Online (Sandbox Code Playgroud)

现在您应该能够在phpmyadmin中以root用户身份登录.

(在这里找到.)

  • @Matematikisto这个你命令给我带来了一个大问题,现在你的表彰后,我甚至无法使用mysql命令访问mysql,错误:mysql ERROR 1045(28000):访问被拒绝用户'root'@'localhost'(使用密码:否) (4认同)
  • @Matematikisto 我的 mysql 在您的命令之前运行良好,我只是尝试以 phpmyadmin root 身份登录,现在我什至无法通过终端使用 mysql 控制台,甚至无法使用论坛中教授的任何重新配置​​提示,每个命令都有,是一个不同的错误,在您的命令之前一切正常! (3认同)
  • 在 Debian Stretch 上安装 Nextcloud 时,此解决方案成功 (2认同)

小智 12

更改用户或删除用户并再次创建效果非常好。

DROP USER root@localhost;
CREATE USER root@localhost IDENTIFIED BY 'root_password';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost';
FLUSH PRIVILEGES;
Run Code Online (Sandbox Code Playgroud)


小智 7

简而言之,在 MariaDB 上

1) sudo mysql -u root;
2) use mysql;
3) UPDATE mysql.user SET plugin = 'mysql_native_password', 
      Password = PASSWORD('pass1234') WHERE User = 'root';
4) FLUSH PRIVILEGES;
5) exit;
Run Code Online (Sandbox Code Playgroud)


rus*_*ust 5

To create user for phpMyAdmin :

sudo mysql -p -u root
Run Code Online (Sandbox Code Playgroud)

Now you can add a new MySQL user with the username of your choice.

CREATE USER 'USERNAME'@'%' IDENTIFIED BY 'PASSWORD';
Run Code Online (Sandbox Code Playgroud)

And finally grant superuser privileges to the user you just created.

GRANT ALL PRIVILEGES ON *.* TO 'USERNAME'@'%' WITH GRANT OPTION;
Run Code Online (Sandbox Code Playgroud)

For any question, please leave a comment


小智 0

MySQL 的用户和服务器的用户是两个不同的东西。了解如何将用户添加到数据库并使用这些凭据登录。