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

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

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

Ответ 1

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

Наиболее вероятная причина, по которой это началось сейчас (хотя она работает нормально в течение двух лет) заключается в том, что ваша загрузка db увеличилась до такой степени, что некоторые соединения не могут быть успешными (вероятно, из-за 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 не предшествует знак @; и не забудьте проверить возвращаемое значение. Он должен выглядеть примерно так:

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

Ответ 2

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

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

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

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

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

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

Спасибо!

Ответ 3

я столкнулся с той же проблемой. Проблема была в моем config.php! Я просто изменил $dbserver. "127.0.0.1" → "localhost". Теперь соединение снова работает!

Ответ 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";
?> 

Ответ 5

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

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

Ответ 6

Для рассеянных людей эта ошибка может произойти, когда mysql_query() вызывается после mysqli_connect(), когда это должно быть mysqli_query().

Ответ 7

Для решения этой проблемы. Мне пришлось изменить соединение script Использование

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