2016-04-26 308 views
5

我刚刚安装了Ubuntu 16.04并在其上安装了Web服务器。一切正常,但我无法访问数据库。 我想互联网上的一切,也是在这里,但没有任何工程......即使我创建新用户并授予所有权限,我无法创建数据库:( 在PHP我刚开了这个错误:SQLSTATE [HY000] [1698]访问被用户'root'@'localhost'拒绝。试了一下

SQLSTATE[HY000] [1698] Access denied for user 'root'@'localhost' 

当我尝试在终端登录,它的工作原理,但在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(); 
    } 
} 
+0

有没有代码...我只是重新安装整个Ubuntu的与Web服务器,数据库等等...现在有一件事我需要的是通过phpmyadmin或PHP下登录username root with password root ... –

+0

发布您的新用户创建&授予priv相关的代码在这里。 –

+1

创建用户:CREATE USER'username'@'localhost'IDENTIFIED BY'pass';并添加权限:授予*上的所有特权。 *到'newuser'@'localhost';然后FLUSH PRIVILEGES; ...当我这样做时,我可以登录,但不创建数据库.... –

回答

0

用户对MySQL和服务器2种不同的东西,看看如何将用户添加到数据库并使用这些creden登录tials

+1

好吧,这是我尝试过的,但即使我使用所有权限创建了第二个帐户,我也无法创建数据库。我也重新安装了服务器几次... –

2

MySQL对“localhost”和“127.0.0.1”有所区别。

可能'root'@'localhost'是不允许的,因为用户表中只有一个条目允许从127.0.0.1开始进行root用户登录。

这也可以解释为什么服务器上的某些应用程序可以连接到数据库,有些则不能,因为连接到数据库的方式有所不同。而你目前不允许通过“本地主机”。

+0

127.0.0.1的变化,仍然是一样的错误:( –

25

原来你不能在5.7中使用root用户而不成为sudoer。这意味着您不能再运行mysql -u root,而必须改为sudo mysql -u root

这也意味着,如果您在GUI(或者假设任何非命令行应用程序)中使用root用户,它将不再有效。为了使它工作,你必须创建一个具有所需特权的新用户,然后使用它。

有关更多详细信息,请参阅this答案。

+3

哦,geez,为什么地狱,让我花了几个小时找到了这个,谢谢 – klokop

+1

非常感谢这个信息。 –

+0

您拯救了我的生命!非常感谢您的致谢 –

11

这些步骤工作,我在使用Ubuntu 16.04,阿帕奇2.4,MariaDB的,PDO

  1. 日志几个系统到MySQL作为根

    mysql -u root 
    
  2. 授予权限。新用户执行:

    CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password'; 
    GRANT ALL PRIVILEGES ON *.* TO 'newuser'@'localhost'; 
    FLUSH PRIVILEGES; 
    
  3. 绑定到所有地址:

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

    #bind-address = 127.0.0.1 
    
  4. 退出MySQL和重启MySQL

    exit 
    service mysql restart 
    

默认情况下,它只是绑定到本地主机,但如果你对此有何评论它绑定到它找到的所有接口的线。注释掉该行相当于bind-address = *。

要检查mysql服务的结合执行为根:

netstat的-tupan | grep mysql

10

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

$sudo mysql -u root 
[mysql] use mysql; 
[mysql] update user set plugin='' where User='root'; 
[mysql] flush privileges; 
[mysql] \q 

现在你应该能够以root身份登录到phpmyadmin。

(找到here

+0

它对我有用。 – nicolascolman

+0

这对我不起作用 – datakid

+0

在Debian Stretch上安装Nextcloud时,这个解决方案很成功 – ste

相关问题