Доступ запрещен для пользователя "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";
?>