sql >> Databáze >  >> RDS >> Mysql

Přístup odepřen uživateli 'www-data'@'localhost – jak se s tím vypořádat?

www-data je uživatel Debianu, který spouští apache a php. Pokud se pokusíte o dotaz, když nemáte platné připojení, php/mysql se pokusí vytvořit připojení pomocí <unix-user>@localhost bez hesla. Zde je [email protected] (using password:NO) pochází z.

Nejpravděpodobnějším důvodem, proč se to začalo dít nyní (ačkoli to před 2 roky fungovalo dobře), je to, že zatížení vaší databáze se zvýšilo do bodu, kdy některá připojení nemohou uspět (pravděpodobně kvůli max_connections nebo max_user_connections; ačkoli to může také vyplývat z jiných omezení, jako je paměť, vlákna atd.). Když k tomu dojde, zavoláte mysql_connect zobrazí chybovou zprávu a vrátí FALSE . Pokud se vám nepodaří detekovat toto selhání, pak se vaše další volání mysql (pravděpodobně mysql_query nebo mysql_select_db) pokusí o připojení k [email protected] -- což způsobuje problém, který vidíte.

Navrhuji povolit hlášení chyb a zobrazení chyb (jak navrhuje @DarkMantis):

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

Také se ujistěte, že vaše volání na mysql_connect není před kterým je @ podepsat; a nezapomeňte zkontrolovat návratovou hodnotu. Mělo by to vypadat nějak takto:

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


  1. MySQL COALESCE a funkce NULLIF

  2. Databáze vrátila neplatnou hodnotu v QuerySet.dates()

  3. MySQL deaktivuje všechny spouštěče

  4. VYBERTE řádky MySQL, kde je dnešní datum mezi dvěma sloupci DATE