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();
}
}
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.
Ces étapes ont fonctionné pour moi sur plusieurs systèmes utilisant Ubuntu 16.04, Apache 2.4, MariaDB, PDO.
se connecter à MYSQL en tant que root
mysql -u root
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;
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
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
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 .)
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".
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
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';