phpMyAdmin – Versionscheck – Firewalls

Gerade arbeite ich an einem Projekt, in dem die Anzahl der Tabellen auf einem MySQL-Server mit mehreren Datenbanken rasant steigt. Zur Verwaltung nutze ich u.a. phpMyAdmin in der Version 4.0.1. Nun haben wir kürzlich die ersten Testsysteme auf einen größeren Server mit einer restriktiven Firewall verlagert. Danach fiel mir auf, dass phpMyAdmin unmittelbar nach dem Login für ca. 1 Minute nicht reagiert, wenn man sich die Tabellen der angelegten Datenbanken auflisten lassen will. Irgendwann kommt dann jedoch die erwartet Übersicht über die Tabellen. Und danach funktioniert auch alles wieder so rasch wie erwartet.

Diese initale Verlangsamung von phpMyAdmin – besser dieses initiale Hängenbleiben – machte mich total nervös. Zumal dieses Verhalten für mich neu war, und ich es auf anderen Systemen bislang nicht beobachtet hatte. Wartezeiten von 1 Minute sind während hektischer Entwicklungsarbeiten nicht tolerierbar. Das beschriebene Verhalten tritt nämlich immer wieder auf, wenn die maximale Inaktivitätszeit, die in phpMyAdmin oder in den php-Einstellungen des Servers gesetzt ist, abläuft und man sich erneut einloggen muss. Und dann will man natürlich keine zusätzliche Verzögerung bei der Abfrage nach den vorhandenen Tabellen im Minutenbereich erleben.

Also hieß es: Logs einsehen. Die Firewall zeigte denn auch tatsächlich, dass der Server, auf dem phpMyAdmin installiert war, versucht, eine HTTP-Verbindung zu der Adresse 216.34.181.97 aufzubauen. Solche aktiven HTTP- Verbindungen in die weite Welt werden von unserem Server aus aber nicht zugelassen.

Ein Nachforschen mit “whois” zeigt, dass diese Adresse möglicherweise unter der Hoheit von SourceForge steht. Oder aber etwas mit phpmyadmin.net zu tun hat. Ok – für einen Test mal die Firewall-Regeln abändern und die Verbindung vorübergehend zulassen. Und siehe da:

Keine initiale Verlangsamung mehr, sondern ein gewohnt spritzig reagierendes phpMyAdmin. Reproduzierbar! Dass phpMyAdmin nach dem Startup so langsam reagierte, rührte also daher, dass das Programm die genannte HTTP-Verbindung erwartete, aber nicht bekam – und den Verbindungsversuch in einer solchen Situation vermutlich mehrfach startete, bis es schließlich aufgab.

Es ergeben sich mehrere Fragen:

Frage 1: Wozu dient dieser Verbindungsversuch von phpMyAdmin ?
Vermutlich(!) zur Abfrage von Update-Informationen (neue Versionen, …). Siehe hierzu den Informationsbereich auf der ersten Seite nach dem Öffnen von phpMyAdmin. Dort wird dargestellt, welche Version man gerade im Einsatz und ob es eine neuere gibt. Aber wer weiß …. in diesen Zeiten …. Ich habe es jedenfalls nicht persönlich im Code überprüft.

Frage 2: Gibt es einen Parameter, um das abzustellen ? Oder muss man mit einem initial sehr langsamen phpMyAdmin hinter einer Firewall leben ?
Nein, muss man nicht – und ja, es gibt einen Parameter. Siehe :
http://wiki.phpmyadmin.net/pma/Config#VersionCheck

In meiner Situation half es demzufolge, in der Datei “config.inc.php” folgende Einstellung einzufügen:

$cfg[‘VersionCheck’] = false;

Das fand ich dann doch sehr beruhigend. Und es löste mein Problem – die http-Anfrage findet danach nicht mehr statt. Und phpMyAdmin läuft dann trotz restriktiver Firewall-Einstellungen performant.

Ich habe das Thema auch im phpMyAdmin-Bereich unter “Stackoverflow” angesprochen.
http://stackoverflow.com/questions/18766123/required-but-not-granted-http-access-to-216-34-181-97-slows-phpmyadmin-down
Wurde wirklich sehr schnell beantwortet. Das Verhalten wurde von einem interessierten Zeitgenossen bestätigt. Dort kam dann noch der Tipp, dass man die Abfrage auch über einen Proxy abarbeiten kann. Siehe
https:
//phpmyadmin.readthedocs.org/en/latest/config.html#cfg_VersionCheckProxyUrl

Danke hierfür an M. Delisle.

Abschließend bleiben folgende Fragen an die phpMyAdmin-Entwickler offen:
Könnte man das Thema mit dem Versionscheck nicht auch anders lösen? Wieso muss diese Abfrage überhaupt automatisiert ablaufen? Und wenn schon – warum nicht dezent und asynchron im Hintergrund (Ajax) mit Einstellungen, die den User nicht blockieren ?

Ich bin daher schon gespannt auf die nächste Version dieses wichtigen und nützlichen Tools.

Opensuse 12.3, mysql/mariadb, logrotate-Fehler

Nach der Umstellung auf die Maria DB unter Opensuse 12.3 bin ich mal wieder über einen mysql-logrotate-Fehler gestolpert.

2013-05-18T10:45:03.378467+02:00 myserv logrotate: ALERT exited abnormally with [1]
2013-05-18T10:45:03.379471+02:00 myserv logrotate: #007/usr/bin/mysqladmin: flush failed; error: ‘Unknown error’
2013-05-18T10:45:03.379739+02:00 myserv logrotate: /logrotate.d/mysql failed, probably because
2013-05-18T10:45:03.379926+02:00 myserv logrotate: the root acount is protected by password.
2013-05-18T10:45:03.380190+02:00 myserv logrotate: See comments in /logrotate.d/mysql on how to fix this
2013-05-18T10:45:03.380359+02:00 myserv logrotate: error: error running non-shared postrotate script for /var/log/mysql/mysqld.log of ‘/var/log/mysql/mysqld.log ‘

Die Ursache dieses Fehlers ist, dass der mysql-root-Account – also der Administrator Account für die mysql/mariadb-Datenbank – natürlich mit einem Passwort geschützt ist. Wo muss man das eintragen ?

Der Hinweis in der Fehlermeldung ist ein wenig irreführend. Natürlich gibt es kein “/logrotate.d”-Verzeichnis. Aber sehr wohl ein Verzeichnis “/etc/logrotate.d”. Dort findet man auch die Steueranweisungen für mysql, und zwar in der Datei:

/etc/logrotate.d/mysql

In dieser Datei findet man folgenden Hinweis:

# If the root user has a password you have to create a
# /root/.my.cnf configuration file with the following
# content:
#
# [mysqladmin]
password = %Tromsoe!
user= root
#
# where “” is the password.
#
# ATTENTION: This /root/.my.cnf should be readable ONLY
# for root !

Das machte die Sache schon klarer, löste sie aber nicht, denn das .my.cnf – File war bei mir bereits korrekt vorhanden.
Also lag der Verdacht nahe, dass es noch ein weiteres rechte-Problem beim Zugriff auf das Log-Verzeichnis für MySQL selbst geben könnte.

Folgender Novell-Bugzilla-Beitrag und die darin beschriebenen Schritte lösten dann mein Problem

https://bugzilla.novell.com/show_bug.cgi?id=763150#c7

This bug seems to occur still on openSuSe 12.3. Simply
chown mysql /var/log/mysql
chmod 750 /var/log/mysql
will fix it.

Danke an den Autor Thomas Wagner !

Kurzreview Eclipse 4.3 Kepler mit PDT und Aptana

Vor einiger Weile hatte ich mich wegen der miserablen Performance enttäuscht von Eclipse 4.2 Juno mit PDT abgewandt. Besonders bei Benutzung der neuen GTK-Oberfläche tauchten immer wieder lange andauernde 100%-Peaks in der CPU-Belastung von 1 bis 2 CPU-Cores auf. Auf meinem schwachbrüstigen Laptop eine Katastrophe – aber auch auf einem gut ausgestatten Desktop-Rechner eine echte Belastung.

Im besonderen galt dies beim Hin- und Herziehen von Tabs zwischen zwei getrennten parallelen, vertikalen Editor-Bereichen der GUI von Juno. Das Öffnen des Outline-Bereiches machte das System nochmal träger. Die parallel Sicht auf mehrere geöffnete Files sowie den Outline-Bereich benötige ich beim Arbeiten mit vielen Klassenbibliotheken aber immer wieder.

Es half keine Herumdoktern an den Speichereinstellungen für die JVM. Genausowenig half eine Umstellung auf die klassische Eclipse GUI. Daneben gab es auch immer wieder seltsame Probleme mit einer parallelen Installation von Aptana und PDT 3.1/3.2. Die Content Assist Vorschläge wurden entweder gar nicht oder nicht immer vollständig angezeigt. Die Schwierigkeiten waren sowohl bei Einsatz von Suns JVM für Java 7 als auch von OpenJDK 1.7 gegeben. Alles unter Opensuse 12.2 und 12.3 (64 Bit).

Für meine PHP-Entwicklungsarbeiten griff ich aus diesen Gründen bis gestern immer noch auf Eclipse 3.7 “Indigo” zurück.

Nun ist Eclipse in der Version 4.3 unter dem Namen “Kepler” erschienen. Daher habe ich gestern erneut einen Anlauf mit dieser aktuellen Eclipse-Version und dem zugehörigen PDT 3.2 plus Aptana Studio 3 unternommen. Und diesmal wurde ich nicht entäuscht:

Alles funktioniert wie es soll und das wirklich performant. Allerdings musste ich meine unter Indigo aufgebauten Workspaces unter Rückgriff auf vorhandene SVN-Repositories komplett neu aufbauen. Erst danach lief alle fehlerfrei.

eclipse_kepler_1_600

An den Standard Speichereinstellungen habe ich nichts verändert. Die “eclipse.ini” sieht daher wie folgt aus:

-startup
plugins/org.eclipse.equinox.launcher_1.3.0.v20130327-1440.jar
–launcher.library
plugins/org.eclipse.equinox.launcher.gtk.linux.x86_64_1.1.200.v20130521-0416
-product
org.eclipse.epp.package.standard.product
–launcher.defaultAction
openFile
-showsplash
org.eclipse.platform
–launcher.XXMaxPermSize
256m
–launcher.defaultAction
openFile
–launcher.appendVmargs
-vmargs
-Dosgi.requiredJavaVersion=1.6
-XX:MaxPermSize=256m
-Xms40m
-Xmx512m

Es gab und gibt nach bislang 12 Stunden Arbeit keinerlei Hänger und keine Peaks in der CPU zu bemängeln! Das Arbeiten mit mehreren parallel angezeigten Editor- und GUI-Bereichen läuft sehr flüssig. Das Verschieben von Tabs für geöffnete Dateien zwischen zwei Darstellungsbereichen führt zwar zu einer kurzfristigen Belastung mehrerer CPU-Kerne – aber eben wirklich nur sehr kurzzeitig und das ist nicht als Bremse für das Arbeiten wahrnehmbar. Auch die Build-Operation für Projekte laufen mit angemessener Geschwindigkeit.

Aptana lässt sich parallel zu PDT einsetzen. Man kann zwischen den verschiedenen “Natures” entsprechend “facettierter” Projekte nach Lust und Laune hin- und herschalten. Die Content-Assists-Hinweise kommen entsprechend. Ich nutze z.T. den Aptana-Editor, um HTML-Code in TPL-Files für die Template-Engines Pear-ITX oder Smarty zu bearbeiten. Ich schätze dabei die browser-bezogenen Content Assist Hinweise. Aber auch der Wechsel zum normalen WST-HTML-Editor mit dessen Content-Assists-Fähigkeiten für HTML- und CSS-Vorschlägen klappt einwandfrei.

Aptanas PHP-Unterstützung benutze ich in der Regel nicht und
habe ich daher nicht wirklich getestet. Ein kurzes Umschalten auf die Aptana Editoren und Aptanas Content Assist für PHP zeigte mir aber keine unerwarteten Probleme.

Die SVN-Anbindung über Subversive und die Polarion-Konnektoren lief wie erwartet. Ein Gleiches gilt für MyLyn

Kurzum:
Für PHP-Projekte stellt Eclipse 4.3 “Kepler” endlich eine ernsthafte, weil funktionierende und performante “Eclipse 4.x”-Alternative zu Indigo dar. Ich kann den Umstieg wirklich empfehlen.

Ein kleiner Wermutstropfen
Schade irgendwie, dass es der HTML-“Web Page Editor” bisher nicht in die “WTP 3.5” -Repositories von Kepler geschafft zu haben scheint. Aber eine Installation aus den WTP 3.3.2 Ressourcen scheint keine größere Probleme zu machen.