| « Leben wie im Backofen | Hoppla, da bin ich » |
Datenbank und ssh Tunnel bauen mit BastlWastl
Was für ein Kampf heute! Da auf dem Datenbankserver in der Uni eine bekloppte kleine Perl Klasse nicht funktionieren will, musste ich mein Programm vom heimischen Rechner starten und die Datenbankeinträge über ssh getunelt in die entsprechenden Tabellen schieben. Natürlich funktionierte das nicht "out of the box"! Erstes Problem: der Server ist nicht von außen erreichbar. Also als allererstes einen Tunnel zu dem öffentlichen Server bauen.
...
Mit einem fröhlichem
ssh kürzel@server1.informatik.uni-rostock.de -L 7612/127.0.0.1/8000
einen ersten Tunnel zum sichtbaren Server aufbauen. Danach gleich mit
ssh datenbankserver -L 8000/127.0.0.1/3306
den nächsten. Nun sollte man also mit
my $dbh=DBI->connect('datenbank:127.0.0.1:7612','user','einPasswort')
gleich mal probieren ob es klappt:
DBI connect('datenbank:127.0.0.1:7612','user',...) failed: Access denied for user
'user'@'datenbankserver' (using password: YES) at GoParseXMLRDF.pm line 23
Naja, muss ich wohl knapp daneben gelegen haben. Vielleicht ist der entsprechende User ja tatsächlich nicht berechtigt? Also wird sich über das Konsolenfenster mit der ssh-Verbindung auf die mySQL Datenbank eingeloggt und ein neuer User angelegt:
grant all privileges on datenbank to 'newUser'@'%' identified by 'neuesPasswort' with grant option;
Eine erneute Ausführung des Skriptes (mit geändertem User natürlich) ergibt dann nicht weniger als:
DBI connect('datenbank:127.0.0.1:7612','newUser',...) failed: Access denied for user
'newUser'@'datenbankserver' (using password: YES) at GoParseXMLRDF.pm line 23
Hmm, das kenn ich doch schon? Wie langweilig. Eigentlich sollte durch das "%" der User in der Lage sein, von jedem Punkt aus auf die Tabelle zu zugreifen. Mit dem mysql Frontend über ssh funktioniert der User ja auch. Super Sache, vor allem weil ich auch nicht an die Log Dateien komme. Also mal Prof. Google fragen. Die häufigste Antwort auf eine solche Fehlermeldung in den hundert Foren die ich durchsucht habe...ist der Username und das Passwort korrekt...Super, mit solchen Hinweisen kann man sicher irgendwann die Welt retten.
Ich bin dann aber doch noch fündig geworden. Also den User ändern und die Berechtigung mit 'newUser'@'datenbankserver' neu legen. Nun sollte es doch endlich klappen mit dem Füllen der Datenbank über irgendwelche verschlungenen ssh-Tunnel:
DBI connect('datenbank:127.0.0.1:7612','newUser',...) failed: Client does not support authentication protocol requested by server; consider upgrading MySQL client at GoParseXMLRDF.pm line 23
Wieder zu früh gefreut. Himmel Arsch und Wolkenbruch!
Prof.Google, bitte hilf!
Diesesmal gings wenigstens mit der Fehlerlösung schneller. Da hatte wohl noch jemand das Problem. Danach schien das Programm zu starten und auch auf die Datenbank zuzugreifen. Juhu!
Mir ist dann eingefallen, daß das Datenbankschema auf dem Datenbankserver an einigen Stellen veraltet ist! Ergo das Programm wieder abrechen, via scp die neue .sql Datei auf den Server schieben, die alten Tabellen mit einem fröhlichem drop table abschießen und das neue Schema mit
mysql -u user -p datenbank < neuesSchema.sql reinwürgen. Naja, mySQL hatte wohl heute was gegen mich:
ERROR 1170 (42000) at line 31: BLOB/TEXT column 'eineLangeSpalte' used in key specification without a key length
und ich bekomm fast einen Tobsuchtsanfall. O.K. ein VARCHAR(500) scheint das Problem oder besser gesagt die Indizies. Nun bin ich kein Datenbänkler... Such Google, such...
Ahja, man muss also bei längeren Spalten die Länge der Indizes in Klammern mitgeben! Mach ich doch glatt. Und mit Schwung hinein damit:
ERROR 1050 (42S01) at line 1: Table 'xyz' already exists
Aber ja doch, ich muss ja wieder alles löschen, was das alte verkorkste Script schon angelegt hatte.
Na endlich, es klappt. Und auch das Programm startet. Also auf meinem lokalen Rechner dauert das parsen der xml-Datei ca.10min, die meisten der anschließenden Flatfiles benötigen 2-5min (mit einer Ausnahme, die brauch mal eben 9h (1,1GB)). Übers Internet und mit ssh-Tunnel an ssh-Tunnel wirds wohl ein bischen länger dauern. Das bischen ist ein bischen untertrieben. Nach 2 Stunden hab ich jetzt die Backen dick. Es ist noch nicht mal die Hälfte der xml-Datei in der Datenbank wiederzufinden! Was wenn ich erst die große Flatdatei...
Morgen in aller Frühe wird der Parser nochmal angeworfen, damit wenigstens ein gewisser Teil in der Datenbank vorliegt. Einfach eine schwere Geburt heute!
Trackback-Adresse für diesen Eintrag
Trackback-URL (Rechtsklick und Verknüpfungs-/Link-Adresse kopieren)