phpMyAdmin Problem

Alles, was MariaDB und MySQL betrifft, kann hier besprochen werden.

phpMyAdmin Problem

Postby be1j0 » 13. September 2007 09:54

hallo,

mein mysql server läuft in einer eigens dafür vorgesehenen chroot umgebung (/home/chroot/mysql), der user und die usergroup lauten: chrmysql

das problem was auftaucht wenn ich ihn starte ist folgendes:

mysql -u root -p
Enter password:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)


hab nach dem problem nun schon über 4 stunden gegoogled aber kam zu keiner lösung. in der jail exsistiert die mysqld.sock auch !

server:/home/chroot/mysql# ls -al var/run/mysqld
insgesamt 12
drwxr-xr-x 2 chrmysql root 4096 2007-09-12 17:58 .
drwxr-xr-x 4 root root 4096 2007-09-12 16:32 ..
-rw-rw---- 1 chrmysql chrmysql 5 2007-09-12 17:58 mysqld.pid
srwxrwxrwx 1 chrmysql chrmysql 0 2007-09-12 17:58 mysqld.sock


unter prozessen läuft der mysql server per chroot auch:
chrmysql 5607 0.0 2.9 125960 15328 pts/0 Sl 17:58 0:00 | \_ /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=chrmysql --pid-file=/var/run/mysqld/mysqld.pid --skip-external-locking --port=3306 --socket=/var/run/mysqld/mysqld.sock


gestartet wurde er über den befehl
chroot /home/chroot/mysql /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=chrmysql --pid-file=/var/run/mysqld/mysqld.pid --skip-external-locking --port=3306 --socket=/var/run/mysqld/mysqld.sock & disown


dabei hat er mir folgendes gesagt
server:/home/chroot/mysql/# chroot /home/chroot/mysql /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=chrmysql --pid-file=/var/run/mysqld/mysqld.pid --skip-external-locking --port=3306 --socket=/var/run/mysqld/mysqld.sock & disown
[1] 5640
server:/home/chroot/mysql/etc/mysql# 070912 16:07:41 InnoDB: Started; log sequence number 0 43655
070912 16:07:41 [Note] Recovering after a crash using /var/log/mysql/mysql-bin
070912 16:07:41 [Note] Starting crash recovery...
070912 16:07:41 [Note] Crash recovery finished.
070912 16:07:41 [Note] /usr/sbin/mysqld: ready for connections.
Version: '5.0.32-Debian_7etch1-log' socket: '/var/run/mysqld/mysqld.sock' port: 3306 Debian etch distribution


obwohl er mir anzeigt dass der port gebunden ist:

Aktive Internetverbindungen (Nur Server)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 localhost:1987 *:* LISTEN 2257/sshd
tcp 0 0 localhost:mysql *:* LISTEN 5607/mysqld
tcp 0 0 *:48746 *:* LISTEN 2162/rpc.statd
tcp 0 0 *:sunrpc *:* LISTEN 1778/portmap
tcp 0 0 *:auth *:* LISTEN 2133/inetd
tcp 0 0 localhost:smtp *:* LISTEN 2121/exim4
tcp6 0 0 *:www *:* LISTEN 4766/apache2
udp 0 0 *:32768 *:* 2162/rpc.statd
udp 0 0 *:642 *:* 2162/rpc.statd
udp 0 0 *:bootpc *:* 2237/dhclient3
udp 0 0 *:sunrpc *:* 1778/portmap
Aktive Sockets in der UNIX Domäne (Nur Server)
Proto RefZäh Flaggen Typ Zustand I-Node PID/Program name Pfad
unix 2 [ ACC ] STREAM HÃRT 5422 2078/acpid /var/run/acpid.socket
unix 2 [ ACC ] STREAM HÃRT 59464 5607/mysqld /var/run/mysqld/mysqld.sock


wenn ich mich mit telnet auf den port connecte kommt:

server:/home/chroot/mysql/# telnet 127.0.0.1 3306
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
F
5.0.32-Debian_7etch1-log|k$n"VoK,fD\&EgW^Q^bSConnection closed by foreign host.

nach etwa 5 sekunden kommt connection closed by foreign host
ich versteh nicht wenn der port nicht gebunden werden kann und wenn man nicht sich einloggen kann warum er dann per telnet einen offenen port anzeigt hinter dem anscheinend ein mysqld läuft - auch netstat macht ja den eindruck ?
Evtl ein Permissions bzw Rechtezuweisungsproblem? Bei chroot-Umgebung wäre ja sowas denkbar möglich....



was ich bisher gemacht habe ware die usergroups bei den /var/run zu überprüfen und anzupassen auf chrmysql

über
find / mysql | grep mysql

alle mysql files versucht zu finden und in die jail struktur einzugliedern

ldd /usr/sbin/mysqld

eingegeben und alle nötigen libraries von hand in die jail struktur eingegliedert ...

das komische ist jetzt wenn ich den mysql ganz normal über /etc/init.d/mysql start
starte - also außerhalb der jail ... macht er keine problem ... deshalb whats wrong ?

Zudem hab ich meinen Apache2 auch chrooted und jedesmal wenn ich mich per phpMyAdmin einloggen will kommt:
#2002 - Der Server antwortet nicht. (evtl. ist auch der Socket des lokalen MySQL-Servers socket nicht korrekt konfiguriert)

und das obwohl ich diesmal zum testen gannz normal /etc/init.d/mysql start gemacht habe - also ohne jail

anfangs hatte er in der error.log meines apache2 folgende fehler gebracht:
/usr/lib/libmysqlclient_r.so.15
/usr/lib/libmysqlclient_r.so.15.0.0
/usr/lib/libmysqlclient.so.15.0.0
/usr/lib/libmysqlclient.so.15

als ich diese dateien jetzt aber in die chroot umgebung kopiert habe bringt er mir keine error.log fehler mehr bis auf:
[Thu Sep 13 10:43:59 2007] [warn] pid file /var/run/apache2.pid overwritten -- Unclean shutdown of previous Apache run?
[Thu Sep 13 10:43:59 2007] [notice] Apache/2.2.3 (Debian) PHP/5.2.0-8+etch7 configured -- resuming normal operations

und das phpMyAdmin login geht immernoch nicht ^^ - gleiche Fehlermeldung

Habt ihr auch dazu eine Idee/Ahnung? Irgendwas mit den Rechten bestimmt, aber was? in RTMF find ich auch nix...

mfg
be1j0
be1j0
 
Posts: 4
Joined: 13. September 2007 09:47

Postby Wiedmann » 13. September 2007 10:37

Erstmal was grundsätzliches:
mein mysql server läuft in einer eigens dafür vorgesehenen chroot umgebung
...
in der jail exsistiert die mysqld.sock auch !

Du benutzt chroot oder eine Jail? (Wobei Linux den Jail-Mechanismus (BSD/Solaris) ja IMHO gar nicht kennt?)


OK, gehen wir mal von einem chroot aus:
unter prozessen läuft der mysql server per chroot auch:

Damit läuft genau nur dieser eine Serverprozess (mysqld) im chroot, und die von ihm gestartetetn Subprocesse.

das problem was auftaucht wenn ich ihn starte ist folgendes:
Code: Select all
mysql -u root -p

Was ist "Ihn"?
- Ihn ist nicht der MySQL Server (mysqld)
- sondern "Ihn" ist ein MySQL Client (mysql).

Dieser MySQL Client läuft aber nicht in der chroot, sondern im normalen System.

Code: Select all
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '[b]/var/run/mysqld/mysqld.sock[/b]' (2)

Nur der Server-Process kennt den Socket unter dem (chrooted-) Pfad "/var/run/mysqld/mysqld.sock".
Für die Clients im normalen System befindet sich der Socket dann unter "/home/chroot/mysql/var/run/mysqld/mysqld.sock". Dieser Pfad muss den Clients bei Aufruf als Parameter mitgeteilt werden, oder man definiert ihn in der "my.cnf".

obwohl er mir anzeigt dass der port gebunden ist:

Da du im MySQL-Server also TCP/IP (Netzwerk) aktiviert hast, kannst du dem Client natürlich auch sagen, dass er TCP/IP für die Verbindung nehmen soll, und keinen lokalen Socket.


wenn ich mich mit telnet auf den port connecte kommt:
...
nach etwa 5 sekunden kommt connection closed by foreign host
ich versteh nicht wenn der port nicht gebunden werden kann und wenn man nicht sich einloggen kann warum er dann per telnet einen offenen port anzeigt hinter dem anscheinend ein mysqld läuft

MySQL spricht über TCP/IP kein (ASCII-) Klartextprotokoll wie du es evtl. von HTTP oder SMTP/POP kennst, sondern, sagen wir mal ein "binäres" Protokoll.

Code: Select all
5.0.32-Debian_7etch1-log|k$n"VoK,fD\&EgW^Q^bS

--> Nach dem connect mit Telnet schickt dir MySQL ja Daten (Frage), und wartet dann auf Antwort von dir (Initialer Handshake).

Code: Select all
Connection closed by foreign host.

Da du mit Telnet aber weder die Frage verstehst, noch die korrekte Antwort zurückschicken kannst, bricht der MySQL-Server die Verbindung ab.

Zudem hab ich meinen Apache2 auch chrooted und jedesmal wenn ich mich per phpMyAdmin einloggen will kommt:
Code: Select all
#2002 - Der Server antwortet nicht. (evtl. ist auch der Socket des lokalen MySQL-Servers socket nicht korrekt konfiguriert)

Auch hier findet der MySQL-Client (Die MySQL PHP-Extension) den Pfad zum Socket nicht. Da aber dieser Client ebenfalls chrooted ist (über den Apache), hat dieser Client keine Möglichkeit auf den Pfad vom MySQL-Socket in einer anderen chroot-Umgebung zuzugreifen.
--> Du solltest PHP und phpMyAdmin so konfigurieren, dass TCP/IP benutzt wird.
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby be1j0 » 13. September 2007 14:29

Vielen Dank für deine schnelle Hilfe,

ich habe in den "normalen" nicht chrooted mysql jetzt erstmal testweise so eingestellt dass root über eine definierte ip ( in der /etc/mysql/my.cnf unter bindadress) zugreifen kann ... und es soweit zum laufen gebracht. jetzt hab ich die Daten übernommen und den chrooted mysql damit gespeißt ... da konnte ich dann zugreifen. also scheint auch alles soweit zu klappen. wenn ich mir jetzt die rechte des users root - also wenn der mysql unter chroot läuft und der apache - anschau, dann fällt mir auf dass unter hosts bei root localhost steht und aber da doch eigentlich garnet funktionieren dürfte ... hatte nur die einstellung --skip-networking
deaktiviert bzw ausgeklammert und aus startsyntax genommen ... eigentlich darf er doch jetzt garnet connecten wenns auf localhost und net der ip steht. bloß ich will sicher gehen dass nur ganz bestimmte user über ganz bestimmte ips zugreifen können "extern" ... das macht man ja unter Rechte in der hosts des users ... wie kann ich nun überprüfen ob er das auch wirklich macht. also nur ganz bestimmte user zugreifen lassen.

grüße
be1jo
be1j0
 
Posts: 4
Joined: 13. September 2007 09:47

Postby be1j0 » 14. September 2007 09:08

ich hab jetzt mit mysqldump die mysqldb gebackuped läuft alles jetzt in phpmyadmin wunderbar doch wenn ich die php datei aufruf und er connecten soll kommen 3 fehlermeldungen:

fehlermeldung 1
Warning: setlocale() [function.setlocale]: Passing locale category name as string is deprecated. Use the LC_* -constants instead. in /var/www/apache2-default/interna/dp.php3 on line 51


inhalt line51
setlocale("LC_TIME", "de_DE");


fehlermeldung 2
Warning: mysql_num_fields(): supplied argument is not a valid MySQL result resource in /var/www/apache2-default/interna/dp.php3 on line 86


inhalt line86
$spalten = mysql_num_fields($result);


fehlermeldung 3
Warning: mysql_field_name(): supplied argument is not a valid MySQL result resource in /var/www/apache2-default/interna/dp.php3 on line 116


inhalt line116
$felder[$spalte] = mysql_field_name($result, $spalte);


Hat jmd eine Idee wie ich das fixen kann ?

(die permissions etc sind eigentlich auch die richtigen, kann mit den fehlermeldungen nur nichts anfangen)
be1j0
 
Posts: 4
Joined: 13. September 2007 09:47

Postby Wiedmann » 14. September 2007 10:15

fehlermeldung 1
Code: Select all
setlocale("LC_TIME", "de_DE");

Warning: setlocale() [function.setlocale]: Passing locale category name as string is deprecated. Use the LC_* -constants instead. in /var/www/apache2-default/interna/dp.php3 on line 51

Eigentlich steht die Lösung schon in der Fehlermeldung:
Code: Select all
setlocale(LC_TIME, "de_DE");

siehe dazu: http://de.php.net/manual/en/function.setlocale.php

fehlermeldung 2
Code: Select all
$spalten = mysql_num_fields($result);

fehlermeldung 3
Code: Select all
$felder[$spalte] = mysql_field_name($result, $spalte);

... supplied argument is not a valid MySQL result resource in ...

Beide Fehlermeldungen haben die selbe Ursache:
Das Argument, das was jeweils in der Variable $result ist, ist keine MySQL result resource.
--> Du musst also schauen, wo und wie diese Variable jeweils ihren Wert erhält.
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby be1j0 » 14. September 2007 11:08

habe die Probleme lösen können, indem ich einfach nochmal neu die DB aufgespielt habe. Das einzige Problem was dann noch exsistiert hat war das setlocale-problem, da hab ich mir die manuel angeschaut: http://www.php.net/manual/de/function.setlocale.php
und den befehl:
setlocale("LC_TIME", "de_DE");

umgeschrieben in:
setlocale(LC_TIME, 'de_DE');


Jetzt bringt er mir keine Fehlermeldung mehr

THX
be1j0
 
Posts: 4
Joined: 13. September 2007 09:47


Return to MariaDB - MySQL

Who is online

Users browsing this forum: No registered users and 2 guests