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