2016-04-26 296 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

相關問題