12
votes

Accès refusé à l'utilisateur 'www-data' @ 'localhost - Comment faire face à cela?

Je suis confronté à un problème étrange hier. J'ai le serveur exécutant Debian avec PHP installé 4.4.4-8 et MySQL 5.5.9. Ce serveur sert plusieurs sites Web. Pour une raison quelconque au hasard, je reçois cette erreur "Accès refusé à l'utilisateur" www-data '@' localhost '(à l'aide du mot de passe: non) "Lorsque j'essaie de charger la page Web. Si je frappe Actualisez la page Charge normalement, mais Afer Plusieurs clics sur ce message apparaissent à nouveau. Nom d'utilisateur que cette page utilise pour se connecter à MySQL Server n'est pas www-Data.

Quelqu'un a-t-il fait face à un problème similaire?


5 commentaires

Ne pas être un alarmiste, mais je sauverrais votre db .. Schéma et tout. Cela pourrait faire des seins aussi bientôt. Les autres raisons possibles pourraient être connectées à l'échec du réseau d'une manière ou d'une erreur dans la configuration de l'utilisateur.


Utilisation de mot de passe: Non - Je me demande ce que cela signifie.


À la deuxième pensée, votre script est-il une chance que votre script essaie de se connecter à la base de données sans nom d'utilisateur et mot de passe? Par exemple. En faisant un mysql_query () sans effectuer un mysql_connect ($ nom d'hôte, $ nom d'utilisateur, $ mot de passe) ?


Le nom d'utilisateur et le mot de passe sont définis correctement


Vous devriez vérifier le mot de passe.


7 Réponses :


2
votes

On dirait que la requête qui cause que l'erreur se produit lorsque quelque chose est appelé. Cela pourrait signifier que lorsque la requête est appelée, vous n'êtes pas connecté à la base de données avec le nom d'utilisateur / mot de passe correct.

Essayez de vous assurer que vous êtes définitivement connecté, utilisez ou mourir (mysql_error ()); / Code> à la fin de toutes vos variables de requête pour les déboguer. p>

En outre, utilisez les deux lignes suivantes en haut de votre fichier PHP: p>

ini_set('error_reporting', E_ALL);
ini_set('display_errors', 1);


6 commentaires

En fait, il devrait être ini_set ('error_reporting', e_all | e_strict); ou juste ini_set ('error_reporting', -1);


Le code de la page Web n'est pas modifié pendant deux ans. Depuis maintenant, je n'ai pas vu une telle erreur. Merci de m'aider.


En fait, cela fonctionnera à la fois. E_all affichera toujours les erreurs. Mais déposé. Merci.


Dans ce cas, vous ou toute personne a changé l'un des paramètres de la base de données, peut-être modifié un utilisateur ou éventuellement (pas sûr de 100% sur ceci) a-t-il changé d'utilisateur dans le système Debian?


HowToForge.com/forums/archive/index.php/T- 9347.html Ce fil a eu un problème simulaire pour vous, peut-être que cela peut vous aider. Ce site peut également être bénéfique: linuxquestions.org/questions/linux-software-2/... Avez-vous un accès au shell au serveur qu'il fonctionne simplement sur la curiosité?


J'ai déjà googlé. Oui, j'ai accès à Shell et examine maintenant les journaux.



17
votes

www-data est l'utilisateur Debian qui exécute Apache et PHP. Si vous essayez une requête lorsque vous n'avez pas de connexion valide, PHP / MySQL tentera de créer une connexion à l'aide de @LocalHost sans mot de passe. C'est ici que www-data @ localhost (à l'aide du mot de passe: non) vient de.

La raison la plus probable que cela a commencé à se produire maintenant (bien qu'il ait été bien fonctionné pendant 2 ans avant ) Est-ce que votre charge de DB a augmenté jusqu'au point où certaines connexions sont incapables de réussir (probablement dues à max_connections, ou max_user_connections; bien que cela puisse également résulter d'autres limites telles que la mémoire, les fils, etc.). Lorsque cela se produit, votre appel à mysql_connect émettra un message d'erreur et renvoyer false . Si vous ne parviendrez pas à détecter cette défaillance, votre prochain appel MySQL (probablement mysql_Query, ou mysql_select_db) tentera la connexion à www-data @ localhost - entraînant ainsi le problème que vous voyez.

Je suggère. Activation des rapports d'erreur et l'affichage d'erreur (comme suggéré par @darkmantis): xxx

également, assurez-vous que votre appel à mysql_connect est pas précédé de un signe @ ; et assurez-vous de vérifier la valeur de retour. Il devrait ressembler à quelque chose comme ceci: xxx


4 commentaires

Je pense que je reçois la racine du problème. Trop de connections. À quoi? Augmenter ?


Bonne réponse. Beaucoup mieux que le mien xd


@jingo, vous ne devriez pas supposer que le problème provient de trop de connexions. Vous devez vous assurer que votre mysql_connect () attrape l'erreur, imprimant le message mysql_error () et terminer le script (comme décrit ci-dessus). Le message mysql_error () (pris immédiatement après mysql_connect () échoue), va probablement vous dire exactement quel est le problème. Si ce message dit quelque chose comme "MySQL: max_connections dépassés", nous saurons ce qui se passe.


Cette réponse m'a beaucoup aidé. J'ai eu une variable d'utilisateur mal saisie, il a donc été traité comme une chaîne vide. L'activation des rapports d'erreur l'a révélé.



1
votes

J'ai fait face au même problème. Le problème était dans mon config.php! J'ai simplement changé le $ dbserver de "127.0.0.1" -> "localhost". la connexion fonctionne à nouveau!


0 commentaires

-1
votes

Pour résoudre ce problème. J'ai dû changer le script de connexion en utilisant

p>

(MySQLi Object-Oriented)
<?php
$servername = "localhost";
$username = "username";
$password = "password";

// Create connection
$conn = new mysqli($servername, $username, $password);

// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully";
?> 


1 commentaires

Peut-être que ce n'est pas une solution finale, mais cela a fonctionné pour moi aussi



0
votes

Utiliser le mot de passe 'NO'

P>

(MySQLi Object-Oriented)
<?php
$servername = "localhost";
$username = "username";
$password = "password";

// Create connection
$conn = new mysqli($servername, $username, $password);

// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully";
?> 


0 commentaires

0
votes

Désactiver le mode sans échec corrigé pour moi:

Notice: mysql_connect(): SQL safe mode in effect - ignoring host/user/password information in /var/www/html/test.php on line 4


0 commentaires

1
votes

Pour des personnes absentes, cette erreur peut arriver lorsque mysql_query () est appelé après mysqli_connect () , quand il devrait être MySQLI_Query () .


0 commentaires