max_user_connections abfangen

max_user_connections abfangen

am 22.01.2007 15:27:38 von Stephan Dreisbach

Hallo,

gibt es eine Möglichkeit, die o.a. Fehlermeldung irgendwo per PHP
abzufangen, um auf eine bestehende Webseite umzuleiten?
Oder kann ich irgendwo die Anzahl der augenblicklichen
User_connections abfragen?

Stephan

Re: max_user_connections abfangen

am 22.01.2007 16:00:31 von Axel Schwenke

Stephan Dreisbach wrote:

> gibt es eine Möglichkeit, die o.a. Fehlermeldung irgendwo per PHP
> abzufangen, um auf eine bestehende Webseite umzuleiten?

1. ich sehe oben keine Fehlermeldung
2. das ist kein MySQL-Problem, sondern ein PHP-Problem
3. es ist trivial, einen fehlgeschlagenen Connect-Versuch in PHP zu
erkennen und mit header("Location: http://some.other.site") oder
include("database_not_available.html") zu reagieren.

> Oder kann ich irgendwo die Anzahl der augenblicklichen
> User_connections abfragen?

Nicht daß ich wüßte. Diese Information würde dir aber auch kaum etwas
nützen, weil dir niemand garantieren kann, daß zwischen der Antwort
"es ist noch eine Connection übrig" und deinem anschließenden Connect-
versuch nicht ein anderer Request eben jene Connection verwendet. Die
beste Strategie ist, den Fall zu erkennen und sinnvoll zu reagieren.


XL

Re: max_user_connections abfangen

am 22.01.2007 16:19:10 von Stephan Dreisbach

Axel Schwenke schrieb:

>Stephan Dreisbach wrote:
>
>> gibt es eine Möglichkeit, die o.a. Fehlermeldung irgendwo per PHP
>> abzufangen, um auf eine bestehende Webseite umzuleiten?
>
>1. ich sehe oben keine Fehlermeldung

User xxx has already more than 'max_user_connections' active
connections

>2. das ist kein MySQL-Problem, sondern ein PHP-Problem

und damit doch ein MYSQL-Problem

>3. es ist trivial, einen fehlgeschlagenen Connect-Versuch in PHP zu
> erkennen und mit header("Location: http://some.other.site") oder
> include("database_not_available.html") zu reagieren.

also or die():

Danke für den Hinwesi.

Re: max_user_connections abfangen

am 22.01.2007 16:40:46 von Thomas Rachel

Stephan Dreisbach wrote:

> Hallo,
>
> gibt es eine Möglichkeit, die o.a. Fehlermeldung irgendwo per PHP
> abzufangen, um auf eine bestehende Webseite umzuleiten?

Was ist die "o.a. Fehlermeldung"? Da sehe ich nichts.

Natürlich kannst Du die abfragen - der Query "show variables like
'max_user_connections'" stellt sie Dir zur Verfügung. Sollte von jeder
MySQL-Anbindung aus funktionieren. Sie liefert Dir ein Resultset mit 2
Spalten (Feldern) zurück: Variable_name und Value.

Steht so ähnlich aber auch, glaube ich, im MySQL-Handbuch.


> Oder kann ich irgendwo die Anzahl der augenblicklichen
> User_connections abfragen?

Suchst Du evtl. "show processlist"? Das liefert Dir ebenfalls ein Resultset
mit entsprechend vielen Zeilen.


Thomas
--
Du willst ganz, ganz sicher keine Gruppe, in der die Buchstaben S,
E und X in genau dieser Reihenfolge im Namen enthalten sind.
Sven Paulus in de.alt.admin zum Vorschlag de.soc.homosexuell

Re: max_user_connections abfangen

am 22.01.2007 17:02:22 von Christian Kirsch

Am 22.01.2007 16:40 schrieb Thomas Rachel:
> Stephan Dreisbach wrote:
>
>> Hallo,
>>
>> gibt es eine Möglichkeit, die o.a. Fehlermeldung irgendwo per PHP
>> abzufangen, um auf eine bestehende Webseite umzuleiten?
>
> Was ist die "o.a. Fehlermeldung"? Da sehe ich nichts.
>
> Natürlich kannst Du die abfragen - der Query "show variables like
> 'max_user_connections'" stellt sie Dir zur Verfügung. Sollte von jeder
> MySQL-Anbindung aus funktionieren. Sie liefert Dir ein Resultset mit 2
> Spalten (Feldern) zurück: Variable_name und Value.
>
> Steht so ähnlich aber auch, glaube ich, im MySQL-Handbuch.
>
>
>> Oder kann ich irgendwo die Anzahl der augenblicklichen
>> User_connections abfragen?
>
> Suchst Du evtl. "show processlist"? Das liefert Dir ebenfalls ein Resultset
> mit entsprechend vielen Zeilen.
>
>
> Thomas

Re: max_user_connections abfangen

am 22.01.2007 17:04:37 von Christian Kirsch

Am 22.01.2007 16:40 schrieb Thomas Rachel:
> Stephan Dreisbach wrote:
>
>> Hallo,
>>
>> gibt es eine Möglichkeit, die o.a. Fehlermeldung irgendwo per PHP
>> abzufangen, um auf eine bestehende Webseite umzuleiten?
>
> Was ist die "o.a. Fehlermeldung"? Da sehe ich nichts.
>
> Natürlich kannst Du die abfragen - der Query "show variables like
> 'max_user_connections'" stellt sie Dir zur Verfügung. Sollte von jeder
> MySQL-Anbindung aus funktionieren. Sie liefert Dir ein Resultset mit 2
> Spalten (Feldern) zurück: Variable_name und Value.
>

Ganz so "natürlich" isses ausnahmsweise nicht:

mysql> show variables like '%conn%';
+--------------------------+-------------------+
| Variable_name | Value |
+--------------------------+-------------------+
| character_set_connection | latin1 |
| collation_connection | latin1_swedish_ci |
| connect_timeout | 5 |
| init_connect | |
| max_connect_errors | 10 |
| max_connections | 100 |
| max_user_connections | 0 |
+--------------------------+-------------------+
7 rows in set (0,00 sec)

Da erfährst Du tatsächlich nur, wieviele Connections ein Benutzer
maximal haben darf und wieviele insgesamt zulässig sind. Was Du
*nicht* erfährst, ist die aktuelle Anzahl von Verbindungen. Aus den im
übrigen von Axel genannten Gründen - das ist etwa so wie die Frage
"Wie viele Besucher sind gerade auf meiner Website".

> Steht so ähnlich aber auch, glaube ich, im MySQL-Handbuch.

So "ähnlich" sicher.

>
>
>> Oder kann ich irgendwo die Anzahl der augenblicklichen
>> User_connections abfragen?
>
> Suchst Du evtl. "show processlist"? Das liefert Dir ebenfalls ein Resultset
> mit entsprechend vielen Zeilen.

Mag sein. Aber es tut eben nicht das, was der Fragende wollte, denn es
ist in dem Moment veraltet, in dem er die Ausgabe sieht.

Re: max_user_connections abfangen

am 22.01.2007 17:38:40 von Andreas Kretschmer

Andreas
--
q: why do so many people take an instant dislike to mysql?
a: it saves time (oicu in #postgresql)
Explaining the concept of referential integrity to a mysql user is like
explaining condoms to a catholic (Shadda in #postgresql)

Re: max_user_connections abfangen

am 22.01.2007 17:51:04 von Christian Kirsch

Am 22.01.2007 17:38 schrieb Andreas Kretschmer:
> begin Christian Kirsch wrote:
>
>> Da erfährst Du tatsächlich nur, wieviele Connections ein Benutzer
>> maximal haben darf und wieviele insgesamt zulässig sind. Was Du
>> *nicht* erfährst, ist die aktuelle Anzahl von Verbindungen. Aus den im
>
> MySQL hat keine Ahnung darüber, wer grad verbunden ist? Das finde ich,
> ähm, suboptimal...
>

Definiere "gerade" (übrigens habe ich nirgendwo behauptet, MySQL wisse
nicht, wer gerade verbunden sei. Es ging 1. um die Anzahl und 2.
darum, was es *Dir* verrät). Und dann lies nochmal, was Axel dazu
schrob. Möglicherweise sagt Dir die Prozessliste (die Du
eleganterweise vergessen hast zu zitieren ;-), wieviele Connections da
waren, als Du gefragt hast.

Hilft aber allet nüscht: Wenn Du die Antwort hast, kann sie schon
wieder flasch sein: Entweder hat just jemand ein Close auf seine
Verbindung gemacht, oder dreißig andere haben sich neu angemeldet. So?

Re: max_user_connections abfangen

am 22.01.2007 18:53:25 von Sven Paulus

Christian Kirsch wrote:
> Da erfährst Du tatsächlich nur, wieviele Connections ein Benutzer
> maximal haben darf und wieviele insgesamt zulässig sind. Was Du
> *nicht* erfährst, ist die aktuelle Anzahl von Verbindungen. Aus den im

Die bekommt man aber leicht mittels "Threads_connected" aus SHOW
STATUS. Und natuerlich ist's fuer den vorliegenden Anwendungsfall
nicht sinnvoll, ja.

Re: max_user_connections abfangen

am 22.01.2007 20:51:07 von Andreas Kretschmer

Andreas
--
q: why do so many people take an instant dislike to mysql?
a: it saves time (oicu in #postgresql)
Explaining the concept of referential integrity to a mysql user is like
explaining condoms to a catholic (Shadda in #postgresql)

Re: max_user_connections abfangen

am 23.01.2007 10:00:44 von Kai Ruhnau

Andreas Kretschmer schrieb:
> begin Christian Kirsch wrote:
>> Am 22.01.2007 17:38 schrieb Andreas Kretschmer:
>>> begin Christian Kirsch wrote:
>>>
>>>> Da erfährst Du tatsächlich nur, wieviele Connections ein Benutzer
>>>> maximal haben darf und wieviele insgesamt zulässig sind. Was Du
>>>> *nicht* erfährst, ist die aktuelle Anzahl von Verbindungen. Aus den im
>>> MySQL hat keine Ahnung darüber, wer grad verbunden ist? Das finde ich,
>>> ähm, suboptimal...
>>>
>
>> Definiere "gerade" (übrigens habe ich nirgendwo behauptet, MySQL wisse
>> nicht, wer gerade verbunden sei. Es ging 1. um die Anzahl und 2.
>
> Ich hatte Dein "Was Du *nicht* erfährst, ist die aktuelle Anzahl..."
> allerdings so verstanden.

Genau deshalb die Bitte, du mögest definieren, was "gerade" bzw.
"aktuell" ist. Tip: Bis du auf Clientseite das Ergebnis erhalten hast,
ist das Ergebnis wahrscheinlich schon wieder ein ganz anderes. Aber ich
sehe schon, dass wir in zwei Wochen von dir hören werden, dass MySQL
schlecht ist, denn schließlich wisse es nicht, wer aktuell verbunden ist.

>> darum, was es *Dir* verrät). Und dann lies nochmal, was Axel dazu
>> schrob. Möglicherweise sagt Dir die Prozessliste (die Du
>
>
> ,----[ XL ]
> | > Oder kann ich irgendwo die Anzahl der augenblicklichen
> | > User_connections abfragen?
> |
> | Nicht daß ich wüßte. Diese Information würde dir aber auch kaum etwas
> `----
>
> Ach das interpretiere ich als 'das ist dem System wohl leider nicht
> bekannt'...

Natürlich interpretierst du das so, denn du möchtest ja gerade schlechte
Eigenschaften von MySQL erhaschen um sie demnächst ungefragt hier oder
$woanders rumzuposaunen. Schonmal drüber nachgedacht?

>> eleganterweise vergessen hast zu zitieren ;-), wieviele Connections da
>> waren, als Du gefragt hast.
>
> Es ging nicht darum, von hinten durch die Brust dies zu erfahren.

Ach, das übliche: "Nicht wie $anderes_system", also "von hinten durch
die Brust"? SHOW PROCESSLIST liefert, was du brauchst - wenn du dich
nicht weit genug informierst um zu sehen, was die Antwort von Thomas
bedeutet, kann dir keiner helfen. Rumtrollen macht Spaß, oder?

>> Hilft aber allet nüscht: Wenn Du die Antwort hast, kann sie schon
>> wieder flasch sein: Entweder hat just jemand ein Close auf seine
>> Verbindung gemacht, oder dreißig andere haben sich neu angemeldet. So?
>
> Bekannt. Auch wenn mir grad nix wirklich sinnvolles als Anwendung dazu
> einfällt, wüßte ich aber, daß ich unter $anderem_system abfragen kann,
> wie oft $user derzeit eingeloggt ist. Via SQL.
> (select count(1) from pg_stat_activity where usename = 'kretschmer';)

Und bei $anderem_system ist die Antwort in dem Moment wo du sie am
Client erhälst immernoch gültig? $anderes_system unterstüzt keine
Nebenläufigkeit, sagst du? Na, das erklärt doch mal einiges!

> Okay: als 'sinnvolle Anwendung' dürfte hier gelten: die Frage des OP zu
> beantworten. Immerhin, oder? Und ich kann grad nicht glauben, daß MySQL
> kein Wissen darüber hat, wer es grad mißbraucht. Egal.

Als ob du in der Lage oder gewillt wärst, in diesem Fall hier zu helfen.

Grüße
Kai