web-dev-qa-db-fra.com

SQLSTATE [HY000] [1698] Accès refusé pour l'utilisateur 'root' @ 'localhost'. Tout essayé

Je viens d'installer Ubuntu 16.04 et d'installer un serveur Web dessus. Tout fonctionne bien, mais je ne peux pas accéder à la base de données ... J'ai tout essayé sur Internet, ici aussi, mais rien ne fonctionne ... même si je crée un nouvel utilisateur et lui octroie tous les privilèges, je ne peux pas créer de base de données: ( Dans PHP, je reçois cette erreur:

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

Lorsque j'essaie de me connecter à un terminal, cela fonctionne, mais pas avec PHP et phpmyadmin. S'il vous plaît aider.

Code 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();
    }
}
22
lamka02sk

Il s'avère que vous ne pouvez plus utiliser l'utilisateur root dans la version 5.7 sans devenir un sudoer. Cela signifie que vous ne pouvez plus exécuter mysql -u root et que vous devez faire Sudo mysql -u root à la place. 

Cela signifie également que cela ne fonctionnera plus si vous utilisez l'utilisateur root dans une interface graphique (ou supposément toute application autre que celle en ligne de commande). Pour que cela fonctionne, vous devez créer un nouvel utilisateur avec les privilèges requis et l'utiliser à la place.

Voir this answer pour plus de détails.

62
Andris

Ces étapes ont fonctionné pour moi sur plusieurs systèmes utilisant Ubuntu 16.04, Apache 2.4, MariaDB, PDO. 

  1. se connecter à MYSQL en tant que root

    mysql -u root
    
  2. Accorder des privilèges. Pour un nouvel utilisateur, exécutez:

    CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
    GRANT ALL PRIVILEGES ON *.* TO 'newuser'@'localhost';
    FLUSH PRIVILEGES;
    
  3. lier à toutes les adresses:

    Le plus simple est de commenter la ligne dans votre fichier /Etc/mysql/mariadb.conf.d/50-server.cnf ou /etc/mysql/mysql.conf.d/mysqld.cnf , selon le système que vous utilisez:

    #bind-address = 127.0.0.1 
    
  4. quittez mysql et redémarrez mysql

    exit
    service mysql restart
    

Par défaut, il se lie uniquement à localhost, mais si vous commentez la ligne, il se lie à toutes les interfaces trouvées. Commenter la ligne équivaut à bind-address = *.

Pour vérifier la liaison du service mysql, exécutez en tant que root:

netstat -tupan | grep mysql
47
leopold

Peut-être un peu tard, mais j'ai trouvé cette réponse en regardant sur Internet. Cela pourrait aider les autres avec le même problème.

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

Vous devriez maintenant pouvoir vous connecter en tant que root dans phpmyadmin.

(Trouvé ici .)

21
Matematikisto

MySQL fait la différence entre "localhost" et "127.0.0.1".

Il se peut que la racine '@' 'localhost' ne soit pas autorisée car une entrée de la table user n'autorise que la connexion root à partir de 127.0.0.1.

Cela pourrait également expliquer pourquoi certaines applications de votre serveur peuvent se connecter à la base de données et d'autres non, car il existe différentes manières de se connecter à la base de données. Et vous ne le permettez pas actuellement par "localhost".

2
adjepatatje

Les utilisateurs de mysql et de serveur sont deux choses différentes, regardez comment ajouter un utilisateur à une base de données et vous connecter avec ces informations d'identification

0
Autor69

Avec mysql Ver 14.14 Distrib 5.7.22, l'instruction de mise à jour est maintenant:

update user set authentication_string=password('1111') where user='root';
0
sebastian.roibu