Доступ запрещен для пользователя 'www-data' @ ' localhost-как с этим бороться?

вчера я столкнулся со странной проблемой. У меня есть сервер под управлением Debian с установленным PHP 4.4.4-8 и mysql 5.5.9. Этот сервер обслуживает несколько сайтов. По какой-то причине случайно я получаю эту ошибку "Доступ запрещен для пользователя" www-data " @ "localhost" (используя пароль: нет)", когда я пытаюсь загрузить веб-страницу. Если я нажму обновить, страница загрузится нормально, но после нескольких щелчков это сообщение появится снова. Имя пользователя, которое эта страница использует для подключения к серверу mysql, не является www-данными.

тут кто-нибудь сталкивался с подобной проблемой ?

6 ответов


www-data является пользователем Debian, который запускает apache и php. Если вы попытаетесь выполнить запрос, когда у вас нет действительного соединения, php / mysql попытается создать соединение с помощью <unix-user>@localhost без пароля. Вот где www-data@localhost (using password:NO) откуда.

наиболее вероятная причина, по которой это началось сейчас (хотя он работает нормально в течение 2-х лет до этого), заключается в том, что ваша нагрузка на БД увеличилась до такой степени, что некоторые соединения не могут преуспеть (возможно, из-за max_connections или max_user_connections; хотя это также может быть результатом других ограничений, таких как память, потоки и т. д.). Когда это произойдет, ваш вызов mysql_connect выдаст сообщение об ошибке и вернет FALSE. Если вам не удастся обнаружить этот сбой, то ваш следующий вызов mysql (возможно, mysql_query или mysql_select_db) попытается подключиться к www-data@localhost-таким образом, вызывая проблему, которую вы видите.

Я предлагаю включить отчетность об ошибках и отображение ошибок (как предложено @DarkMantis):

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

кроме того, убедитесь, что ваш вызов mysql_connect не предшествует @ sign; и обязательно проверьте возвращаемое значение. Это должно выглядеть примерно так:

$cxn = mysql_connect('localhost','yourusername','yourpassword');
if( $cxn === FALSE ) {  die('mysql connection error: '.mysql_error()); }

похоже, что запрос, вызывающий ошибку, происходит, когда вызывается что-то конкретное. Это может означать, что при вызове запроса вы не подключаетесь к базе данных с правильным именем пользователя/паролем.

попробуйте убедиться, что вы определенно подключены, используйте or die(mysql_error()); в конце всех переменных запроса для их отладки.

кроме того, используйте следующие две строки в верхней части файла php:

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

Это покажет вам любой маленький php ошибки, которые могут возникнуть в вашем классе / файле, которые вы, возможно, не подобрали раньше.

Если у вас все еще есть проблема после этого, пожалуйста, опубликуйте свой PHP-код, и я взгляну на него напрямую.

спасибо!


Я столкнулся с той же проблемой. Проблема была в моей конфигурации.на PHP! Я просто изменил $dbserver от "127.0.0.1" - > "localhost". теперь соединение работает снова!


использовать пароль 'NO'

(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";
?> 

деактивация безопасного режима исправлена для меня:

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

для решения этой проблемы. Мне пришлось изменить сценарий подключения с помощью

(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";
?>