[Apache, Mysql] MySQL "verschwindet" kurzfristig

Matthiasnet

Well-known member
ID: 116869
L
14 August 2006
271
7
Hallo,

ich habe auf einem Server das Betriebssystem ubuntu 10.04 LTS Minimalsystem (64 Bit) und apache, php, mysql installiert.
Lief ne ganze Weile ganz gut und konnte problemlos drauf entwickeln.

Plötzlich, ohne etwas am Server zu verstellen, ist die MySql über´s Web nur manchmal zu erreichen.
D.h. auf Seiten von php kriege ich folgende Meldung:
Warning: mysql_select_db() expects parameter 2 to be resource, null given in /var/www/forentool/includes/mysql.class.php on line 29 Fatal error: Uncaught exception 'ExcMySql_critical_error' with message 'DB konnte nicht ausgewählt werden!

Rufe ich ip/phpmyadmin/ auf, kriege ich folgendes:
Code:
Warning: Invalid argument supplied for foreach() in /usr/share/phpmyadmin/libraries/Message.class.php on line 734
in #
Warning: Invalid argument supplied for foreach() in /usr/share/phpmyadmin/libraries/Message.class.php on line 734

Backtrace

Warning: Invalid argument supplied for foreach() in /usr/share/phpmyadmin/libraries/Error.class.php on line 278

Sehr merkwürdig, da es sich nur um einige (1-20) Sekunden handelt!
Anschließend klappt wieder alles wunderbar (zumindest 1-2 min)

Wenn ich mich auf dem Server einlogge und mit mysql show database; aufrufe, kriege ich jedoch immer alle Tabelen geliefert - mysql ist also die ganze zeit funktionstüchtig via kommandozeile (auch wenn MySQL im Web gerade abgeschmiert ist).

Jemand eine Idee?
Ist erst meine zweite Serverinstallation, bin also relativ frisch drin.

Grüße
Matthiasnet

EDIT:
Apache neustart behebt das Problem nur für einige Tage
 
Zuletzt bearbeitet:
Wenn ich mich auf dem Server einlogge und mit mysql show database; aufrufe, kriege ich jedoch immer alle Tabelen geliefert - mysql ist also die ganze zeit funktionstüchtig via kommandozeile (auch wenn MySQL im Web gerade abgeschmiert ist).
Der Fehler sieht auch nicht danach aus, dass der MySQL Server abgeschmiert ist. Das sieht eher nach einem Problem im PHP-Script aus, da in der Variable für die Resource ja scheinbar null steht (warum auch immer?!).
 
nachdem ich den apache neustarte klappt es für einige Tage. (2 mal probiert)
anschließend habe ich wieder das gleiche Problem.

PhpMyAdmin und mein Script versuchen sich ja nu normal über mysql_connect zu verbinden (gehe ich bei phpmyadmin zumindest von aus ;) ), was auch klappt.
Nur die Datenbanken können nicht ausgwählt werden (mysql_select_db()).
Bleibt nur die Frage, wieso nicht?
Und warum immer nach einer bestimmten Zeit nach Neustart des apaches und dann nur zwischendurch - wobei es nach längerer Zeit immer öfters zu Ausfällen kommt.
 
Die gleiche Meldung wie im ersten Post.
Code:
Warning: mysql_select_db() expects parameter 2 to be resource, null given in /var/www/forentool/includes/mysql.class.php on line 29

Hab´s dann eben falsch gesagt,das Problem liegt doch schon bei mysql_connect().
 
Was gibt mysql_error() aus nachdem du versucht über mysql_connect() die Verbindung herzustellen?
 
Gar keinen Fehler.
Der Befehl wird ohne Meldung ausgeführt.

Da aber eine Zeile später mysql_select_db() meldet, dass die von mysql_connect() übergebene Reccource nicht gültig ist, muss es ja doch schon bei mysql_connect() einen Fehler gegeben haben, oder?
 
Ja, daher sagte ich ja, dass du mal schauen sollst, was mysql_error() nach dem mysql_connect() ausgibt. Da sollte eigentlich etwas kommen..
Und sonst mach mal var_dump($mysql) ($mysql ist die MySQL-Ressource)

PHP:
$mysql = mysql_connect(...);
if(!$mysql) die(mysql_error());

mysql_select_db(...);
 
Hab den Fehler, tue ihn nur nicht verstehen ;)
mysql_connect hat den Fehler nicht verursacht.

Ich verwende für meine MySql Interaktionen eine Klasse.
Die Klasse sieht grob wie folgt aus:

PHP:
class Mysql 
{
	public $test = "hello";
	public $db;
	
	public function __construct($host, $username, $db_pw, $db_name) {
		$this->db = mysql_connect ($host, $username, $db_pw);
		mysql_select_db($db_name, $this->db);
                
		var_dump($this->db); //null
		$db = mysql_connect ($host, $username, $db_pw);
		var_dump($db); //mysql reccource, mysql_select_db funktioniert nun auch
		var_dump($test); //null
   	}
//...
}

Warum liefern meine Atributte den alle null zurück?
Das Verhalten verwirrt ja anscheinend auch phpMyAdmin.
Ich habe PHP Version 5.3.2-1ubuntu4.6 installiert.
 
Hm.. also bei der letzten Ausgabe ist es klar, du greifst nicht auf die Eigenschaft test der Klasse zu, sondern bist im falschen Sichtfeld (nämlich innerhalb der Funktion.. $this vergessen).

Das davor verstehe ich allerdings auch nicht. Das sollte eigentlich nicht so sein. Was ist wenn du:

PHP:
$this->db = "test";
var_dump($this->db);

mal machst? Kommt dann auch 'null'? Falls ja ist dein PHP kaputt oder so :biggrin:
 
sry Tipfehler, hatte auch mit $this->test getestet und null bekommen.
Bei deinem Code habe ich auch null bekommen.

Um noch einen draufzusetzen:
Hab nun den Apache neugestartet, voila, es klappt wieder.
D.h. Klassenattribute werden wieder ausgegeben.

Ich mein php ist doch ein mal compiliert worden und wird vom apache ohne neustart ausgeführt.
Wie kann das Verhalten von php mit der Zeit einfach so verändert werden?

Ich denke ich setze morgen mal den Server komplett neu auf